LunarLincolnLunarLincolnLunarLincolnLunarLincoln
  • Home
  • Process
  • Services
  • Work
  • Writing
  • About
  • Contact
  • Home
  • Process
  • Services
  • Work
  • Writing
  • About
  • Contact
Feb
15

2015 State of the Union

  • Posted By : Jennifer Bennett/
  • 0 comments /
  • Under : Business, Coding
Clients, Crew Members, Friends, Family, and Fellow Americans: welcome to LunarLincoln’s State of the Union address.

What a difference a year makes. What an incredible rollercoaster ride. We experienced so many highs last year, and we rode out the lows knowing that they were necessary to gain the momentum needed to reach the next peak.

Halfway through 2014, Wiley, Travis, and I (Jennifer) had just joined forces and were working out of a windowless 100 sq ft office attempting to pretend that we knew how this “running a company” thing works while writing code. Here we are taking a group photo and bemoaning moving out of our first office:

IMG_5157 

B5P80yEIgAEUvGf

Since then, we’ve said hello to new team members Todd, Ben, Patrick, and Jack. And then said goodbye again to Todd as he headed off to the big Apple (Cupertino, not NYC).


guysmural  

cityhousedinner


We moved into a palatial residence (bigger than our own house) and we began what has become a pretty impressive collection of moon AND Lincoln memorabilia.

TheOfficePano

But lets get to the interesting stuff:
Code. Apps. Creating Things. Amazing Clients.

We’ve worked on so many interesting projects. Some we can shout from the rooftops and some we can’t. Some of those we can talk about are on our snazzy new portfolio section of the website – go look at it, its beeeyutiful.

Cool things we got to learn more about last year
  • Complicated algorithms for fuzzy, health-based logic
  • GPS tracking and payment systems for the local shuttle revolution
  • Building the world’s most innovative and challenging UI controller
  • Optimizing an app to be energy efficient while constantly running in the background and logging a user’s location
  • Writing algorithms to clean up data given to us by Apple’s sensors
  • Crunching enormous amounts of data into usable insights
  • Magic cards!
  • Streaming video from face cameras
  • Leveraging the JIRA REST API
  • Maintaining native SDKs and their associated APIs
  • Creating a wicked fast PDF renderer to display PDFs in a customized way
  • Making progress at a reasonable rate on legacy codebases
  • Syncing audio output between multiple devices
  • White-labeling
  • Apps to test apps
  • Apps to ship apps
  • Things that aren’t apps but are in fact websites. (We can do them now, but still hate front-end development)
  • Swift!
Items we shipped publicly (mmm, yes shipping)
  • Compass (Beta)
  • Guestbook for Emma
  • Metric for Emma 1.2 for iOS and Android
  • Expo
  • Joyride Backend
  • Joyride Customer for iOS and Android
  • Joyride Driver for iOS and Android
  • Band in Hand 3.0
  • TappedOut for Android and iOS
  • StyleBlueprint 1.3 for iOS
  • Playmaker CRM for Android
  • XOEye for iOS
  • LoLo 2.0 for iOS and LoLo for Android

We volunteered a ton. We pulled all-nighters at hackathons. We explained how pocket computers work to high schoolers. We gave talks to our fellow developers and also exchanged heated words at usergroup cage matches.

  • Vandyhacks – Building Epic $*&%^
  • East Highschool Magnet – What does it take to build apps?
  • CocoaHeads – Creating Custom Views
  • Nashville Mobile Usergroup – Native versus Cross Platform Cage Match

12087275_1005315902852421_2662332177277726035_o

22962232300_c8e64b8d79_o 

We made a ton of new friends at events around town and across the country

  • Sponsoring Creative Mornings & Nashville CocoaHeads
  • Going to SF for Quantified Self Conference and pitching our hearts out
  • Becoming a finalist for the Nashville Next Awards!!!
  • Watching Expo compete at Pandoland with an app we built for them

giphy-2

We did a bad job podcasting. We did a better job making our internal processes even stronger. And we’re building things for ourselves.

  • Finally finishing our own internal CI/CD system
  • Building a reporting platform to augment our JIRA instance
  • Starting on some products of our own (more details on that coming soon)
  • What happened to NSVille? (Ask @microchip128 & @ianbroyles to get back on the wagon)

 

It was a good year. Based on everything above – I’m not sure how we’re alive, but I can’t wait to do it all over again.

200-2

Love, love, love (and code),
Jennifer (and the guys) (and Abe)


Feb
11

Swift – No longer the new kid in school

  • Posted By : Travis Smith/
  • 0 comments /
  • Under : Coding

It’s been nearly two years since Apple debuted Swift, its successor to Objective-C for iOS and OS X development, and since then the Swift language has evolved considerably.  When Swift was first announced, fans and developers were overjoyed. Objective-C was notorious for its overly verbose syntax and general scariness for new app developers, while Swift was much cleaner and modern without sacrificing any meaningful functionality.  However, most professionals, including the crew here at LunarLincoln, hesitated to adopt Swift at its inception. The language, though shiny and new, was unstable and still maturing.

200-2

Each Swift update brought forth the risk of breaking your existing code.  While Swift was incredibly fun for personal projects and smaller endeavors, it didn’t meet our needs for full-scale production. How would we explain to clients that we couldn’t complete a simple bug fix without totally updating their codebase to work with the latest version of Swift?

One year later – Swift 2.0

Apple open sourced the Swift programming language and implemented a heap of critical missing features like exception handling and protocol extensions.  The language had matured immensely in just one year and we felt it was finally ready for production use.

As of now, we’re still transitioning ourselves to a Swift mentality.  We’re doing our best to write all our new classes in Swift which is introducing all kinds of interesting problems that come with managing Objective-C and Swift in the same codebase.

While I still consider myself to be a Swift noob, I have to say I’m already a huge fan.  I love no longer needing to import class headers or having header files at all.  Wrapping my head around Optionals (pun intended) took a small bit of effort but using them in practice is helping me think about test cases I might have previously not considered.  Objective-C is still a crucial skill for even new iOS and OS X developers due to the sheer vastness of online resources, but I feel that it will slowly be phased out over the next few years.

And now I want to seize the low-hanging fruit that’s been dangling in front of me for this entire blog post.

For everybody on the fence about whether to jump to Swift, I’d say it’s time to get Schwifty!

ezgif.com-resize


Feb
04

From office noob to Android czar – Building a League of Legends App

  • Posted By : Travis Smith/
  • 0 comments /
  • Under : App Advice, Coding

[message_box type=”info”] This week we have a guest post from LunarLincoln developer Travis Smith. He spent 2015 working on a side project which he finally shipped (yay, shipping!) and we wanted him to give us a breakdown of his initial foray into indie development. Enjoy! [/message_box]

Sometimes it’s hard being the only Android user in a shop full of mobile developers.  You’d expect nearly equal representation as Android currently dominates global markets, but alas, mistakes do happen (yes, mistakes). However, a positive consequence of this misfortune is the compelling urge to prove Android is the superior operating system. And what better a way to do that than to become an expert Android developer.

chart-ww-smartphone-os-market-share

Android’s Lollipop OS was released around the start of my development journey and alongside it the beautiful style guide known as Material Design. Coupled with the release of numerous support and design library features, I knew I wanted to create something awesome both as practice and for fun.

giphy-2In addition to being the only Android user in the office, I’m also the biggest video game nerd. My favorite these days is League of Legends, arguably the most popular PC video game in the world. And luckily for me, Riot Games, released a beta version of their public API just a few years ago. Being no stranger to the Riot API (I rigged up an automated system to pull in millions of game records for statical purposes back in early 2014), I knew I wanted to push both my skills and the API to their limits. But where to start? There were already a handful of League of Legends apps in the Play Store and some had hundreds of thousands of downloads.

What was a problem in League of Legends that hadn’t yet been solved?

Friends. All of the existing apps I found made it easy to drown yourself in data and statistics about any player you wanted. However, none of them made it easy to see how your friends were doing, or whether they’re actively playing a game at the moment you’re using the app. Additionally, all of the existing apps were designed before the advent of Material Design.

I could see in my mind what I wanted:

  • A name. I chose League Buddy. It’s simple, a little corny, not violating any copyrights, and unused. Works for me.
  • The home screen should be a list, or maybe cards, of summoners.  I could show their names, their profile pictures, and when they last played a game (or if they were in game that moment!)
  • A Floating Action Button at the bottom could present a popup of some sort that allows users to add new summoners to their list
  • A single swipe to refresh could update the entire list at once and let me know immediately if my buddies were playing without me
  • Tapping a summoner should do… well, something. I hadn’t figured out exactly what I wanted here yet. Maybe show some in-depth detail about the summoner?

Simple, right?

Time to learn some new tricks.

Around the time I started, Android released its ‘upgrade’ to ListView, the RecyclerView, and encouraged developers to stop using the ActionBar and instead use the new more generic Toolbar, which would prove very useful in implementing a core Material Design feature. I had my first screen laid out in my mind, but I still had a few questions.

  • What are the best practices with Activities and Fragments?
  • Does the Toolbar belong to the Activity or the Fragment?
  • What about the Floating Action Button?
  • What if I want to support multi-pane on landscape tablets? How should landscape look in general?

I spent so much time researching everything about best practices that I actually discouraged myself for a few weeks. Eventually I realized that the only way I was going to really learn what worked and what didn’t was by trying my best and fixing my mistakes.

giphy

Since I knew I only had one screen in mind, I decided to put multi-pane support on the back burner. However, I did prepare for the future and opted to implement my layout inside a Fragment (which was really just containing a RecyclerView) and put that Fragment in my Activity along with the Toolbar and Floating Action Button. Back then, I was using a library for the Floating Action Button since there wasn’t an official widget (yet). I created a small view that would slide up from the bottom when the button was pressed and that view allowed users to input a summoner’s name along with the region of the server they played on. For example, I play on the NA (North America) server, but there are about a dozen servers across the globe and I wanted my app to support them all.

unnamedNow I needed some way to persist data. On a previous project at work I had used Sugar ORM as a wrapper on a SQLite database. It worked well but I wanted to try something new. I came across a brand new tool called Realm which touted itself as being incredibly fast. Though still in beta and lacking some features (including null support and subclassing entities), I decided to give it a go.
All that was left was to set up the actual connection to Riot’s servers. Writing an API wrapper was easy, especially since most of my code from my previous Riot API project was up-to-date. I used Retrofit to talk to Riot’s server and Picasso to display profile pictures. After a few nights of work, I had accomplished my goal – an app that showed a list of summoners, with a button to add new people, and the ability to refresh the list. It was crude, not too pretty, and lacked lots of key features (like deleting summoners from the list), but it worked.

And then I stopped working on the project for a few months. Work picked up and summer meant vacations, so I halted progress.

But then, Android released some neat new tools that inspired me to resume development!

The first was an official Floating Action Button. The second was a new view called the CoordinatorLayout which allowed the Toolbar to hide as the list below it scrolled down. Last was a NavigationView class which made implementing a Material-themed navigation drawer incredibly simple.

Implementing the CoordinatorLayout proved to be very challenging. I had placed a view at the bottom of my fragment that indicated the last time the data had been refreshed, and this was throwing off the scrolling of the fragment. Despite aligning the view at the bottom and the RecyclingView above it, the scrolling did not work properly. Somebody else had filed a bug report about this exact issue and fortunately somebody had devised a workaround. However, now that the Toolbar slid out of view when scrolling my summoners list, I couldn’t imagine how multi-pane support would work at this point. My second screen was scheduled to be a scrolling list of cards containing tidbits of high-level information about a summoner, and having two scrolling views under one Toolbar would be very unwieldy for a user if that Toolbar was also sliding.

The next hurdle was the Floating Action Button. Now that Android had an official widget which directly related to the CoordinatorLayout (the button would hide on scrolling), I knew I had to replace it. However, I disliked my current implementation of adding a new summoner. A messaging app called GroupMe provided some much needed inspiration. When tapping their Floating Action Button, the button expanded outward until it filled a small rectangle. I loved it and had to have it. As it turns out, this animation is called a circular reveal animation (surprise!). Android had incorporated a utility class for performing this exact animation, but it was limited to devices running Lollipop or newer (which was a very paltry 10% around this time). Fortunately I found a library that provided the exact needed functionality to my app.

unnamed-1Along the way I encountered a new pattern I had never seen before: the event bus. While I’m still torn today over its fit as a best practice, I decided to integrate Otto into my app to help with loading and passing data. In hindsight, I regret this decision a bit, as it led to some poor coding practices and tangled dependencies. As practice, I also decided to upgrade all of my API calls to return RxJava Observables, as functional reactive programming is something I’m becoming more and more interested in.

Creating the summoner overview cards screen was fairly easy. The card styles were adapted from official examples and look very clean. I was able to use a StaggeredGridLayoutManager to allow different orientations and screen sizes to show different numbers of cards side-by-side. Because of switching to using RxJava Observables, loading all of the necessary data (since none of this data is persisted) was easy. I threw together a quick Settings screen which let users change their default region (which will be automatically selected when prompted to add a new summoner) as well as their preferred language (which all Riot data will be automatically translated to).

After a brief QA round across different devices and SDK versions, I had a working, ready app. With one problem.

Riot’s development API key is severely rate limited. To get a production level key, I’d need to get them to approve my app. And to do that, I had to follow their rules. The first rule is that no client-facing application can have the API key embedded in its code. This meant I needed a server to act as a middleman between my app and the Riot servers to append my API key and return the data. The second hurdle was that I needed a website to showcase my app and provide screenshots, FAQ, etc. I took my meager bit of Node.js and Express knowledge and pieced together a very small server application which would cache results for a few minutes and return the data to my app. I hosted this on DigitalOcean, struggled to get a free SSL certificate, and eventually got it working. I purchased the domain leaguebuddyapp.com and worked with Jennifer to set up a very simple one-page website (which is almost done, I swear!).

200

(^Jennifers reaction to this statement)

I was ready to publish.

Presenting, League Buddy! It’s small, it’s nowhere near finished, it’s got some kinks, but it’s mine. I’ve got tons of ideas for future expansions to the app. A wiki page with data on every champion and item in the game, a statistics section that lets you compare yourself to your friends (or even professional LoL players, if you dare!), and tons more cards on the summoner overview screen. Not to mention all the detailed pages for nearly every card! I’m going to be busy for a very long time.

leageulegends

 

Despite the incredibly long blog post, this doesn’t cover even half of the sometimes silly and often frustrating problems I encountered on this journey. But I feel it was completely worth it.

I’ve exposed myself to so many new communities, picked up so many new skills, successfully learned which patterns I like and which I don’t, and ultimately shown I’m capable of creating an entire application from scratch, including its server and web components. It was fun, challenging, and awesome. With 2016 under way and my routine back to normal, I’m hoping I can commit a little bit of time each week to cranking out some new features.

In the meantime, check out my app and let me know what you think! I’m open to all criticism and suggestions for improvement.

And I should offer thanks to the entire LunarLincoln team for putting up with my rambles and questions over the last year about this hobby project. Even though they’re not exactly Android fanboys and girls, they’re all brilliant and offered tons of great suggestions. I’m immensely thankful for their help and looking forward to using my new skills on upcoming Android projects.


Oct
28

VandyHacks

  • Posted By : Jennifer Bennett/
  • 0 comments /
  • Under : App Advice, Coding

Zack Morris Cell PhoneWe’ll let you in on a little secret – smart phones didn’t even exist when we were in college (other than early Blackberrys). LAN Parties were super high-tech and the App Store wasn’t open to developers until July of 2008. As a result, events and hackathons like VandyHacks weren’t an option for undergrad Jenn & Wiley.

A lot has changed. For the tech world in general and for the learning opportunities available to new developers. We decided to help sponsor this year’s VandyHacks as a way to give back to younger versions of ourselves and dive head first into the whole mentoring thing.

During the event we were available to provide advice, guidance, and a lift over the hard parts of assembling an app from scratch. Shout out to Travis and Ben for pulling several all nighters with student teams.

vandyhacks

On top of that, we also gave a talk about building apps at a higher level – looking beyond the mere code.

We compiled the talk as well as lots of handy resources as a page on our site that can be found here. But, its not just handy for the VandyHackers, ANYONE can use this stuff.

Amazing goodies available at that link:
  • iOS & Android Tutorials
  • iOS & Android Favorite Tools/Sites
  • Wireframing Printables
  • Resources for GUI design kits
  • Prototyping Programs
  • Photoshop & Sketch Tutorials
  • The secrets to life – vis a vis a LunarLincoln slidedeck

 

The weekend was great. We met some fantastic future developers, and gave out a prize to a team from Georgia Tech that built a pretty great simulation game with Google Tango as freshmen – Catching Cubes! (Talk about ambitious). Congrats to: Miti Joshi, Tessa Jensen, Zac Romick, and Vritant Bhardwaj.

shootformoonwinners


Jul
20

Better, Stronger, Faster

  • Posted By : Jennifer Bennett/
  • 0 comments /
  • Under : Coding

“Gentleman, we can rebuild it. We have the technology. We have the capability. We can make it better than it was. Better, stronger, faster.”

Please excuse my take on the Six Million Dollar Man quote but it’s true. With more minds, more space, and better tools we’re really excited for all that we can build in 2015…and beyooooooond (wait, that one is Toy Story).

SixMillionDollarManGIF

For our clients we can now build more, faster. We have a greater breadth of experience with our five developers to better serve niche specialties.  More developers also equals more manhours or wo-manhours available. Is your startup blowing up (in a good way?) – yes we can double our scope this week and yes someone on our team has unique insights into the code you need built.

On the internal side we can now devote more time to infrastructure (build servers, client information portals, moar expert-dev blogging). We now also have time to build detailed processes for the many, many things that revolve around building apps that aren’t just development – like marketing, QA testing, user testing, prototyping, and launch plans.

Come test drive our improvements yourself. Work with us to make the future of mobile development better – one Six Million Dollar Project at a time.

 


May
06

Pixel Pushing – Custom Drawing for iOS

  • Posted By : Jennifer Bennett/
  • 0 comments /
  • Under : Coding

The devices we carry in our pockets everyday are becoming increasingly complex and are able to capture and log more data than ever before. As a result, it is inevitable that in an upcoming meeting you will be asked to do the following:

“We want charts. Bar charts, line graphs, pie charts, lots of stats, a graph for every person, every place, every hashtag, every action – we want to show it all”…..”Oh, and wouldn’t it be cool if it animated into place too?”

Dust off your middle-school geometry folks, because today with Core Graphics  we’re going to draw some graphs.

computergraphs

 

Watch Wiley’s Cocoaheads talk to learn everything you ever wanted to know (and some you didn’t) about Core Graphics

This talk covers the following:

  • UIView Properties
  • CALayer View Properties
  • UI Bezier Paths (Lines & Shapes)
  • IBDesignable
  • IBInspectable
  • Implicit & Explicit Animations

Or download the slide deck for the highlights. 

[responsive_video link=”https://youtu.be/YEu9IgaUus0?t=9s”]


Nov
14

One Design to Rule Them All – Android’s Material Design

  • Posted By : Jennifer Bennett/
  • 0 comments /
  • Under : Coding, Design

Google has debuted a new style guide for their recent OS – Lollipop. It is called Material Design and the internet is BLOWING UP with articles about this new guide. Well we’re about to jump on this bandwagon too and explain why this is such a big deal.

dogdoorThe #1 problem Android has had since its creation is also it’s own selling point. Diversity. Many different phone manufacturers made many different phones and added their own “takes”, if you will, on the Android interface. Free market! Do what you want! Anything goes!

That sounds great, right? Right!?!

One person’s “diversity” is another persons “market fragmentation”. Alot of ugly, bloated, inconsistent interfaces were made. There are over 4,000 different phones to potentially design for! Every company wants to add their own bizarro system apps. See below:

verizonbloatware

Look at all that bloatware – plus Verizon – you’re using three different icon styles. wtf.

So, after almost a decade of Android phones – Google has taken a stand on their ever growing phone market.

Enter: Material Design.

So is this just a new, shiny band-aid on a giant over-designed problem? Actually – Google has done a wonderful job.

materialdesign

It incorporates the growing trend for flat design, but most importantly, it clearly and thoroughly addresses gestures, touch, and movement. As screens become larger, interactions are critical. Consistency across devices allow users to feel knowledgable and comfortable with ALL Android devices. Moving menu buttons or changing the direction screens swipe is the equivalent to putting your wallet in the wrong pocket. It’s just wrong, and leaves the user feeling disoriented.

Fortunately Material Design sets best-practices for all aspects of Android design and development. Google is already implementing it across all of their wide-reaching features – setting the example for others. I’m excited to see developers and manufacturers begin implementing these changes and can’t wait for a newer, cleaner Android (that doesn’t require me to root my phone). It’s beeeeyutiful.

beautiful

Will this be a game changer for iOS design snobs? Open software outside of Apple’s restrictive app store PLUS beautiful interfaces? We’ll see.

e665z

PS. Wiley (who worships at the foot of the golden apple) believes I am being too optimistic about this new design spec. Rebuttal article is forthcoming.

PPS. Travis is very excited about the new elevation feature (DROP SHADOWS ZOMG) – (But I agree!!! Putting things underneath other things – what a novel idea).


Nov
12

We live in the future

  • Posted By : Jennifer Bennett/
  • 0 comments /
  • Under : Business, Coding

“The best thing about the future is that it comes one day at a time.” – Abraham Lincoln

Today, we flew a probe 4 billion miles through space to land on a comet moving 40,000 miles per hour.

When we originally developed the name LunarLincoln for our company it was events like this one that inspired us. We’re explorers, we’re inquisitive, we’re resourceful. Humankind’s ability to see the future and plot its possibilities allows for organizations like the ESA to build and develop a space probe that will travel through the immensity of space for an entire decade in order to land on a comet – an undertaking that seems somewhat unreal and ridiculous to me. We not only attempted it, we were successful.

Here at LunarLincoln, we aren’t building incredibly complex space probes and rockets – but we are innovating. We are playing with the edges of developing technology. We are excited for what our fellow engineers are creating and hope to do the same ourselves (albeit on a smaller scale).

Things may come to those who wait, but only the things left by those who hustle. – Abraham Lincoln.

Keep hustling. Keep building. Keep exploring.

B2QC8nSIEAA9rVJ.jpg-large

 

Rosetta’s parting shot of the Philae Lander after separation.


Sep
23

Just get it done, dammit – To-Do Apps

  • Posted By : Jennifer Bennett/
  • 0 comments /
  • Under : Coding, Uncategorized

We’re busy, you’re busy, everyone has shit to do. But the real question is – how DO you get all that stuff done? Magic? Mary Poppins finger snapping? I wish.

marypoppinssnap

For me, I am old-school. I love nothing more than making a list at the start of each day and checking things off on a pad of paper. Each little checkmark sends a tiny bit of dopamine coursing into my brain. (Sometimes I’m guilty of even half x’ing a box when I’m in progress on a task and want to congratulate myself on being “mostly” done). This works for me. It helps me sort and prioritize my day and gives me a historical list of things done and not done.

Others may want a more high-tech approach. Enter “To Do” apps. Everyone and everyone’s cousin has an idea for a good to do app. “It will revolutionize your world!”.

No. No it will not. It is just an app.


Screen Shot 2014-09-23 at 12.12.27 PM

But, there are a lot of them out there – you almost need to make a list in order to find one.

  1. Make list of what would be helpful
  2. Research top to-do lists
  3. Download 15 to-do apps
  4. Spend hours procrastinating by testing out apps in order to find “the ONE”
  5. Enter half your information in several apps
  6. Cry as your phone explodes with endless notifications
  7. Spend all your time dismissing notifications and not getting anything done.


As you can see – its a lot to think about. However, what will be most effective is an app that MOTIVATES you. Me? I’m motivated by getting to check boxes. But….
some may like it to be a competitive game (HabitRPG)
some may need threats (Carrot)
some may need a pretty app to look at their list in (Clear)
some may just want an app that consents to their procrastination (Procrastination)
some just want to use what everyone else is using (Wunderlist)

Ironically, Wiley has “writing a post about to do apps” on his to do list – I’m not sure all these fancy apps are helping him DO it though.

(Further disclosure Wiley has used the following in his search for “THE ONE” : Wunderlist, Things, Omnifocus, To-Doist, Checkmark, Clear, Carrot, Free-time, Lift, DOOO, 30/30, Nobze, EasyTask Manager – THIS IS ONLY ON IPHONE)

How does LunarLincoln, as a company, handle to-do lists? Drum-roll please: JIRA. JIRA is the grandfather of development to-do lists. It provides bug tracking, issue tracking, and project management functions and is where we spend ALL DAY LONG. It also keeps us on track, our clients on track, and sorts through the hundreds of storyboards we are constantly creating.  JIRA is the un-pc shortening of Godzilla – and is made by Atlassian.

We’ll cover more about JIRA and it’s sister program Confluence next week. For now I’ll leave you with Travis in a godzilla costume, showing how much he loves JIRA:


Jan
08

Squashing the Bugs and App Maintenance

  • Posted By : Jonathan Wiley/
  • 0 comments /
  • Under : App Advice, CaseCollage, Coding

No matter how much you test an app prior to launching it, IT WILL HAVE BUGS. Sneaky, weird, strange things that only appear once thousands of eyes and fingers start exploring what you have built.

With the shortened build window for CaseCollage, we had to move extremely fast. We rode the line of what is necessary to produce a functional, pleasing app, with the “just ship it” mentality. We got our MVP into the hands of as many people as possible but with a 2 week development window we only had a few days to gather feedback and iterate. Let’s hope we know what we’re doing 🙂

Once your app is in the wild, there are 2 kinds of bugs you want to look for: bugs in the code and bugs in the UX. Bugs in the code usually manifest themselves as crashes and we were pleased not to have too many of those (less than 2% of sessions resulted in a crash). Crashes are relatively easy to handle as long as you can get a stack trace. We used Flurry analytics to gather crash reports automatically and tackled the biggest offenders in each iteration until we got the crashes down to under 1%.

UX bugs on the other hand are annoying, frustrating, and eat away at a user’s app experience. They’re also hard to track down without very, very detailed explanations. “It just doesn’t work right” is not what you want to hear from a disgruntled user. What did you do? In what order? On what device? Odds are they did something you’ve never even remotely thought to try (otherwise you would have seen the issue and fixed it, right?). The main UX bug for our users happened when they exited the app to add photos to their camera roll, only to return and find they didn’t show up in the app. After many confusing emails referencing the problem we finally grokked the issue, fixed it, and got an update to our users.

My favorite part of app updates these days is the relative speed at which updates get to your users (at least after you get through app review). While its not the 100% day one adoption you get on some other platforms, the automatic app update feature introduced in iOS 7 seems to have really helped uptake. Here’s a graph of our users by version over time. Not too bad:

Screen Shot 2014-01-04 at 12.56.11 PM

Fixing bugs is never the most glamorous part of app development but its extremely important if you want to keep your users happy. Happy hunting!

If you’re late to this rodeo, you may not know, we built an app and wanted to share some of the details. You can find related articles below:
Part 1: The Ah-Ha Moment And What Comes After – The idea for the CaseCollage app

Part 2: Building an App in 2 Weeks – App development process, Wiley’s analytical take

Part 3: Roller Coaster App Store Review – App store submission hurdles

Part 4: Becoming “Internet-Famous”– Prepping for launch and app marketing 101

Part 5: Squashing the Bugs and App Maintenance – When things invariably go wrong


12345
Recent Posts
  • Celebrating 10 Years
  • Copious Communication
  • Initial Questions for a New Mobile App Project
  • Gif TV: A LunarLincoln Product
  • Onboarding other peoples code
  • What’s in a name?
  • Don’t build it all. Picking a Platform.
  • Talk to your Users
  • Design for Fat Fingers
  • A new look
Archives
  • August 2023
  • May 2021
  • September 2020
  • November 2019
  • October 2019
  • June 2019
  • April 2019
  • February 2019
  • January 2019
  • October 2018
  • August 2018
  • June 2018
  • April 2018
  • January 2018
  • October 2017
  • August 2017
  • June 2017
  • February 2017
  • January 2017
  • September 2016
  • July 2016
  • April 2016
  • March 2016
  • February 2016
  • October 2015
  • September 2015
  • July 2015
  • May 2015
  • February 2015
  • December 2014
  • November 2014
  • September 2014
  • May 2014
  • April 2014
  • January 2014
  • December 2013
  • September 2013
  • August 2013
  • July 2013
  • June 2013
  • December 2010
Categories
  • Agency
  • App Advice
  • Branding
  • Business
  • Business
  • CaseCollage
  • Coding
  • Design
  • Design
  • NSVille
  • Uncategorized
  • Web Design
Copyright LunarLincoln 2025. All Rights Reserved