Culture / Top Stories /

Code n00b: The Ninety-Ninety Rule and All Your Unfinished Projects

3 Nov 2017 2:00am, by

Back in the mid-1980s, when desktop computers were approximately the size of Smart Cars™, Tom Cargill worked at the legendary Bell Labs. Bell was a research and scientific development company that brought us, among other things, the invention of the laser, the transistor, and the Unix operating system. In all, there have been eight Nobel Prizes awarded for work done at Bell Labs. Tom Cargill’s personal labors there included writing the first major version of C++.

All of this is a way to explain that, when Cargill came up with the “ninety-ninety rule” in 1985, we can be pretty sure he knew what the hell he was talking about. Cargill’s rule states that, in computer programming:

“The first 90 percent of the code accounts for the first 90 percent of the development time. The remaining 10 percent of the code accounts for the other 90 percent of the development time.”

Yes, we can all do the math — that adds up to 180 percent. But under the humor, Cargill was making an important point: it’s really hard to finish projects. To push all the way to the bitter end, every i dotted, every pull request put to rest.

Why is this? Every developer I have ever had an honest conversation with on this subject admits to hosting a personal library of unfinished side projects. We have all gotten initially excited about some brilliant vision and even started to build it out… only to eventually wander off to do something — anything! — else, leaving Great Idea Number 987 to languish in an unvisited desktop folder or backwater repo. So many inspired ideas. So few actual completed executions.

Confession time: I personally have yet to finish a single personal project — I am cringing as I type this — even though I have gotten to 80-90 percent on six different ventures I can think of right off the top of my head. But then for some reason, I just don’t go that last ten percent of the distance. And I know a lot of other devs who don’t, either. Maybe you are that one in a hundred who does actually execute that revolutionary app idea (and turns it into a successful startup and is laughing as you read this now on your own private island). You can buy the rest of us a beer as we talk about our next great plan that we’ll never get around to finishing.

Having taken a fresh look at my own roster of never-completed projects, I’m starting to maybe understand some of the reasons underlying this unfinished symphony syndrome. At least for me personally. The abandoned projects seem to fall into one of three categories:

  • “Close Enough”: Projects that aren’t what I started out wanting them to be, but got close enough to where I need them to be. This category includes a JavaScript pomodoro timer app I use every day (it’s a time management tool where you work for 25 minutes and then take a break for 5 minutes. Useful for reminding me to leave the screen and move around, given that science keeps telling us how desk work will kill us). I had big plans for this app — functionalities I wanted to include, making it look nice. What I’ve got is a blue box that tells when to work and when to stand up and stretch. It works. I work. Who cares if it’s pretty?
  • “Learning Curve”: Projects that were inspired by a new technique or tool that I wanted to test drive by putting it to functional use. For example, a photo gallery template I built based on the new CSS Grid Layout property that I thought I might contribute somewhere or at least try to garner some stars on Codepen with. It’s actually pretty nice, at least I like to think so, but I’d have to package it up, make it look nice, etc — in short, do a bunch of work I’m not interested in doing in order to get the project to a point where it would be useful for other people. I actually did the part that interested me the most, and then moved on.
  • “Just Playing Around”: projects that I started as part of learning something really big, like a new language or framework — a Ruby on Rails inventory app, a React chatbot app. These projects were a way to explore something new. Sometimes this is something I definitely intend to revisit — I got soooo close to finishing that chatbot — but other times it was the coder equivalent of a one night stand (sorry, Ruby).

Hey — this has been a really useful exercise! First, I realize that not every unfinished project is an automatic fail. Some are simply not worth completing, and I can immediately check those off the guilt list. Others, I can now see, are functionally completed in that they helped me try out a new skill, or served as much-needed practice to solidify existing ones. While I do aspire to be the kind of high-functioning programmer who doesn’t just do something, but does it as well as it can possibly be done, it’s important to realize that not every project is a full-on symphony. Sometimes, it’s just practicing your scales and arpeggios.

That leaves a couple of incomplete projects, however, that I now realize actually are worth the full ninety-ninety treatment. That CSS Grid template is pretty nifty. And I would love to be able to include that React chatbot in my online portfolio of projects. Oh yeah, gotta finish that too…

Illustration of the 90-90 brain process by Michelle Gienow. Stock images by Adobe software license.

A digest of the week’s most important stories & analyses.

View / Add Comments