Hung Truong: The Blog!

What I Learned From Checkmate

September 09, 2010 | 4 Minute Read

Just about two weeks ago, I released my first paid iPhone app, Checkmate. The experience has been priceless, plus I made a few bucks as well. I thought I’d share the stuff I learned, both technical and otherwise.


Core Location. Being the first iPhone app I’ve done that uses Core Location, I learned a lot about the process of starting up the location manager, filtering location updates and getting them to work in the background. The background stuff is pretty new, just released in iOS 4.

Design takes thought. One of the most difficult things in designing an app is balancing between user expectations (“it should work like magic”) and real-world constraints (battery, accuracy tradeoffs). I’ve taken the approach of leaving the details under the hood (another app that does something similar gives users full control) for simplicity. This is a deliberate design decision. I’ve found that many users are happy with the app, and some are unhappy. I assume there is a minority that is unhappy, but that they seem to be more vocal (more on that later).

Core Data. I also learned about Core Data, since I use that for storing venue data persistently. There’s a bit of a learning curve with Core Data, but I have a pretty good idea of how it works. I guess it helps that I’ve designed a bunch of database schema in the past.

Get to good enough. I definitely feel like I have accomplished something by releasing the app. I have wrestled in the past between releasing something when it’s “good enough” but not getting stuck in perfectionist limbo. In the case of Checkmate, I got to a point where I was happy enough with its performance (it works) and did not want to delay any further, lest I lose steam and give up on ever releasing it. Now that I’ve gotten a feedback loop going, it’ll be easier to improve and update the app anyway. As far as interface design goes, the app is a bit clunky for my taste. Having admitted that, I think I could go back and make some things more obvious (like the login screen) and polish up the user experience.


Ask for reviews. Ask satisfied customers for reviews. Because if you don’t, only the unhappy users will post them. And you’ll end up getting a pretty bad average rating. Even if your app makes crap into gold, there will be users who don’t see the value in it, or think that $2 is too much to pay. Encourage users to post reviews in-app and you’ll see a well-rounded view of what people think about your app.

It’s okay to have a competitor. While developing my app, I found that another similar app had launched and gotten some press from Techcrunch. This was a bit depressing as I wanted to have that exposure. I ended up using it as a motivator since the blog post and app validated my own idea. There’s always room for competition, especially if you can outdo them.

Popular takes all on the App Store. There have been blog posts on the subject of iTunes ranking and how valuable it is to make a top 100 list. Apps seem to be ranked in search based on their sales volume, which means that popular apps will become more popular. Having been featured on Mashable at launch, my app got to #2 for a “foursquare” search. This helped a lot for residual sales. I’m assuming that most apps are sold directly from app store searches. There are other ways to discover apps.

Have fun! It was really exhilarating to see my app get into the app store and into the hands of users. I set up a twitter account to communicate with users, monitored twitter searches for my app and answered emails sent through a contact form on my website. It was really fun having people react to work that I did. It’s probably one of the strongest motivators for me to keep doing what I’m doing.

I have learned a great deal from my first commercial app launch. I’m really glad that I had an idea and stuck with it to completion. I’m still learning a great deal from Checkmate. I know that this experience will make the launch of my next product/app (whatever it might be) more smooth, both for me and users!