Perfection In Code
The Escapist just did a very intriguing interview with Jason Rohrer on design, development, and perfection.
After pushing an app out the door earlier this semester (CPU History), and actively developing the website at my part-time job (at VBI), I understand the fine balance between timeliness of release and striving for perfection.
When writing CPU History, I knew there were certain things that absolutely, positively had to be correct: the values for CPU usage had to be both timely and accurate: an app that lags a half-second behind what’s really happening is useless.
Other parts, however, weren’t so critical. I wrote CPU History primarily because Activity Monitor in Leopard took 18–22% of my total CPU on my iBook G4. Knowing two things, I decided that multicore support wasn’t on my list for a 1.0 release: I was on a single-core system, and when my new MacBook Pro arrived, I could afford the CPU cycles to run Activity Monitor instead.
(Small aside: the limitations of Activity Monitor’s history graphing, especially with no way to change display color, bar width, or update frequency are driving me slightly insane, however, and I will be refining code from @dsandler to get full dual-core support up and working.)
I released CPU History 1.0 with a few known bugs, too. Adjusting the update frequency or other graphing preferences clears the graph history, for example. It wasn’t a catastrophic bug (which I define as anything that causes data loss, corruption, or makes the app so unusable as to make it useless to the user), but it was bothersome, and it drove me to spend an hour regressing the bug so I could accurately reproduce it. I tried digging into the code a bit to see why it was happening, but it quickly became clear that it lay in the interaction between code I had written and some parts of Memory Monitor that were reused with no alterations. I decided to back off and release the app as-is: releasing the 1.0 was more important.
Perfection, while achievable, would mean never shipping anything out the door. There’s a fine balance between tolerating a minor issue in the interest of getting something out the door, and stopping everything else to fix a catastrophic bug