Real work

A score is only as good as the data under it

Stated qualitatively. We did not run a measured before-and-after study, so no percentage is claimed.

Context

Qué Compro is a consumer product that scores supermarket food. It carries a catalogue of roughly six thousand products, a scoring model, an API, an Android app and a web client, built and run by BoRo.

Operational constraint

Nutrition data for the same product disagrees between sources, and a scoring model will happily produce a confident number on top of a wrong value. The constraint was not building the app. It was that nobody could tell which figure to believe, and a silent parsing error is indistinguishable from a real nutritional difference once it is in the database.

Architecture

  • An explicit evidence hierarchy: a value read from the physical label outranks a value crawled from a retailer, and the reason for each decision is recorded next to the product.
  • Data quality as a first-class state rather than a cleanup task. A product can sit in DATA_CONFLICT or DATA_INVALID, and the system knows the difference between a value it has, a value it distrusts and a value it does not have.
  • A scoring model that refuses to score what the data cannot support, so coverage is reported honestly instead of filled in.
  • A shared domain package used by the API, the mobile app and the web client, so the catalogue, the score and the product identity mean the same thing in all three.

Implementation

  • API, Android app and web client over a shared domain package, with an OpenAPI contract and database constraints written alongside the data model.
  • Reconciliation of source conflicts against label evidence, product by product, with the residual cases left visible rather than quietly resolved.
  • Repair of parser faults that had written silently wrong nutrition values, each with an audit file showing what changed and why.
  • A directed recrawl queue to re-fetch exactly the products whose data was suspect, instead of recrawling everything.
  • Calibration of the scoring model against human review, including pairwise checks and an explicit record of where model and reviewer were expected to disagree.

Observed result

  • Conflicts between sources are resolved by a stated rule and recorded evidence, not by whichever source was read last.
  • Products the data cannot support are visibly unscored instead of carrying a confident number.
  • Parser faults that were previously invisible now leave an audit trail, so the same class of error can be detected rather than rediscovered.
  • The catalogue, the score and the product identity have one definition shared by the API, the app and the web client.

Stated qualitatively. We did not run a measured before-and-after study, so no percentage is claimed.

Qué Compro — Work — BoRo Studio