DEV Community

Revenue Search
Revenue Search

Posted on

Why Estimating a Deep Clean Is the Same Problem as Estimating Legacy Code

I run operations for a cleaning company in Toronto, and the hardest part of the job is not the cleaning. It is the quoting.

Someone calls and says "four bedrooms, three baths, deep clean, how much." That is the entire spec. You have never seen the house. You cannot see the house. And you have to put a number on it that you will be held to.

If that feels familiar, it is because it is the same problem as being handed a repo you have never opened and asked how long the migration will take.

The variable that ruins every estimate is condition, not size

Square footage is the number everyone quotes on because it is the number everyone has. It is also the weakest predictor in the whole model.

Two identical houses, same floor plan, same street. One was cleaned every two weeks for six years. The other has not had a proper clean since the previous owners left. Same square footage. The second one takes twice as long, and almost all of the extra time lands in four places: the oven, the shower glass, the grout, and the window tracks.

Those four are not "more of the same work." They are a different category of work. Everything else scales with area. Those scale with neglect, and neglect is invisible from a phone call.

It is the difference between "this file is 4,000 lines" and "this file is 4,000 lines and has no tests." Line count told you nothing about the actual cost.

Older stock is the legacy codebase

We do a lot of work in neighbourhoods where the houses are eighty or ninety years old, and the pattern holds every time. Original hardwood, original tile, three generations of renovations layered on top of each other, and cleaning products from four different eras soaked into the same grout line.

Nothing about it is standard. The surfaces do not respond the way new-build surfaces respond, half the fixtures are discontinued, and there is always one room that somebody clearly did themselves in 1998. Anyone doing deep cleaning in Lawrence Park is estimating against unknowns the same way you estimate against a codebase with no documentation and one author who left in 2019.

What actually fixed our estimates

Three things, and none of them is "estimate better."

Ask the questions that predict condition, not size. When was it last professionally cleaned. Is it occupied or empty. Pets. That is three questions and they move the estimate more than square footage does.

Price the bands, not the point. We stopped giving single numbers for jobs we had not seen and started giving a range with the trigger written down: here is the price, here is what moves it, here is what it moves to. Customers do not hate ranges. They hate surprises at the end.

Make the unknown someone's job to check. The crew lead does a walkthrough before starting, not after. If the scope is wrong, we find out in minute five, not hour four.

That last one is the whole thing. You cannot estimate the unknown away. You can only shorten the distance between making the estimate and discovering it was wrong.

Top comments (0)