As a breed us hackers are perfectionists. Tinkering away at that algorithm, worrying about the size of that switch statement, wondering about abstracting away some detail. But always, always with the aim of improving our code base.
Many of our number are also a bunch of nit-picking, passive-aggressive, show-boating arseholes. Although these traits are kind of endearing once you realise that optimus1337, who is currently comparing you to Hitler, is probably 19, his Mum thinks he’s a wonderful lad, and he helps his Gran with her shopping at the weekends.
However, there is an unfortunate consequence of these two character traits. It can make it very intimidating about putting out your opinion or sharing some code with your peers. We’ll hoard code, or practice at home, but not want to put something out there because it’s not perfect, or we won’t contribute to a project for the fear that we’ll be shouted down, or what we produce won’t meet some sort of arbitrary ultra-geek standard.
This attitude can be seen in the insanely conservative version numbers we give any code that we are brave enough to put out into the wide-world, ie – MyProject – v0.0.001. For example, I’m a massive fan of the Nant project and have been using it to build my solutions for the last 4 years. In that time the project has gone from version 0.86Beta1 to the recently released v.091. In the entire 4 years I’ve been using it, it’s been as solid as a rock, and I haven’t had one issue with it, ever!
There’s no such thing as done
All developers implicitly understand that no project is ever finished, or any piece of code ever completely bug free, or that couldn’t be refactored. Which makes a “done” project as rare as the legendary unicorn.
A few years back when projects started versioning themselves after the year/month they were deployed, ie Ubuntu 12.4, Office 2010 etc. I was very cynical, thinking this is just a marketing ploy, to make us download/purchase the latest version.
However, I’ve lately realised that this versioning scheme has the benefit of indicating that this software is just that year’s version, or that month’s version. It doesn’t say this software has reached mythical v1 status, it just says this is the stuff we think is good enough to release now. The marketing aspect is just a fringe benefit 🙂
So don’t worry about joining the melting pot – jump right in. Release version 12.3.09 of that idea you’ve been working on. You can still conform to semantic versioning, and tell the likes of optimus1337 “Dude, relax. The code’s not done, it just the stuff I wanted to share, and BTW that’s not how you spell Goebbels ;-)”
The only path to high quality products is with constant feedback. It’s just not possible to sit alone, even with a small group, and produce top quality code. Without external feedback you’ll just focus too much on the wrong things and end up leaving out essentials.