After getting my feet wet with iPhone and Objective-C development, I decided early Tuesday morning to issue myself the following challenge: Create an iPhone application and submit it to Apple in 24 hours or less. The result of this challenge is Inferno.
The screen should be self explanatory. I thought I'd layout a general timeline of the process in case anyone is interested.
Tuesday 12:30 a.m. - I decide to put myself to the test. I need an idea. It comes to me after doing my daily Bloomberg update.
Tuesday 1:00 a.m. - I've created my project in Xcode and done a simple UI mockup in Photoshop. Drop mockup into Interface Builder and drop my UI components over the mockup. Now I need live data.
Tuesday 1:30 a.m. - After searching around for live GDP data, I resign myself to the fact that I'll only be able to get quarterly update from the US Government at bea.gov and will have to manually update the data. Not ideal, but at least I'll have an excuse to update the app at least once a quarter.
Tuesday 2:00 a.m. - After almost giving up on finding a "real-time" data source for the US National debt, I remember the very cool NationalDebt Twitter account that I follow gives me daily updates. Obvious question is, "How am I going to get that data without having to port the Twitter API over to Objective-C?", which surely would cause me to miss my deadline.
Tuesday 2:05 a.m. - Decide to go to bed and at least get some sleep.
Wednesday 11:00 a.m. - After getting seriously derailed by Subversion issues, I'm back on the Bottom Line (as it was called at that point in time) grind. After a bit of searching I find the very awesome MGTwitterEngine by Matt Gemmell. It's an Objective-C port of the Twitter API and would turn out to be exactly what I needed.
Wednesday 3:00 p.m. - Have a few troubles with getting MGTwitterEngine up and running, but once I do, it's smooth sailing. Have to learn how to parse strings and convert back and forth between date objects in Objective-C. A little bit of reading of the ol' documentation has me on my way.
Wednesday 5:00 p.m. - I've got my application displaying updated debt data and now I need to read and write plist files so I can save the new data to a file and open and display it on the next run. Luckily, my buddy has exactly what I need. With a few minor modifications to his code, I'm reading and writing plists like there's no tomorrow.
Wednesday 5:30 p.m. - Get stopped cold in my development tracks by some other work and personal stuff I have to take care of.
Wednesday 6:00 p.m. - I have to go home to watch my kids because my wife has a meeting. This means I'm done for the night and will miss by deadline. Damn!
Thursday 1:00 p.m. - I pick up where I left off on Wednesday and put the finishing touches on Bottom Line. I've now decided that I want a different name. After kicking a few names around I settle on Inferno. Now I need to update the UI to make it reflective of the name.
Thursday 3:00 p.m. - Inferno is finished and ready for submission to the App Store. Now I just need to write some copy and create the screen shots for inclusion on the app's download page.
Thursday 3:30 p.m. - Inferno has been submitted to the App Store for approval!
I missed my self-imposed deadline of 24 hours with the project spanning about 39 hours. However, total time spend working on the project was about 12 hours, which was right in line with what I was hoping when I originally started the challenge. The fact that I was able to create an application that will be exposed to tens of millions of people in a day and a half underscores, in my mind, the awesomeness that is the App Store. Apple has given developers a very approachable platform and coupled it with a ground-breaking model of distribution, which ends up making a very compelling proposition for people like me.
I really enjoyed making Inferno and I'll probably do this again, maybe even with some regularity. I'd also be interested in potentially joining forces with other developers physically or virtually to see what we can bash out in a day. If you'd be interested, let me know.