Skip to main content
Test Double company logo
Services
Pragmatic Services Overview
Holistic software investment consulting
Acccelerate Software Delivery
Balance efficiency and quality
Improve Product Impact
Drive results that matter
Upgrade Rails Seamlessly
Update Ruby and Rails versions
Scale DevOps
Dev experience and infrastructure
Technical Recruitment
Build tech & product teams
Case Studies
Solutions
Legacy Modernization
Renovate legacy software systems
Pragmatic AI
Solve business problems without hype
Technical & Product Assessments
Uncover root causes & improvements
About
About
What's a test double?
Approach
Meeting you where you are
Founder's Story
The origin of our mission
Culture
Culture & Careers
Double Agents decoded
Great Causes
Great code for great causes
EDI
Equity, diversity & inclusion
Insights
All Insights
Hot takes and tips for all things software
Leadership
Bold opinions and insights for tech leaders
Developer
Essential coding tutorials and tools
Product Manager
Practical advice for real-world challenges
Say Hello
Test Double logo
Menu
Services
BackGrid of dots icon
Services Overview
Holistic software investment consulting
Software Delivery
Accelerate quality software development
Product Impact
Drive results that matter
Cycle icon
DevOps
Scale infrastructure smoothly
Upgrade Rails
Update Rails versions seamlessly
Technical Recruitment
Build tech & product teams
Case Studies
Solutions
Solutions
Legacy Modernization
Renovate legacy software systems
Pragmatic AI
Solve business problems without hype
Technical & Product Assessments
Uncover root causes & improvements
About
About
About
What's a test double?
Approach
Meeting you where you are
Founder's Story
The origin of our mission
Culture
Culture
Culture & Careers
Double Agents decoded
Great Causes
Great code for great causes
EDI
Equity, diversity & inclusion
Insights
Insights
All Insights
Hot takes and tips for all things software
Leadership
Bold opinions and insights for tech leaders
Developer
Essential coding tutorials and tools
Product Manager
Practical advice for real-world challenges
Say hello
Leadership
Leadership
Leadership
Accelerate quality software

After the tests pass

Engineers are great at testing correctness. Far fewer teams know how to measure whether their code is actually performing well once it's in production.
Jed Schneider
|
September 3, 2026
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.

This series is about the distance between two things: proving your code is correct before release, and knowing whether it actually performs once real users arrive. Most teams can do the first. Far fewer can do the second.

‍

The product owners were not happy. Near the end of the milestone, they drew a line: fix the performance, or it doesn't ship. Eighteen months of work hung on the answer. The build was green. The new code had deployed cleanly and was serving traffic—yet the product was still too slow to put in front of a customer.

From the development side, every signal we had said success. The suite was green through the whole pipeline. Locally, it felt fine. All the automation we'd built to tell us when to ship—including extensive end-to-end and integration tests—was telling us to ship. And the people who owned the outcome were telling us we couldn't.

Green everything, unhappy product. That gap is the whole problem.

Correctness, performance, and impact

As an industry, we've built a strong toolkit for proving code correct. We have a far less coherent yardstick for what comes next: whether it performs, and whether it matters. There are three main questions worth pulling apart:

  • Correctness: did the code behave the way we intended?
  • Runtime performance: is it fast and reliable under real traffic?
  • Business impact: did it create the outcome anyone wanted?

‍

Tests live almost entirely in the first. This series is about the move to the second, and I want to be careful about the third, because these layers connect. An unusably slow product is a bad business outcome. The same telemetry that shows what is happening (and when) also shows what people are actually using, where the value proposition is strongest, and how well the system serves them. Performance—along with signals like application traffic and service demand—is a business concern, not a separate silo.

Production is where tests fail to predict outcomes

A test harness is a controlled environment by design. Real systems are not. They meet traffic patterns, dependency latency, data shapes, and concurrency that the harness never reproduces. Some behavior only exists in the wild.

The evidence you need lives nowhere but production, and it helps only if it feeds back into how you design, test, and instrument the next change. Production is the part of the loop that most teams never close.

Observability is a capability, not a purchase

Say the word "observability," and the first image is a vendor contract, a dashboard nobody opens, and SOC2-something-or-other. But what if observability isn't something we buy, but something we earn?

I want to reclaim this practice for engineers: the habit of asking the running system questions and being able to get answers. It changes the code you write, because you instrument for the questions you'll need later. It changes how you argue—"I need to refactor the checkout process" becomes "after refactoring the checkout process, the reduced latency and friction has helped reduce abandoned carts by 30% since we shipped the change."

You've arrived when you can answer a hard question with "I don't know, let's see what the data says," and mean it.

A launch that almost didn't happen

Back to that milestone crisis I opened with. Pages were taking twenty to thirty-five seconds to load. Every dev-side check was green. The first question was simple, and we couldn't answer it: where was the time going?

We already had distributed tracing across the stack—a Next.js front end and a Django REST API—and that groundwork is what made the rest possible. The easy offender showed up locally: an accidental N+1, a prefetch missing one attribute. Real, but not the story. The bigger cause was invisible on a laptop, where the dev web server runs single-threaded and never contends with itself. It only appeared under real traffic, for certain customer data shapes: the front end was requesting the same data more than once per page, and those uncoordinated calls queued at the API until the whole app fell behind.

The reflex was to add capacity—spin up more API task containers and get past the milestone. But these were customers with relatively modest data and expectations; the load we were seeing didn't fit. The team already doubted hardware was the answer, and tests to increase scale were still benchmarked poorly. Traces pointed to a different point of contention: a coordination problem, not a capacity one. So instead of scaling to hide it, we resolved the IDs each page needed early, at the page-model layer, and scheduled the fetches to hydrate each page in the fewest calls.

The benchmarked response went from twenty-plus seconds to under 500 milliseconds. The product finally felt like a product, and the milestone shipped on time.

That was a verdict neither the tests nor expert understanding of the system could ever have given us. Only the telemetry could. In fact, this coordination problem was diagnosed and fixed by one of the newest members of the team, despite earlier attempts by more senior engineers to find and fix it.

What the data actually did

The most useful thing wasn't the fix. It was that the traces moved a decision. The call didn't come down to who was most senior or who argued hardest—the evidence settled it. That's the quiet shift that observability buys you. A slow production system is a systems problem,and the fastest way past the finger-pointing is a signal everyone can see.

Where this series goes

Production is knowable, and knowing it is a skill you can build. I'll cover three, each with real examples:

  • Benchmarking: making performance a first-class part of design and major code decisions
  • Code instrumentation: building the visibility that benchmarking and monitoring both depend on
  • Analytical research and visualization: turning the data into decisions, live and in hindsight

‍

You don't need a greenfield project to start. All that you need is to move from treating observability as something that happens to you and to treating it as something you own. That's where the gains are: teams with more agency, more credibility with the people who fund the work, and more confidence that what they ship does what they meant it to.

The next time everything passes, ask the harder question: once real users have it, how will you know it's actually serving them?

‍

Jed Schneider is a Senior Software Consultant at Test Double, with experience in product development, data engineering, observability, and agentic systems.

‍

Don't code alone

Sign up for the Test Double newsletter to receive more tips for accelerating quality software.

Subscribe

Related Insights

No items found.

Explore our insights

See all insights
Developers
Developers
Developers
Lay the Foundation Before You Reach for Advanced Agentic Tooling

Is your code ready for advanced agentic tooling? River Bailey explores the foundational practices that help both humans and AI amplify good work, and avoid repeating the existing problems.

by
River Lynn Bailey
Developers
Developers
Developers
A practical guide to Firebase Emulator for local dev and Cypress testing

Setting up Firebase Emulator to work with local dev, Cypress, CI, and Claude Code—what works, what doesn’t, and edge cases to watch out for.

by
Robert Komaromi
Developers
Developers
Developers
AI Should Give Us Our Lives Back, Not Fill Them With More Work

What do you do with the time saved using AI? River Bailey explores multiple threads while exploring the possibilities.

by
River Lynn Bailey
Letter art spelling out NEAT

Join the conversation

Technology is a means to an end: answers to very human questions. That’s why we created a community for developers and product managers.

Explore the community
Test Double Executive Leadership Team

Learn about our team

Like what we have to say about building great software and great teams?

Get to know us
Test Double company logo
Improving the way the world builds software.
What we do
Services OverviewSoftware DeliveryProduct StrategyLegacy ModernizationPragmatic AIDevOpsUpgrade RailsTechnical RecruitmentAssessments
Who WE ARE
About UsCulture & CareersGreat CausesEDIOur TeamContact UsNews & AwardsN.E.A.T.
Resources
Case StudiesAll InsightsLeadership InsightsDeveloper InsightsProduct InsightsPairing & Office Hours
NEWSLETTER
Sign up hear about our latest innovations.
Your email has been added!
Oops! Something went wrong while submitting the form.
Standard Ruby badge
614.349.4279hello@testdouble.com
Privacy PolicyTerms & Conditions
© 2020 Test Double. All Rights Reserved.

Don't code alone

Sign up for the Test Double newsletter to receive more tips for accelerating quality software.

Subscribe