Product Case Study · Vasjo Innovative Technologies · 2021–22
A photograph does not contain a price
A vehicle repair quoting platform built from nothing in twenty one weeks, where a customer photographs the damage and the product they receive is the price.
38%→12%
Median price spread between two assessors
01 · Context
Three quotes, all of them from one person's reading of a photograph
Vasjo is a product studio building for clients, funded by its founders rather than by outside investors. It runs three engagements at a time. I led one. The client was a founder and chief executive who had studied with one of Vasjo's founders, so the engagement started as a conversation rather than a tender. He was funding the build himself, with no board and no product function on his side.
The product was greenfield, with no manual process to digitise and no incumbent tool to beat. A vehicle owner uploads photographs of the damage to their car or motorcycle, answers a short set of questions, and receives three quotes. An assessor classifies the damage once, and the platform prices that one classification against three rate cards, two belonging to partner garages and one to the client's own workshop. The customer selects a quote and books it.
The thesisGetting a repair quoted meant driving to two or three workshops, waiting, and then having no reliable basis for comparing what you had been told. Make the comparison possible from a phone in ten minutes and people will use it.
02 · The problem
One assessment set all three prices, so an error in it was invisible
A quote depends on three variables a photograph cannot reliably carry.
Extent. There is no scale reference in a close up of a dented panel.
Depth. Clear coat, primer, or through to metal. That determines whether the job is a small localised repair or a full panel respray, and those differ by multiples.
What sits behind it. A bumper scuff over a parking sensor is a different job from the same scuff on bare plastic.
We'd assumed skilled assessors would resolve that ambiguity out of experience. Running real submissions through the early interface, before any automation existed, we tested the assumption by routing the same job to two assessors who could not see each other's work. In normal operation a job is assessed once.
98%
of jobs read twice came back more than a fifth apart.
Weeks seven to nine. Forty five real submissions, each classified independently by two of the three assessors. The median gap between the two prices was thirty eight percent.
A customer comparing the three quotes had no way of spotting the error, because a misclassified job was misclassified for the partner garages and the in house workshop alike. The only point at which the variance ever surfaced was the workshop, when the actual repair produced a bill that did not match the number the customer had already accepted.
When the quote is the product, a price that shifts depending on who read the form is not a defect. That is the product failing.
Everything after launch confirmed it. Customers didn't return for a second job. Two partner garages stopped accepting work through the platform. Reviews were bad, and bad about one specific thing. The final bill didn't match what the app had said.
03 · My role
I was the only product manager on either side of the engagement
Four engineers, no dedicated designer, no QA function. I ran it from discovery through launch and the first quarter live, and my counterpart was the client's founder and chief executive himself. So I owned discovery, the requirement set, the backlog and release sequencing, the data model for pricing and eligibility, quality after launch, and the client relationship. There was no route upward either, because escalating to my own chief executive would have put him in an awkward spot with a friend.
04 · Process
The assessor stopped composing a price and started confirming a band
The first three proposals in the room were all about people. Train the assessors. Write an estimation manual. Hire someone more experienced to arbitrate. I proposed a fourth. Buy or build image recognition to classify damage from the photographs and take the human variance out of the loop entirely.
I lost that argument, and I was right to lose it.
There were no labelled images to train on and no budget to create any. Nobody on a team of four engineers had built a model before. The engineering lead's objection settled it: even a good model needs a corpus, and we had none.
Losing it forced a better question. Not how do we replace the assessor, but why is the assessor absorbing this much ambiguity in the first place. The system was collecting photographs and free text and then asking a human being to produce a number from it. We had handed them everything hard and given them nothing to hold on to.
Guided capture. On screen overlays requesting three specific angles rather than an open instruction to upload photographs, using the vehicle's own panel gap as an implicit scale reference.
A structured damage form. Panel, damage type, longest dimension band, depth indicator, paint condition. Free text replaced with values the system could act on. The assessor began receiving data instead of impressions.
A pricing matrix. Partner rate cards normalised into labour bands, paint operations and consumables, then joined to vehicle and paint reference data, so a given panel on a given model in a given finish resolves to a price band.
Constrained override. The assessor could no longer compose a price freely. They confirmed the band the matrix produced, or overrode it with a reason selected from a fixed list.
Graded eligibility outcomes. Some jobs should never be quoted from a photograph at all. Structural damage, a deployed airbag or a damaged motorcycle frame. Instead of a binary allow or deny, the rules routed every submission to one of five outcomes. Quote, quote with a caveat, hold for assessor, inspect in person, or decline with an explanation.
One of the three prices belonged to the client's own workshop, which made the platform a competitor to the partners supplying it. They noticed inside a fortnight and two of them threatened to stop accepting work. I didn't try to convince anyone of our good intentions, because that argument cannot be won. I made the mechanism explicit instead. The in house quote carried a visible label so the customer knew whose it was. Ordering was deterministic by price, with a written tie break and no manual arrangement. And every partner received a monthly report of their own win rate against the overall distribution. Both stayed.
The marked stages are the whole intervention, and not one of them is the assessor. Before, they got impressions and produced a free price. After, they got values and confirmed a band. The reason codes captured on override turned into the most useful dataset in the product. Clustered by panel, they showed exactly which parts of the pricing matrix were wrong. On a narrow screen the diagram scrolls sideways.
05 · Outcome
The spread closed, and the control group was never run
15%
of jobs read twice still came back more than a fifth apart.
Before the pricing matrix, 98% did. Same method, re run in weeks twenty six to thirty on sixty submissions.
Every paired assessment, before and after the pricing matrix
One dot per job assessed twice by two assessors working independently. Position is the spread between the two quotes, measured against the lower one. The shaded band is the middle half of each sample and the vertical line is the median. On a narrow screen the chart scrolls sideways.
The median is the headline, but the tail is what actually reached customers. Before, the worst job in the sample came back 96% apart and the closest of them still 18% apart. After, 36% and 4%. The middle half of the sample ran from 35% to 46% before the matrix, and from 10% to 16% after it.
ConsistencyMedian spread between two assessors quoting the same job
38%→12%
Trust in the quoteQuoted jobs escalated to inspection in person after a price had been given
22%→8%
CompletionCustomers who start a submission and finish it, after cutting required inputs by half
24%→39%
How it was measuredA job is assessed once in normal operation, so measuring consistency meant deliberately assessing some of them twice. Forty five submissions in weeks seven to nine and sixty in weeks twenty six to thirty, each classified independently by two of the three assessors, neither able to see the other's work. Spread is the difference between the two resulting prices over the lower one.
Why those windowsWeeks seven to nine were the only opportunity for a clean baseline, because once the matrix shipped there was no unmatrixed version of the process left to measure. Weeks twenty six to thirty sat far enough past release that the reading reflected the system rather than the novelty of it. Nothing was measured in between, deliberately. Assessing a job twice costs assessor time on a team of three, and the matrix was still changing week to week, so anything measured mid build would have caught a moving target rather than a state.
The other two ratesCensuses rather than samples, which makes them firmer than the variance figure. Escalations are flagged jobs over quoted jobs in a calendar month, month one live against month three. Completion is completed submissions over started ones, where a start means a customer uploaded at least one photograph. Move that definition and you move the number, so I state it before quoting the result.
It's a small sample, run in a spreadsheet, and the assessors knew which jobs were being compared, so there is an observation effect I would name before anyone asked. Directional evidence rather than precise measurement. At that stage of that business it was the most rigorous instrument available.
Twenty weeks separate the two measurements, and assessor experience moves in the same direction as the intervention. My argument is that the mechanism accounts for most of the change, because the assessor no longer composes a price at all. They confirm a band the matrix produced or override it with a reason code, and the band does not improve with practice. A control group of jobs assessed the old way over the same period would have separated the two cleanly. I didn't run one. That's a gap in the study, not a detail.
Commercially the escalation rate mattered most, because quoting a job and then telling the customer it needs inspecting reads as bait and switch even when it isn't. It was the single loudest complaint in the early reviews.
06 · What I learned
My metrics measured the funnel, not the business
I instrumented six things, and every one measured what happened inside the product. Not one would have told us how many customers took a quote and then rang the garage directly.
I argued for the wrong solution, and the constraint produced a better one
I was right that the problem was real and right that human judgement was the source of it. I was wrong that removing the human was the answer available to us. What the budget constraint forced out of us is more durable than the thing I wanted: it works with no training data, it degrades gracefully, and a new assessor is productive in days rather than months. I did design the reason codes so that if the client ever went back to the model, the labelled dataset would already be sitting there as a by product of normal operation. Lose an argument about sequencing and you should still build the thing that makes the later attempt cheaper.
Variance is a design problem wearing a training problem's clothes
You don't make estimates consistent by asking people to estimate better. You reduce what is left to judgement, then capture whatever judgement remains as structured data. Every instinct in that room was to fix the person. The fix sat on either side of them.
The business closed, and both causes were visible while I was there
It closed in November 2024, two and a half years after launch and two years after I left. The causes were structural. The platform paid to originate a job and then captured value only if the customer chose to stay inside it, and the cost of the human review step scaled with volume rather than against it. I under weighted both. Off platform completion is now the first thing I would instrument, ahead of anything to do with funnels.
Delivery facts
RoleSole product manager on the engagement
DurationSep 2021 to May 2022
Team4 engineers, no designer, no QA
TypeGreenfield build, zero to one
Delivery21 weeks concept to live, two weeks inside the agreed date