Inert Detritus The Internet's dust bunnies

15 March 2008 @ 1pm

Perfection In Code

The Escapist just did a very intrigu­ing inter­view with Jason Rohrer on design, devel­op­ment, and perfection.

After push­ing an app out the door ear­li­er this semes­ter (CPU His­to­ry), and active­ly devel­op­ing the web­site at my part-time job (at VBI), I under­stand the fine bal­ance between time­li­ness of release and striv­ing for perfection.

When writ­ing CPU His­to­ry, I knew there were cer­tain things that absolute­ly, pos­i­tive­ly had to be cor­rect: the val­ues for CPU usage had to be both time­ly and accu­rate: an app that lags a half-sec­ond behind what’s real­ly hap­pen­ing is useless.

Oth­er parts, how­ev­er, weren’t so crit­i­cal. I wrote CPU His­to­ry pri­mar­i­ly because Activ­i­ty Mon­i­tor in Leop­ard took 18–22% of my total CPU on my iBook G4. Know­ing two things, I decid­ed that mul­ti­core sup­port was­n’t on my list for a 1.0 release: I was on a sin­gle-core sys­tem, and when my new Mac­Book Pro arrived, I could afford the CPU cycles to run Activ­i­ty Mon­i­tor instead.

(Small aside: the lim­i­ta­tions of Activ­i­ty Mon­i­tor’s his­to­ry graph­ing, espe­cial­ly with no way to change dis­play col­or, bar width, or update fre­quen­cy are dri­ving me slight­ly insane, how­ev­er, and I will be refin­ing code from @dsandler to get full dual-core sup­port up and working.)

I released CPU His­to­ry 1.0 with a few known bugs, too. Adjust­ing the update fre­quen­cy or oth­er graph­ing pref­er­ences clears the graph his­to­ry, for exam­ple. It was­n’t a cat­a­stroph­ic bug (which I define as any­thing that caus­es data loss, cor­rup­tion, or makes the app so unus­able as to make it use­less to the user), but it was both­er­some, and it drove me to spend an hour regress­ing the bug so I could accu­rate­ly repro­duce it. I tried dig­ging into the code a bit to see why it was hap­pen­ing, but it quick­ly became clear that it lay in the inter­ac­tion between code I had writ­ten and some parts of Mem­o­ry Mon­i­tor that were reused with no alter­ations. I decid­ed to back off and release the app as-is: releas­ing the 1.0 was more important.

Per­fec­tion, while achiev­able, would mean nev­er ship­ping any­thing out the door. There’s a fine bal­ance between tol­er­at­ing a minor issue in the inter­est of get­ting some­thing out the door, and stop­ping every­thing else to fix a cat­a­stroph­ic bug