The Ticket-Surge Night: A TestOps Case Study

The Ticket-Surge Night: A TestOps Case Study
Travel

The six engineers at Bus Route Heritage, a Kolkata events-and-transit guide run by a small cooperative, still talk about the October night their ticketing partner’s checkout page fell over during the city’s biggest cultural week. Traffic was not the villain; traffic was expected, forecast, and mostly handled. The villain was a test suite that had certified the checkout flow “all green” nineteen hours earlier, on code that bore only a passing resemblance to what shipped. What the team did over the following quarter is a compact case study in TestOps — running the automated suite as an operated service whose verdicts carry real consequences — and the ledger of what worked, drawn up analytically at the end, makes a useful template for any team whose pipeline applauds at the wrong moments.

The Incident, Reconstructed From the Record

Post-incident review produced the uncomfortable chain. A refactor had changed how the checkout service resolved fare rules. One integration test covered the exact path that broke; it had passed, but on a stale environment configured months before by an engineer who had since left. Three other tests failed that same morning for unrelated reasons, so the failure batch was skimmed, the noise was waved through, and the one real signal drowned in it. Itemised, the links were:

  • An outdated test server whose configuration had drifted for months.
  • A results flow that discarded history, making patterns invisible.
  • Zero accountability for whether reported answers were true.

The suite did not malfunction. It behaved exactly as its design allowed. Each link above is common to thousands of teams; the coincidence of all three on one night is what makes the story teachable rather than merely painful.

TestOps Phase One: An Attempt Ledger

The cooperative’s first spending decision was not a tool but a habit. Every result — pass, fail, or skipped — began landing in a store keyed by the test’s stable identity, stamped with the revision under test and which attempt had produced it. Analysis that had previously required interviews and guesswork became queries. Within three weeks the ledger showed what the team suspected and could not previously prove: a stable core of reliable checks, a short list of repeat liars, and a long tail that failed only in combination. Evidence changed the argument from “our CI is cursed” to “these eleven tests and two environments are the problem,” which is a problem with owners.

The Fix, Phase Two: Environments That Cannot Lie

The stale-environment link got the structural answer. Instead of one long-lived test server that drifted week by week, every pipeline run began by provisioning a fresh environment from the same definitions the production platform used, running against it, and destroying it afterwards. The change sounds expensive and was the opposite: no more configuration drift, no more “works on the test box,” and a clean blast radius when something misbehaved. Data followed the same rule — each test created its own records through the application interface, uniquely labelled, and swept them up at the end. The team’s verdict was blunt in the retro: any test that cannot run against a fresh environment is not testing the product; it is testing the archaeology of the server.

TestOps Phase Three: A Verdict With a Budget and an Owner

The third quarter-month addressed speed and accountability together. The fast gate — the checks every change must clear before merging — was trimmed to run in under ten minutes, with everything slower pushed downstream into a parallel full pass. Bench reliability went on a visible wall: every benched test carried a name, a ticket, and a date, and the wall’s total was reviewed weekly with the same seriousness as the accounts. And one person, rotating monthly, owned the number nobody had owned before — the share of reported failures that were false. Within six weeks that share had fallen by roughly two-thirds, not through heroics but because it was finally being counted, published, and answered for. The rotation mattered more than anyone predicted: ownership as a monthly rota stayed honest precisely because no one could confuse the role with a career.

The Ledger: What the Quarter Actually Bought

Drawn up analytically, the returns divided into three lines. Trust: failure reports were read again, and the rerun reflex measurably faded. Time: changes reached a first verdict in minutes rather than “after standup.” Cost: the fresh-environment policy initially raised compute use by a visible margin, then dropped below the old baseline once the long tail of combination failures stopped forcing human investigation. The last line is the one finance teams should note — operational discipline often costs more compute and less payroll, and payroll is the bigger number by a distance. There was a fourth, uncosted line the cooperative mentioned in its annual note: on-call engineers stopped predicting bad weeks from a feeling and started reading them from a chart, which is a different profession wearing the same chair.

For the reference framework behind the three phases — result storage, environment strategy, stage budgets, and quarantine rules — work from the Ops Atlas reference on TestOps, which is the source this team used, and it is publicly readable.

Readers who know Kolkata will recognise the pattern in the city’s own systems: the heritage routes documented in our guide to vintage streetcars and the underwater metro corridors survive on the same principle — keep the record, inspect the vehicles, retire what cannot be trusted. Planning support follows the same logic, whether you need family-friendly neighbourhoods around historic Kolkata or the seasonal wardrobe that keeps a visit comfortable: verified, current information beats memory every time.

The next surge night came and went unremarked. A quiet checkout page under peak load is not a dramatic ending; it is the point.

Leave a Reply

Your email address will not be published. Required fields are marked *