The Tension of Finishing What You Start

February 27, 2013

I just wrote about how software could use a mathematical makeover, and how it will take calm prolonged thought to make it happen. That’s all well and good but…

Finish what you start!

My existing projects still need my attention. Eighty percent isn’t done. Ninety percent isn’t done. A software tool isn’t done until you can demo it without any apology. Its scope may be modest, but it should do everything it claims.

In my case I should probably stop working on new project ideas (aside from scheduling my upcoming programming pilgrimage) until I have finished How do I define done? CSS Trashman is done when two basic things are complete. One: somebody can point it at an entire site and get back CSS that is good enough to replace the existing style. Two: it makes enough money to pay for its own cloud computing time.

I plan to roll out a freemium model for the site. Its current capabilities (of refactoring the CSS of a single page) will remain free, and there will be additional features for paid users:

  1. Preserve responsive behavior with media queries.
  2. Add styles for pseudo-classes and pseudo-elements like :hover, :active, :before, :after.
  3. Process a whole site at once (a single harmonious style for multiple pages).

There is a tension for me between finishing specific tools that I start and finishing the 1up project. Originally last August I resolved to become a world-class web developer by breaking the year into two-week intervals and studying one technical topic per interval. The idea was to keep moving through the topics, advancing briskly.

However the 1up learning and experiments have naturally born fruit like CSS Trashman, styleguide_rails, and creepalytics, and aws_pipes which need work to be finished and maintained. Does choosing to finish these tools mean failing to properly finish 1up? Maybe the tools were the point of 1up all along. Knowledge is vain if not applied.

The flexibility to adjust plans might be as important as the plans themselves. I might be foolish to ignore the demand for my tools and rigidly stick to 1up’s original plan of two-week iterations.

Then again, popular demand only refines the status quo, it doesn’t fuel crazy fundamental inventions. I need to balance projects like refactoring CSS on the one hand with crazy experiments for whole new languages or ways of writing software. The vague grand ideas are always tantalizing.

Part of what makes me hesitant to immediately venture directly toward the grandest vision in software is the recognition that art is made through constraints. CSS may be rather accidental and convoluted in some ways, but it is a constraint and hence keeps my mind grounded and productive. “Just as sound,” writes Montaigne, “when pent up in the narrow channel of a trumpet, comes out sharper and stronger, so it seems to me that a thought, when compressed into the numbered feet of poetry, springs forth much more violently and strikes me a much stiffer jolt.”

Finishing what you start is tricky, isn’t it? I think what it really means is to pick constraints, work with them, and iterate toward something truly satisfying. But enough writing, time to go finish what I started!