Polish and The Mythical Man Weekend
There’s a great thread on Hacker News right now talking about the myth of “I could make that in a weekend!” Of course, there’s always some truth to this. To my mind, any project that can be completed by a single developer in a ‘reasonable’ amount of time should have a kernel of functionality that can be banged out in a weekend.
I’ve shipped a number of pieces of software on my own over the past several years, such as iRooster, Election ‘08/Slate Poll Tracker ‘08, Fireside, and Dibspace. In some cases, I was able to complete the app in not much more than a weekend, primarily because I was willing to sacrifice functionality and some polish in exchange for a tightened release schedule. In others (including a current example), the development schedule has dragged on seemingly without end.
iRooster took me months to build, primarily because it was the first piece of Mac software I’d ever built, and I had 7 fewer years of experience under my belt. However, it also took me a lot longer than expected to polish it to the extent I felt was important for a good Mac app.
The first version of Election ‘08/ Slate Poll Tracker ‘08 was completed in seven days. No seriously. I submitted the codesigned binary to Apple a week after I created the project in Xcode. Of course, I barely slept that week. The reason it came together so quickly was because it had a feature set not much bigger than the original one-evening spike. I spent a night proving I could build the app, and six days polishing my prototype. I would have spent another couple weeks working on the app, but I was deathly afraid I wouldn’t be the first to market with the idea, especially given that it had such a blindingly obvious concept (I mean, really: election tracking software on the hottest mobile platform for the most-watched election in decades? How is it possible that no one else beat me to this. Unreal!)
Fireside was literally a 12 hour project. I found sample code online that did a lot of what I needed, slapped together some other stuff from a still-unreleased project, and called it done: 10AM - 9:45PM. It took me 15 minutes the next morning to find a decent icon. The app is super-simple, doesn’t offer a huge amount of functionality, and had a very tightly defined scope going in.
Lastly, I’ve been working on another iPhone app for the past three months (the Xcode project was created on April Fool’s Day). I took a month off in the middle to deal with my personal life, but have otherwise been working on it over nights and weekends. It’s significantly more complicated than either Slate Poll Tracker ‘08 or Fireside, and will be significantly more polished than either of my previous self-published apps, or any of its competitors when it’s finally released. I had actually expected to release the app a month ago, now, but that notion quickly went out the window.
It’s this last example that I find most interesting. What went so wrong with my estimation process in this case, especially given that I’ve successfully shipped iPhone software in the past, and have dabbled in programming this environment and similar ones for years? Polish. I think that, if I had decided to take the ‘easy’ way out, I could have had this app finished in a couple weeks. It probably would have done terribly in the AppStore, and my investment of time would have been wasted. Instead, I’m spending tons more time and hoping that I’m not throwing good money after bad, as it were.
When this app is finally finished in a week or two (fingers crossed), it should be demonstrably easier to use, faster, better, more featureful and just plain more iPhone-like than its competitors. I’ve spent the last several evenings making sure that landscape support works perfectly across the application. Not because I need to, and not because I think that this feature alone will make or break the app, but because it contributes to the sense that it’s a first-class citizen on the iPhone platform. There are a dozen other examples of this sort of behavior in the app.
The jokey aphorism that the last 20% of software development takes the other 80% of the time has a great deal of truth to it. With a few minor exceptions, my app has been ‘feature-complete’ for weeks. I think it’s already better than the competition, but it still falls short versus the very high bar set by Apple’s iPhone apps, atebits’ Tweetie, and other best-of-breed apps. I think (fingers crossed) that, with one last push through my set of 22 fit and finish bugs, I’ll finally be able to call the first version complete. We’ll see.