Monday, July 23, 2007

Pillars of Software Development

I rarely talk about work here, but this is something that is very true. There are three essential parts that need to be there or the project is doomed to failure and working on Saturdays.
The conclusion I draw from this and my own experience having migrating my fair share of source trees is that the version control system is a first order effect on software, along with two others - the build system and the bugtracker.
Those choices impact absolutely everything else. Things like IDEs, by comparison, don't matter at all. Even choice of methodology might matter less. Although I'm betting there are plenty of software and management teams out there that see version control, build systems and bugtrackers as being incidental to the work, not mission critical tools.
Without those, you are forced to rely entirely on your brain to keep track of everything. My brain is already full of useful facts about sci-fi, comics and role playing games.
The only successful software projects that can work without those three are one off, one programmer projects made to be thrown away. As soon as you start changing existing code, it's madness not to keep track of changes on the very likely chance you may want to go back to a working version.

I find it a very sobering thought that of my last four jobs, at least two of the three items were missing and I had to implement the missing ones.

During one job interview I was horrified to discover that they had no build process. Each developer just built their program, refreshing their code from the source tree when they felt like it and then uploading it for testing.
If there is no build machine getting the latest code and building the software in a pristine environment, how...
  • How do you know what you are building?
  • How do you catch code that hasn't been checked in?
  • How do you combat the "It works at my desk" syndrome?
  • How do you make sure every developer has an identical code base?
Of course, just having these pillars does no good if they are not used correctly. If every bug is listed as "Priority One", none of them are. Build processes do no good if they aren't followed. If you just mark all your code writable, trusting to your memory to know what you've made changes to, you will miss things.

No comments:

Post a Comment