6 ways building a deck is like software development
My evenings and weekends this summer have been busy with home improvement: specifically rebuilding a rotten deck. As I secured the final board, it struck me how many similarities there are to the day job:
1. You'll underestimate the work
A colleague recommended that I take whatever my initial estimate was, double it and move up to the next time frame (e.g 2 week estimate = 4 months of work). He wasn't wrong. As we started replacing rotting joists we learned the stairs were also rotten. Estimating something you've not done before is hard. In software engineering, there's always something new - that's where we can use tools like agile spikes to better understand the unknown complexities early.
In the Mythical Man Month, Fred Brooks says "Plan to do it twice, you will anyway". In the case of the new staircase, he was right: I drew, cut and installed my own stringers only to realize the tread depth wasn't to code. Cue much swearing and a few wasted 2x12s.
2. Practice makes perfect
In hindsight the first couple of boards I laid down I wish I could rip up and re-lay. By the final board, I was on autopilot: cut, clamp, secure, repeat. It's the same with deployments: the more deploys we do, the better the team get at them, the more automation we can justify and use.
3. It won't go to plan
When the inspector took a look at the frame, he decided we needed a new footing - which here in Minnesota means digging a deep hole in the ground (how the deck passed it's first inspection back in the nineties l'll never know). Similarly in software, there's always tools that don't work as you expect or challenging new requirements. Agile helps us here, by naturally prioritizing what's left.
4. Others can help
I've never dug a 4' deep hole. It's hard work, especially working under a deck where the beam is 5' off the ground. I was complaining to another colleague who said: "you need a post hole digger - I'll lend you mine". A good friend was kind enough to come round and hang off the side while we secured a 12' face-board. There's always someone who's done it before and has the right tools - you just need to find them. That's why having a large network is so important: it helps us find the right person to help.
5. Refactoring is a matter of when not if
One thing I've learnt about owning property in MN: the climate is really hard on everything. We didn't have a choice about fixing up the deck. At 21 years old, eventually it would have collapsed under its own weight. Software is the same way, as it ages it gathers unwanted features and undesirable structure that need to be removed to keep maintenance costs down.
6. Others won't see the mistakes
I know where all my mistakes are. However, unless they're totally egregious others will never see them. It's easy to be a perfectionist with software as well: the key is striking the right balance, there's no need to gold plate everything.
Now onto the railings, something else I've never attempted!
This is great. I was just sharing with a friend the other day how similar software projects and diy home projects are similar.
As a knitter, “Others won’t see the mistakes” is something of a mantra.
Nice deck! Enjoyable analogy 😊