Software development practices for builders
I recently underwent a nightmare house renovation. The process reminded me of many failed software projects I’ve observed and been part of. There are a lot of similarities between the building process of property and software development process. Here are some of my learning from using software development practices to getting the best results from your building work.
Software development has taken a huge inspiration from the many different industries from the factory production lines of Toyota to apprenticeship models taken from wood craftsmen. However home renovation is in a weird state where it’s impossible to know if you’re getting quality or cowboys. I had differences in quotes where some were more than quadruple the cheapest and although I didn’t go with the cheapest I had no real way of knowing if the one I chose was better than the top or bottom.
Let’s face it, if no matter how handy you might be around the with a sledge hammer or a screwdriver it’s easier to get a professional to do the job. They have the right tools, the right experience and it’s their job. There are many different kinds of builders as there are developers. On one side you have the self taught get the job done no matter what kind and on the other you have the software craftsman of all the best practices listed in the manifesto for software craftmanship here http://manifesto.softwarecraftsmanship.org/. If you care about the end results and want to live with what’s been done you should always get as close to the latter as possible.
Planning is essential and the best plans are detailed. If someone wants to be able to log in to your website you need to write down a path for every case in order to build the feature correctly. You can’t simply say yes that’s a half day’s job. Should you use omniauth? Will they get signed out automatically? This could be the difference between a 2 hour job or a 2 day job. Equally if you want a wall knocked through that’s not a trivial job. Even after the structural requirements are met. What’s in the wall? Is there electricity, a lightswitch, Where do you want it moved, Left side right side? This is a specific example but no work should be started unless you know everything involved with doing it. Setting your expectations and requirements upfront for everything is a must all the way down to how smooth you want the plastering to be.
MVP? What is the minimum you need done to live. If you’re getting a bathroom and bedroom done is having a freshly painted hallway essential or running water in the bathroom? I’d imagine it’s the running water. Make sure these are done before any extras or nice to haves get done. There will be a time when certain things need to be done in a certain sequence that suits the type of work but always express what is important to you with a need to have a nice to have attitude and make sure you’re not vague about it.
Get your feedback cycle tight. It’s much harder to change a url path once it’s been used and reference in 100 different places. Likewise moving a gas pipe is easier to do onces it’s been cemented in. Have frequent demos and talk to your customer at every point. Keep the discussions focused and try not to go off and talk about another feature. Rarely is anyone pleasantly surprised with a grand unveiling. By giving frequent granular demos it not only gives the client what they want but it allows them to see the work that goes into a small piece of functionality. Try to be “around” as much as possible, Not in the way just around incase there any questions. Think of it as your designers, developer and project managers all sitting within earshot of each other.
The hardest part I find with any software project is finishing it. The last 10% of the work takes 90% of the time. There’s a certain amount of discipline needed to finish a task to a high standard. Attention to detail and need to perfect the tiniest problem is a good trait of someone who will likes produce good end results.
Lastly never work to tight deadlines. If something should take a day to do set aside 2. You should really allow for double the amount of time for any task. It’s better to finish ahead of schedule than rush to meet it.
Highlighting the these similarities might seem tenuous or screamingly obvious. Good work takes time and discipline regardless of the industry. If you find yourself in a position where you undergoing a construction project just remember that the biggest difference is builder brew vs a v60 coffee.