My Washing Machine Refreshed My Thinking on Software Effort Estimation

My Washing Machine Refreshed My Thinking on Software Effort Estimation
February 19, 2025

I recently had a saga with a washing machine that reminded me why one of the most feared and hated tasks for software developers starts with the question:

“So how long will it take you to build that?”

The familiar appliance luring me into a false sense of security

I just moved house. This was the first time I've ever moved into a home that's just been built, making me the first occupant.

One of the inevitable jobs on day one is hauling the washing machine into position and connecting it to water and power. This is the ninth house move of my life so I figured this installation would be like all the others.

Based on experience, it usually takes me 10 minutes or less to install a washing machine. Surely 10 minutes was a reasonable estimate for this time too.

This time, though, it took me 4 whole hours. Why was my estimate so off?

Here's how and why it reminded me so much of the dark art of software effort estimation.

Blocker #1

I look at the laundry compartment that the washer will sit in. The power point is in another compartment but the builder has forgotten to drill a hole in the shelf to pass that through. I can’t power the washing machine without that.

Solution #1

I don't have a tool to make a big enough hole, but with a little research I find out a hole saw is the way to do it. It's an open-ended drum with serrated saw teeth that you mount on a drill to do the cutting. I go to my local hardware store, get some advice on what to get, and buy a 60mm hole saw.

Blocker #2

I get home to use the hole saw, and find out that my consumer grade drill can't even fit the hole saw in the chuck - it's too big. I don't have any adapter that can fit it either.

Solution #2

I go back to the hardware store. Another much more experienced-looking staff member tells me (with some slightly rude disdain for my ignorance) that consumer grade drills can't fit or drive hole saws - I need a more powerful trade drill that takes bigger bits. Perhaps so.

I take his word for it and he lends me his much better drill for $10 for the afternoon and I take it back home. You have to respect the hustle at least. At home, I find that this drill kicks like a mule but I can now mount the hole saw OK.

I get to drilling and after 25 minutes of learning how to keep it straight and the wonders of noise cancelling earphones, I have a neat 60mm hole with a plastic insert. The cable is through and the power is connected! Job done?

Hole made and presumably the end of this blog post

Blocker #3

I pass the inlet and outlet hoses through another hole the builder has this time remembered to drill for that purpose. However, where these hoses worked fine at my old place, they're now too short in the new setup.

Solution #3

I go to a big hardware store. I notice that they sell hoses with a concertina design which can expand from 1.2m to 4m. Hey, MY hoses look like just that too - rather than spending $80 on new hoses, maybe I can just expand the ones I have!

Blocker #4

I go home to eagerly expand my hoses. While they look remarkably similar - some would say misleadingly so - they do not, in fact, act like concertinas and remain stubbornly short.

Solution #4

I go back to the hardware store and spend $80 to buy new hoses. I go home and install them. Job done?

Blocker #5

As I connect the inlet hose to the cold water tap, I discover for the first time that it's covered by a steel cap which is fastened very tightly - certainly too tightly to remove by hand. The cap measures 35mm across and I don't have a shifting spanner big enough to handle it.

Solution #5

Back to the hardware store to buy a bigger shifting spanner. My fifth trip out. Back at home with my new tool, I can easily take off the tap's cap now and connect the water. Success!

The cold water tap’s now-removed cap which had been sneakily hiding in plain sight

I connect the washing machine's outlet hose with dirty water to a small spigot under the U-bend beneath the sink. This is the first time I've seen this kind of method to remove the waste water.

The spigot in question receiving the outlet hose. And yes, I should have a clamp on that.

I run the machine. I dust off my hands and relax, job done.

Blocker #6

After 20 minutes, the washing machine bleeps with an E39 error. Apparently this is a drainage obstruction. I’m resigned rather than surprised at this point.

Solution #6

Poking an exploratory screwdriver into the U-bend's spigot, I find it ends not with a hole into the U-bend but with a PVC wall. But of course it does: if you didn't have a hose connected to the spigot, waste water coming down the U-bend could back up and spill out below your sink. It turns out you have to drill out the PVC wall before connecting the hose, something I had no idea that was required before beginning the project.

I don't have a spade bit with the perfect width to open the hole, so I pick the biggest drill bit I have to hand. I contort myself to get under the sink to drill. It's not great but it gets the job done.

I connect the drainage pipe again. I run the washing machine. It works. After five trips to hardware shops to pick up supplies and drop off borrowed drills, I am too tired to celebrate much.

My initial 10 minute time estimate has gone 24 times over my time budget at 4 hours, including my five round trips to hardware stores. 

What did I learn?

My woeful underestimate was informed by multiple sets of experience installing washing machines, but I had never installed a washing machine in a new house which presented a whole host of challenges I had no idea even existed before I began. “Unknown unknowns” as we might say.

As I was thinking about it the next day, it reminded me in a very physical form why a lot of why software development estimation is so hard. So often we're asked to build something we've built before, so we estimate with confidence that it might take a week.

What we fail to factor in is that while 90% of the project will be the same, there's going to be one critical difference between the last 5 projects and this project that seemed trivial at the time of estimation but will throw off our whole schedule. It could be one or all of:

1) Our well-used task-running framework we were going to use for a relatively small part of the system is totally unmaintained now and we'd have to fork it to make it fit for purpose again.

2) Our entire development tooling ecosystem was obsoleted 18 months after the last time we did this, so we're going to be learning the sharp edges of a whole new toolchain from scratch.

3) We find that our OS version has moved on and no longer supports key requirements for our existing dependencies, requiring rethinking or developing from scratch.

4) We need our infrastructure stack to use one component we've never used before and it doesn't work anything like we expected.

5) We otherwise find there are unstated, totally unknown, or seemingly trivial requirements that significantly change the effort that's going to be required.

A new house blew out my effort assumptions this time. The shifting sands of software development practices are like moving into new houses multiple times each year.

So what do we do about it when we don’t even know what questions to ask before setting out on any software project, especially one that ostensibly seems routine?

For my washing machine, they were unknown unknowns - I didn’t even expect there’d be a hole to drill, new hoses to buy, a cold water tap cap to remove, and a spigot PVC wall to drill out.

Yes, we can (and must) gather requirements as best we can, but at some point we’ll end up on the ground and battling dozens of blockers we didn’t expect to hit, even when we thought the territory looked very familiar and a 10 minute job turns into 4 hours.