Sunday, June 28, 2015

Customer Support

I currently have two apps in the Apple App store (one free and the other paid).  I currently am working on my third one. If you have read some of my previous posts it's obvious this new app will have some type of sync option.  So I am really jazzed about learning and applying that solution.

So last week I was diligently working on this sync problem when I got an email from a customer about an update I had just done on my paid app.

This old app is written in Objective-C and was done as I learned iOS development.  Needless to say the code is UGLY.  I wouldn’t write it that way today.  Additionally it was first deployed on iOS 6, so it had that look and feel.  

Over the years I have upgraded and changed some of the visuals to be a bit more modern, but it still needs a good overhaul.  To be honest, I don’t have a lot of desire to go back and rewrite it.  Additionally it doesn’t bring in a lot of revenue.  I do get some, but not enough to make it worth supporting.

Anyway, as I was saying, I got an email from a customer telling me about a critical bug that I had missed in my last update (only 4 weeks ago) and it basically made the app useless.  I was appalled.  How could I have missed that bug?  

I knew I was rushed at the time I was doing the update but I never even touched that area of the code.  It wasn’t like the app was crashing or anything, but it still was a critical bug.  So I stewed all day while I was at my day job (earning real money) about what could have gone wrong and how I might fix it.

I dreaded getting home. I knew my whole evening would be lost trying to find and fix the bug and resubmit to the App store.  To make it worse, I knew it would take an additional eight days to actually get the app through the review process and on the store.  Which meant the one customer email I had was going to be a flood of emails soon, (or I would get no other emails, which would tell me no one was using my app).

I got home and quickly found the problem.  Turns out to be I had refactored one line of code where the problem was occurring, but that line should have been guarded by an “if” block.  It wasn’t which meant that line of code was run every time the view opened regardless of the state of app.  That was a very bad thing. It meant the user’s input would never be honored.

I fixed the bug and retested everything.  I found myself looking at code that needed to be refactored and I had to resist the urge as I wanted to get the update out that night.  Which I did.

That left me with the dilemma of do I wait eight days to get this fix out?  My app is hardly used right now, but what would my customers say who upgraded and found out they could no longer use the app?  So I decided the best thing I could do was request an expedited review.

I REALLY hated to do that for this app, but in the end I decided it was the right thing to do.  I knew Apple had very strict rules on when and how often an expedited review could be requested.  With the limited distribution my app has I really hated to use what I saw as my one time use of this feature for this app.  But I did it.

As expected, I got a very sternly worded email from Apple that I should not abuse the system and these types of requests were approved on a limited basis.  But by the time I got home from work the next day the update had been approved and was on the store.

So in the end I guess I learned a few things:
  1. The system worked as designed
  2. When working with an old app, just fix what needs to be fixed, don’t refactor
  3. And most of all I need to test more before releasing

I can’t wait for a released version of XCode 7 with it’s new UI testing capabilities.  I will definitely want to set that up for all my apps going forward.  

So why did I title this post “Customer Support”?  Well, for a single developer, customer support is hard.  You end up having to drop everything you are doing to address the concerns of your customer.  Programmers aren’t always the best front line support people.  But when it is only you, thats all you can do.

In the end this turned out ok.  The customer was happy that I had listened and was able to fix the problem so quickly. I learned I need to do a better job of testing, and I actually sold a couple of more units as well.

Next week, I hope to get back to my sync solution.  I have refactored the code a good bit since my test app and am now moving it into production.  So I hope I will talk about that in my next post.   

No comments:

Post a Comment