Confessions of a Recovering Founder: What Home Renovation Taught Me About Software (and Sanity)

10 years ago, I co-founded Hotjar, a journey that took me from a geeky developer to an exited startup entrepreneur. In 2021, after Hotjar was acquired, I decided to embark on a new adventure: renovating a house. I naively thought, "How hard could it be?"

Famous last words.

Three years and four rental properties later (yes, you read that right), we finally have a finished house. But more importantly, I have a wealth of stories and lessons learned—lessons that, surprisingly, apply to the world of software development just as much as they do to DIY home improvement.

After years of building digital products, I was eager to get my hands dirty and work on something tangible. But I quickly learned that the only thing predictable about home renovation is that nothing goes according to plan.

Join me as I share the hard-won lessons I learned while navigating the complexities of a home renovation and discover how they surprisingly mirror the challenges of building software.

1. Estimates Are Lies, But Deadlines (And Parties) Help

Our initial 6-month, budget-friendly timeline was, in retrospect, laughably optimistic. We ended up moving four times in two years, perpetually believing the finish line was "just a few months" away. Delays due to weather, unreliable contractors, and unforeseen issues became the norm. We experienced the frustration of contractors disappearing without a trace or discovering major structural problems just when we thought we were nearing completion.

Software projects are often plagued by the same optimism-reality gap. We underestimate timelines, overestimate our abilities, and conveniently forget about those pesky unknowns that inevitably crop up. Remember that seemingly simple feature that ballooned into a multi-week project due to unforeseen dependencies? Or that "quick fix" that turned into a debugging nightmare?

Amidst the chaos and frustration, I discovered a secret weapon: deadlines. Not just any deadlines, but firm, immovable ones. It was like a game of high-stakes Tetris, where each piece had to fit perfectly into place. Telling a contractor that the plasterer was booked for a specific date and couldn't be moved often magically accelerated their progress. And when motivation waned towards the end, we strategically planned a small housewarming party and let all the workers know the date. Suddenly, everyone was working overtime to get the finishing touches done in time.

The same principle applies to software development. While estimates may be fallible, deadlines are essential. They create a sense of urgency, a forcing function that propels progress. Without them, projects can easily get bogged down in details or lose focus.

So, while it's important to be realistic about our estimates, it's equally important to set clear deadlines and hold ourselves accountable to them. Of course, some flexibility is necessary, as things rarely go exactly according to plan. But having a target to aim for, whether it's a housewarming party or a product launch date, can be the difference between a project that languishes in development hell and one that successfully crosses the finish line.

2. Waterfall Sucks, But Sometimes It's the Only Path

Home renovation, in its purest form, is a waterfall project. We couldn't install the kitchen until the walls behind it were plastered and then painted, and that could only be done once the electrician had finished passing electricity conduits and drains, and the electrician couldn't do any of that until we had removed the old floor tiles, and... you see where this is going.

This rigid sequence can be infuriating, especially when unexpected delays (and there will be delays) throw a wrench in your carefully crafted timeline.

The unpredictability of each phase was particularly challenging. There were times when a contractor would surprise us by finishing ahead of schedule, leaving us scrambling to figure out what the next step was and who to call. On other occasions, we'd be ready to move forward, but the previous phase would stall due to unforeseen issues, leaving us in limbo. It was a constant juggling act, trying to stay one step ahead of the game while simultaneously putting out fires.

While agile methodologies are often the holy grail of software development, there are times when a more linear, sequential approach is unavoidable, particularly when you're working on something that depends on different teams.

In those instances, it's crucial to plan meticulously, anticipate potential bottlenecks, and communicate proactively with all stakeholders. But even with the best-laid plans, be prepared for the unexpected.

When you need to work in a waterfall approach, your goal is to always be ready for the next step, even if you're not quite sure when that next step begins. Have your materials ordered, your contractors lined up, and your contingency plans in place. Because in the world of waterfall, the only thing you can truly rely on is that something will inevitably go wrong.

3. Details Matter, But Don't Get Lost in the Weeds

I spent countless hours agonizing over all sorts of things – floor levels, grout colors (we even did a test with 10 different grout colours at one point), the position of switches... the list goes on and on. I even remember not sleeping properly for a few nights because I was concerned about how some tiles had turned out.

In the end, some decisions – like making sure were had enough storage, and choosing the right type of flooring – were critical, others were a complete waste of time and energy. A few things I had worried about so much initially made zero difference in the end.

The problem is that it's difficult to distinguish which details really matter when you're in the thick of it. The key is to take a step back and picture yourself in the future, when all the dust has settled and you're actually living in the finished product. Will that slightly off-kilter tile in the bathroom really matter in the grand scheme of things? Probably not. Will the comfort and functionality of your living space have a greater impact on your daily life? Absolutely.

In software, it's easy to get lost in the weeds of code optimization or pixel-perfect design. Remember that time you spent hours tweaking the animation of a button that no one ever clicked? Or when you refactored a perfectly good piece of code just for the sake of "cleanliness"? These rabbit holes can be tempting, but they often come at the cost of more important features or deadlines. Focus on the things that truly matter to your users – the core functionality, the ease of use, the overall experience. These are the things that will keep users coming back and make your product a success.

Remember, the most successful products are the ones that solve real problems for their users, not the ones with the most bells and whistles. Just like a well-designed home should be a comfortable and functional space, a great software product should be intuitive, easy to use, and ultimately, make people's lives better.

4. People Are Unpredictable

Contractors and tradesmen are a unique breed. Some are incredibly skilled and reliable (and I would recommend them over and over again), while others... well, let's just say they're the reason I now have more gray hairs than I did when the project started.

In the first year, we spent months driving past the house, desperately hoping to see a van parked outside—a sign that someone was actually doing some work. It was a stressful, demotivating, and downright depressing experience. But perhaps not as stressful as when we finally had between 10 and 15 workmen constantly there, each with their own strong opinions about how things should be done. We had workers from different teams clashing, neighbours walking in and complaining at the top of their lungs, contractors refusing to finish work... and much, much more.

One particularly memorable incident involved a builder we had been waiting for for months. He finally arrived, tools in hand, ready to start work on the two new rooms we were adding to the house. We were ecstatic. But the next day, he was gone, vanished without a trace. After a frantic search (and tons of unanswered calls), we discovered he'd been bitten by a dog that evening and was unable to work for weeks. It was a bizarre twist of fate, a stark reminder that even the most meticulously planned projects can be derailed by the unexpected.

But the unpredictability didn't stop there. People changed throughout the course of the project too. A reliable contractor who was a dream to work with initially suddenly became unresponsive and unreliable when it was their turn to continue again. Personal circumstances changed, priorities shifted, and unforeseen challenges arose. It was a constant reminder that people are not machines; they're complex beings with lives and emotions that inevitably impact their work.

This is equally true in the software world. Software is built by people, and people are inherently unpredictable. A star developer might suddenly have a family emergency, a key team member might leave unexpectedly, or a change in personal circumstances might affect someone's performance. The same developer who was once a model of efficiency might become unreliable, or a once cohesive team might suddenly struggle to collaborate effectively.

So what's the takeaway? First and foremost, accept that unpredictability is a fact of life (and project management). Build flexibility into your plans, have contingency options ready, and be prepared to adapt when things inevitably go off-script.

Secondly, focus on building a strong, resilient team. Look for people who not only possess the right skills but also embody the values and culture you want to foster. Invest in building trust and rapport within your team, create a supportive environment where open communication is encouraged, and be prepared to offer flexibility and understanding when life throws a curveball. A cohesive team, where everyone feels supported and valued, is more likely to weather the storms of unpredictability and emerge stronger on the other side.

5. Momentum Is Your Secret Weapon

In the final four months, we accomplished more than the entire previous year. Why? Momentum. We had a well-coordinated team who knew the project inside-out and were eager to finish strong. Problems that used to take weeks were now being solved in hours.

I'll give you just one example: a week or two before we planned to move in, when all furniture was in place and everywhere was clean, our living room air conditioning unit was installed... only for the installer to realize the copper pipe installed in the wall (which had been plastered and painted over and which went from the ground floor to the roof) was broken. Panic!

Because we had momentum on our side, within 48 hours we had found a new place for the air conditioner, new pipes had been passed, the air conditioner installed, and the wall had been re-plastered and re-painted... just as if nothing ever happened.

There's something magical about momentum. It's like a snowball rolling downhill, gathering speed and energy as it goes. In a renovation project, momentum is often hard to come by due to the linear nature of the work. But in software development, we have the power to create and maintain momentum through frequent releases and small wins.

By breaking down work into smaller, more manageable chunks and deploying frequently, we give our teams a sense of accomplishment and progress. This, in turn, boosts morale, fosters collaboration, and fuels the momentum needed to keep pushing forward. Imagine the satisfaction of shipping a new feature every week or two, instead of waiting months for a major release. It's like crossing items off a to-do list, but on a much grander scale.

Of course, not every project can be perfectly modularized, and there will always be dependencies and roadblocks to navigate. But by prioritizing incremental progress and celebrating small victories, we can create a culture of continuous improvement and maintain the momentum needed to overcome even the most daunting challenges.

The Takeaway:

Whether you're renovating a house or building a software product, the same principles apply:

  • Be honest about your estimates. (Your optimism, while admirable, is not a project plan.)
  • Plan meticulously. (But be prepared to adapt when things inevitably go sideways.)
  • Choose your team wisely. (Skills matter, but collaboration and a shared vision are key.)
  • Focus on what matters most. (Don't let perfect be the enemy of done.)
  • Harness the power of momentum. (Celebrate small wins, remove roadblocks, and break down work into manageable chunks.)
  • Set deadlines (and stick to them). They create a sense of urgency and help maintain focus.

So, there you have it. The hard-won wisdom gleaned from three years of dust, debris, and the occasional existential crisis. Whether you're building a software empire or just trying to survive a kitchen remodel, remember: it's all about embracing the chaos, celebrating the small wins, and never underestimating the power of a good deadline (and maybe a strategically placed housewarming party).