Skip to content

Part 1 of 7 · Quote comparer series ~6 min read

A quote comparer on AWS for a few dollars a month

Three quotes come in for the same bathroom refit: eleven thousand, thirteen and a half, and fourteen two. The eleven looks like the obvious answer for about a minute, until somebody notices it does not mention removing the old suite, tiling, or making good afterwards. This post walks through a small system that finds that in the first minute rather than the third week.

Modern store interior featuring cosmetic products
Photo by Ela De Pure on Unsplash

Key takeaways

  • Compare line items and exclusions, not totals. The totals describe different jobs.
  • Every extracted number keeps a pointer back to where it came from in the document.
  • Units have to be normalised before anything can be compared at all.
  • The system never recommends. It surfaces differences and stops.
  • Designed on AWS for about $3 a month.

The whole system on one page

Before any code, here is the shape of what we are designing.

System: quotes read, normalised and compared without rankingThree boxes across the top sit outside the AWS account. On the left, Quotes arrive as PDF, email or photo. In the middle, What was asked for: the original spec. On the right, Whoever decides, who reads a comparison. Each connects by an arrow to the AWS account container below. Documents flow down into the account. The scope feeds in. A comparison goes back out. Inside the AWS account are three components in a row. On the left, the Reader, extracting lines, units and where each came from. In the middle, the Normaliser, putting everything in the same units and the same scope. On the right, the Comparer, showing differences and gaps with no winner. A note at the bottom says there is no fourth box that ranks them, and that absence is the design.AWS ACCOUNTQuotes arrivePDF, email, photoWhat was asked forthe original specWhoever decidesreads a comparisonReaderlines, units,where each came fromNormalisersame units,same scopeComparerdifferences and gaps,no winnerdocumentsthe scopea comparisonThere is no fourth box that ranks them. That absence is the design.
Fig 1. Three things outside the account, three pieces inside it. What is missing on the right — a scoring or ranking component — was considered and deliberately left out.
  • Compute
  • Analytics
  • Front-end & mobile
  • People

Why there is no ranking step

It is the first thing anyone asks for and it is the wrong thing to build. A ranking requires weighing price against scope against risk against how much you trust the supplier, and three of those four are not in the documents. A system that ranks anyway is applying weights somebody invented, invisibly, to a decision worth thousands.

The version that helps is the one that makes the differences unmissable in ninety seconds instead of a fortnight. Everyone who has compared quotes by hand knows the failure mode is not bad judgement; it is missing the line on page four that says “excludes disconnection of existing services”.

What runs (the inside)

  • The reader. Pulls line items, quantities, units and totals out of whatever arrived, keeping a pointer back to the page and line each came from. Part 2.
  • The normaliser. Converts units, aligns line items to the requested scope, and identifies what each quote does not cover. Part 3.
  • The comparer. Produces the side-by-side, with the exclusions given the same visual weight as the prices. Parts 4 and 5.

Three quotes, end to end

Three supplier quotes read, normalised and compared in five stagesA horizontal row of five boxes joined by arrows. Three PDFs: at eleven thousand, thirteen and a half thousand, and fourteen thousand two hundred. Read: forty-seven line items. Normalised: per square metre and per unit. Gaps found: the cheapest excludes four items. Compared: the person decides. A note says the fourth box is the whole value, and the fifth is a table anybody could have drawn.THREE QUOTES, END TO ENDThree PDFs11.0k, 13.5k, 14.2kRead47 line itemsNormalisedper m2, per unitGaps foundcheapest excludes 4Comparedthe person decidesThe fourth box is the whole value. The fifth is a table anybody could have drawn.
Fig 2. The same system as one line. Everything before the fourth box is preparation for the one output that changes a decision.
  • Compute
  • Management
  • Analytics

In plain words

Three builders quote for the same bathroom. The first is eleven thousand and reads as a single page: supply and fit, one number. The second is thirteen and a half over four pages with twenty-two line items. The third is fourteen two, similar detail, plus a page of terms.

The system reads all three, converts the tiling from “the bathroom” to eleven square metres using the spec, and lines up what each covers. Then it produces the finding: the cheapest quote does not mention removing the existing suite, does not include waste disposal, does not include making good the walls, and its terms make the customer responsible for materials delivery.

It does not say the eleven thousand quote is worse. It might be a perfectly good arrangement with a builder who assumed those things were understood, and it is now a conversation with a specific list of four questions rather than a number that looked cheap. That conversation is the output.

Design rules that shaped every decision

  • Never rank. Surface the differences and stop.
  • Every number keeps a pointer to the page and line it was read from.
  • An exclusion is a finding with the same weight as a price.
  • A line that cannot be normalised is reported as not comparable, never estimated.
  • Nothing is inferred about what a supplier “probably” includes.
  • The original documents are always one click away from every number.

Why this shape

Comparing quotes is a task people are already reasonably good at and have no time for. The mistakes are not analytical; they are attentional, and they happen on page four of the third document at half past five. That is a very different problem from the one an automated scoring tool solves.

So the design puts almost all of its effort into extraction fidelity and exclusion detection, and none into judgement. It is a system for making sure nobody misses anything, run by somebody who already knows what matters.

The next four posts walk through each piece: how a quote gets read, how quotes are made comparable, how the comparison is presented, and what happens when a quote cannot be compared at all. One diagram per post, a cost breakdown, and an engineering reference at the end.

All posts