Developing a simple iOS app two very different ways.
First I hired a developer then I learned to do it myself.
Objective C always seemed like the type of thing that only my genius computer science major friends could conquer.
I had spent some time trying to learn my ways around the iOS SDK, taking the famous Stanford iPhone class and Harvard's CS50 on iTunes U. I even started reading the Big Nerd Ranch book on object oriented programming. I didn't have enough free time in my life to make it very far and watching classes on a crowded subway while commuting wasn’t particularly conducive to making headway either.
One day, I was cooking dinner and using my iPhone's built in countdown timer. I started cooking string beans or something and went to create another timer - except there's no way to do that in the Clock app. I went to over to the App Store and checked out the existing timer apps but found them all to be horribly executed with careless UX, pixel design and ghastly icons.
So after dinner I started designing a simple utility app to let you time as many things as you want. I came up with a list of robust features and user stories to suit many different scenarios. Once I had a complete set of designs, I contracted a developer that my coworkers brother had worked with successfully to develop an iPhone game. I had heard that they had been rather successful with their app which influenced my decision to spend several thousand dollars on the project.
Like most software development projects, things come up. Limits of the SDK are discovered. Hours add up fine tuning details. Features have to be deprecated. But in the end we finished the app and it was submitted to the App Store. Great success, I can quit my job tomorrow to start a mobile software company.
Not so quick, the App Store is filled with thousands of apps and even with a five star rating your app may not show up in the searches as you’d expect. I contacted my favorite tech blogs and quickly realized that they were inundated with requests for app reviews. There wasn't any room left for a simple well designed productivity app. You have to be ground breaking or sensational to get any press coverage.
I averaged around 10 downloads at $1.99 a month over the next two years. After that, sales trailed off. Some features stopped working correctly in iOS 6 and the iPhone 5 introduced a new screen size that I couldn’t support without development. At this point I was pretty sure the app had had its run, and total sales had barely paid for the developer account let alone the upfront costs of app development.
While my app in no way was a financial success, I don’t consider it a failure. I learned a lot about the iOS SDK and app development. It was a totally rewarding experience and a real point of pride in my design portfolio. It was designed with extreme skeuomorphism, a year after the iPhone first got a Retina display. To quote Dr. Thomson, "with the right kind of eyes you can almost see the high-water mark—that place where the wave finally broke and rolled back." App design turned and went in a different direction.
This summer, my friend mentioned that he was taking classes online at Treehouse.
He had made a simple iOS app and suggested that I check it out. So one night I started the first lesson, after about an hour I was doing well - writing instance variables in Xcode alongside the instructor in the video. I work with developers so I’m familiar computer science concepts, variables, arrays, loops - but I never was able to nail the syntax. At work we hand write json to use as mark up, my basic code-literacy had improved from nesting objects in 10,000 line files. I was stoked, so I signed up for a membership and kept taking lessons.
I’d stay up late and night, then get up early the next morning to continue the classes. I was pleased that I had successfully made two apps following instructions but I wasn’t feeling accomplished. I wanted to write some code on my own. Treehouse had taught me the fundamentals of reading documentation so I dug in. Knowing that I wanted to re-create my timer app I started by trying to make a clock.
Simple enough, but I had to figure this out on my own. I knew about date formatters from my lessons so I took that and was able to display the current time, but it wasn’t updating. After some time on StackOverflow I realized that I had to use a timer to update the label. Boom - just for fun I formatted the time to include thousandths of a second and set it in a large Helvetica Neue Ultralight. Build it to the phone and call it my first app. My developer friends at work were pretty amused that a designer had managed to make anything.
Next, I decided to make it countdown from ten minutes. This took some work, but after a long night or two and a new wrinkle in my brain I had it working. I then spent some time learning the ins and outs of the UIPicker. I found a few tutorials online and in Apple’s documentation. Eventually I got one working and was able to use it to control the duration of my timer.
After that I learned how to show and hide UI elements programmatically and got a local notification up and running. It was particularly painful to play an audio alert when the app received a local notification. You have to do the set up in straight C which I had never used, but eventually I got it working. I now had a working timer, but only one.
So I set off to build an app that would let you have as many timers as you wanted. I studied the sample apps from Apple’s documentation. I rematched lessons from Treehouse on making custom classes to store data. I made a data controller class. I wrote methods for my master and detail view controllers, and after many lines of code undone commented and deleted I had a working Master-Detail app working.
Except that I was displaying the timer duration in the list view, not the remaining time as I wanted. I found that I could refresh the cells to update the time, but this caused issues while editing. So I wrote a method to pause the timer during editing. I should be able to write a custom class for the cell which would allow me to keep the time running in editing mode - but thats on the product backlog. As they say, “Good enough and shipped is better then perfect and still in development.” And I wanted to ship it in time for Thanksgiving so people who are cooking 15 things at once can use it.
Things were looking pretty solid, I had been finding and fixing issues along the way in the daily builds that I would test on the subway then debug after work. I had added in a method to save One weekend I decided to do something bold - start work on the iPad version. This proved to be easier then I expected - I added a new storyboard to the project and wired it up with a split view controller. This points to a master and detail view controller so I was able to use the existing implementations. There were some interesting issues that took a few days to iron out, but I persevered and had a working dual orientation iPad app!
This whole time I was thinking how to price the new app. I had some options…
1. Update the existing app and keep it as a paid app. I felt that this was a good option because my existing, albeit small, user base would get the update. Something I felt that I owed them. Maybe cut the price from $1.99 to $0.99 Add an ad to the app and make it free.
2. Update the old app and release a new free version with an ad.
I looked at the competition, and while it wasn’t up to my standards it was dominated by free apps. While I’m willing to pay a buck or two for an app - I know that many people won’t. I’m personally much more likely to try an app if its free, especially if I need it in a crunch. I don't have a popular podcast or any real internet fame, and considering how the app fared last time - it will get the magical price of free.
iAd doesn’t have a 100% fill rate, and it has a classy advertiser base, so I don’t feel like its that intrusive. Not like full screen videos in some games. I plan on implementing an In-App Purchase for people that hate ads and don’t mind paying for software. For those users I’ll add some extra features, starting with labels for timers and more sounds. (I left out labels because I felt like they took too long to fill out when making a new timer.)
The update was submitted the update to iTunes on Sunday and it was approved on Wednesday. It’s now available for free! I’d love to hear what you think, positive or critical.
I hope you enjoy Timer Professional 2.0, happy timing! Contact me @asaretzky with any feedback or questions!