I’ve not been blogging for a while because we have bought a fixer-upper house which needed a fair amount of work. I can’t help but be struck by the horrifying similarities between house conversion and software development.
- The estimates are always too short: people calculate the work period, and even when they’re being generous, they forget to allow for being pulled off onto another more important (paying) job, set up costs, or the time spent searching for the library routine/thermostat which will do the job you want rather than all the others which nearly do the thing you want.
- The code/wiring/plumbing that you have to interface with is always spaghetti and it takes much longer than it should do.
- The code/drainage/etc that you have to interface with has not been documented and you will need to follow it through twisty strange paths and try and work out where the spurs go.
- Even if it used to be fine, old code/wiring/plumbing does not match with current building standards/operating systems and has to be re-done.
- Good programmers/builders etc cannot resist the temptation to do something well rather than well enough. This can take a long time.
- Ambitious heads of engineering/house owners will suddenly have a brilliant idea about how something could be done better and require the whole thing to be re-designed half way through. They may well be correct but it adds a great deal to the time and cost.
- It is disheartening to see no apparent progress.
- There is a struggle between designing a usable interface and a functional system. Sometimes the people who have to do the extra work to make something easy and pleasurable to use rather than the way they’d first thought of it can be resistant to extra work.
So, given the fact that all the engineers/builders involved are intelligent craftsmen, how can the process be less painful?
I decided to apply some of the principles of Agile project management to the building project.
In Agile management, there is this fantasy (and it is a fantasy in many cases) that you can work on a discrete feature and get it through design and test in a solid blast, close it off, and then go onto the next thing. There are various buzz words around it, such as the scrum, the daily stand-up meeting when everyone talks through how they’ve got on and what needs to be done.
It’s not a place for novices.