What to Do When Unit Tests Pass but Production Hates You

by Arif Ikhsanudin, Backend Developer

Everything works on your machine, all unit tests green.
Then production screams, and suddenly you’re the villain.

Green Tests ≠ Safe Deployment

Unit tests are a safety net, not a crystal ball.

  • They only cover the cases they were written for
  • They don’t see production’s real-world data quirks
  • They can’t predict environment-specific behavior

Passing tests make you confident, not invincible.

Step Back and Observe

When production fails, the first instinct is panic—but slow down.

  • Check logs first: errors are rarely subtle
  • Compare production input/output with what your tests used
  • Look for hidden assumptions in the code

Your job is investigation, not blame.

Isolate the Problem

Production failures are rarely caused by a single line of code.

  • Identify which service or module is misbehaving
  • Verify configuration differences between staging and production
  • Confirm dependencies, versions, and network behavior

Breaking it down avoids a frantic all-hands debugging session.

Communication Is Key

Once you know the problem, keep your team informed.

  • Send clear updates to managers and stakeholders
  • Document what fails, why, and what’s being tested next
  • Avoid speculation or panic—clarity helps everyone act faster

Unit tests may have passed, but transparency wins the day.

Lessons for the Future

Use the incident to strengthen your safety net:

  • Add integration or system tests for production-like scenarios
  • Review environment parity between local, staging, and production
  • Remember: tests are tools, not proof of perfection

Production will always throw curveballs—anticipate them, don’t fear them.

Scale Your Backend - Need an Experienced Backend Developer?

We provide backend engineers who join your team as contractors to help build, improve, and scale your backend systems.

We focus on clean backend design, clear documentation, and systems that remain reliable as products grow. Our goal is to strengthen your team and deliver backend systems that are easy to operate and maintain.

We work from our own development environments and support teams across US, EU, and APAC timezones. Our workflow emphasizes documentation and asynchronous collaboration to keep development efficient and focused.

  • Production Backend Experience. Experience building and maintaining backend systems, APIs, and databases used in production.
  • Scalable Architecture. Design backend systems that stay reliable as your product and traffic grow.
  • Contractor Friendly. Flexible engagement for short projects, long-term support, or extra help during releases.
  • Focus on Backend Reliability. Improve API performance, database stability, and overall backend reliability.
  • Documentation-Driven Development. Development guided by clear documentation so teams stay aligned and work efficiently.
  • Domain-Driven Design. Design backend systems around real business processes and product needs.

Tell us about your project

Our offices

  • Copenhagen
    1 Carlsberg Gate
    1260, København, Denmark
  • Magelang
    12 Jalan Bligo
    56485, Magelang, Indonesia

More articles

Your Pipeline Is a Product. Start Treating It Like One.

CI/CD pipelines are maintained like infrastructure but used like products — by developers who have workflows, pain points, and expectations. The teams that treat the pipeline as a product ship faster and break less.

Read more

What Async-First Backend Development Actually Looks Like in Practice

Async-first is easy to advocate for in the abstract. Here's what it concretely requires from the team running it and the contractors working within it.

Read more

Referrals Do Not Happen by Accident. Here Is How to Earn Them.

Referrals feel like they happen passively — someone just mentions your name at the right moment. But the contractors who get referred consistently have done specific things to make that happen.

Read more

Writing Useful Unit Tests for Spring Boot Services — Patterns That Catch Real Bugs

Most unit tests verify that code does what it already does — they pass when the code is written and continue passing through every refactor, catching nothing. Here is how to write tests that fail when something breaks and survive when nothing does.

Read more