Published

Two Lists, One Fact: what duplicated service data costs

Abstract

The service marquee on our own homepage advertised lines the business had stopped selling, twice, because the marquee kept its own hand-written list of service names instead of reading the one the grid used. Two copies of one fact drift apart. That is the whole finding.

What happened

The homepage rendered services from one array and the scrolling marquee rendered its own separate array of labels. They disagreed twice. First, two retired lines kept scrolling after they had stopped being sold. Then, two more were still scrolling while absent from the live set.

Nobody was careless. The bug is the duplication itself: two hand-written copies of one fact will drift, and the drift is invisible because both copies look correct in isolation.

The fix

Service definitions moved to a single module. The marquee now derives its labels from the same function the grid uses, so they cannot disagree. Retiring a line is one edit in one place.

Why it generalises

The same failure appears anywhere a fact is re-typed rather than referenced: pricing in a landing page and a checkout, a model name in a config and a documentation page, a count in a hero and a database query.

The test is simple. If changing a fact requires you to remember how many places mention it, it will be wrong within a month.

BibTeX

@article{desk2026two,
  author    = {Ejentic Research Desk},
  title     = {Two Lists, One Fact: what duplicated service data costs},
  year      = {2026}
}