Software and Home Renovation
My wife and I recently decided to try our hands at a little home renovation. It’s worth noting up front that I didn’t want to; or rather, I wanted to have a new bathroom but, like the animals in the story of “The Little Red Hen”, I did not want anything to do with the hard work required to get the desired output. I just wanted to pay someone to “make it look good”. My wife had other ideas. In the end, we decided on hiring a contractor to do most of the work, but we picked out the style and aesthetic we wanted in our new bathrooms.
Now that we’re approaching the “done” mark of our very first home renovation, I have a few thoughts on the entire process. I am sure I will not say anything that hasn’t been said before by n00b home renovators. But this is my blog, so I will say them nonetheless. Specifically, I’d like to point out the parallels I noticed during this entire process between working in software and working with homes. Here we go.
“Just” Build a Website
Because there’s a whole industry around DIY home renovations, I naively thought we could do the renovations ourselves and save some money. Nope.
Well, I probably could have done it if I didn’t have a job, two three kids, and a load of other responsibilities (not to mention a complete lack of interest in this particular field).
It reminds me of how my relatives ask me at family functions: “oh you do computers? I have an idea for a website, do you think you could help me build it?” Then they describe what is essentially a clone of Facebook and say, “so yeah, it’s pretty simple, I bet you could do it over a weekend or something, right? It’ll be YUGE and I'll cut you in on the profits when it gets big.”
A beautiful, elegant, and appealing thing, whatever it is, is the result of a professional who has put their experience, taste, and craft into making something difficult appear so simple that you think to yourself, “yeah, I could do that!”
Greenfield Projects Are Everyone’s Favorite
I don’t know if it’s like this in your neck of the woods, but where I live it’s hard to find people who will work on your paltry home renovation. Nobody wants to work on renovating old homes. They all want to work on building new homes. I don’t know if that’s because old homes are eccentric and difficult to wrangle. Or if it’s because there’s more money in building new homes. But it reminds me of making software: it seems like everyone likes to work on the new stuff.
Who wants to work with jQuery when you can do React?
Who wants to replace galvanized steel pipes and haul out a sediment-filled, conventional storage water heater when you could be installing pristine PEX tubing to a tankless water heater?
The Last Person’s Work Is Always Bewildering
I can’t count how many times the guys renovating my house had to call me over and wonder aloud, “man, I don’t know why the people who did the previous work on this bathroom made the choices they did, but we’re gonna have to undo all of this.”
[Sarcasm] nobody’s ever said something like that when dealing with software.
The thing is: there’s never anybody around to defend “the previous person” but we’re all that person. To somebody out there working in a codebase I’ve been in: I’m sorry. I’m that person whose sanity you are questioning.
It’s All About the Trade-Offs
You’ve heard of technical debt? Well my 80 year old house has accumulated a lot of renovation debt.
Innumerable times my contractor had to ask me to make a decision based on cost/benefit trade-offs. Should we make it better on the surface for cheap and it’s somebody else’s problem in ten years? Or should we do it “right” and it costs way more, takes more time, and hardly anyone will know the difference except in the long run?
Unfortunately for me and my wallet, I am a perfectionist. If we did a duct-tape fix that’s hidden behind a wall, I’d forevermore know it was there albeit buried behind some drywall. It would haunt me at night, whispering as I try to fall asleep “Jim. Jim! It’s me, the half-ass job you left behind the wall that nobody else knows about.”
The Mythical Man Month of Home Renovation
It ALWAYS takes longer than you think. On the surface, it’s “oh yeah, we can get in and out of there in two weeks”. But something always goes wrong. You knock down a wall and find something you hadn’t expected. Now you gotta do something totally different that’ll take much longer and cost much more.
After thinking we could get away with a surface-level renovation on bathroom fixtures, my contractor approached explaining how, due problems in the underlying plumbing, our original plan would be impossible. He could “do it right” which would add more cost and another day, or he could patch it up tight and essentially leave it as-is, in its half-broken state. I opted for doing it right. It cost me and added three days instead of one.
Communication, Communication, Communication!
While I loved my contractor because I could tell he took great pride in his craft, he wasn’t the best communicator. Great craftsman, less than great communicator.
Doing the actual work of tearing out walls, running pipe, laying tile, etc., that was the easy part. Communicating with the people involved about timeline, vision, and goals? Properly setting and managing expectations? Coordinating talent to collaborate together towards a common goal? That was the hard part.
And I don’t think Slack would’ve helped my contractor much.
Opinion: Webdev as a Modern Subdivision
Ok, my last thought here. I’m being a bit facetious here, so don’t @ me.
You know those old homes people love because they’re unique, have lasted for decades, and have all that character? In contrast, you have these modern subdivision homes that, while shiny and new, are often bland and identical (and sometimes shoddily built). node_modules
is like the suburbia/subdivision of modern web development: it seems nice and fancy today, and most everyone is doing it, but in 30 years everyone will hate the idea. They’ll all need to be renovated or torn down. Meanwhile, the classical stuff that’s still standing from 100 years ago lives on but nobody seems to be building houses that way anymore for some reason. Similarly, the first website ever is still viewable in all modern web browsers. But many websites built last year on last year’s bleeding edge tech already won’t work in a browser.