Engineering Culture

Why Testing Never Gets Rewarded (And How to Make It Zero-Friction)

A thread in r/ExperiencedDevs titled "I'm giving up; Becoming a yes man" struck a nerve. The developer described spending weeks improving test coverage, only to watch colleagues who shipped flashy features get promoted instead. The problem is not laziness. The problem is that testing is invisible work in organizations that reward visible output.

$0

Generates real Playwright code, not proprietary YAML. Open-source and free vs $7.5K/mo competitors. Self-hosted, no cloud dependency. Tests are yours to keep, zero vendor lock-in.

Assrt project philosophy

1. The Broken Incentive Structure Around Testing

In most engineering organizations, promotions and performance reviews reward shipping. New features, new integrations, new products. Testing is maintenance work, and maintenance work is invisible. Nobody gets a shoutout in the all-hands meeting for preventing a regression that would have cost the company $50K in lost revenue. They get a shoutout for building the feature that generated $50K.

This creates a rational but destructive pattern. Senior engineers who care about quality either fight an uphill political battle to justify testing time, or they give up and become "yes men" who ship whatever gets asked for. The Reddit thread had hundreds of comments from developers describing exactly this dynamic. One commenter put it bluntly: "I stopped advocating for tests after my third performance review that didn't mention any of my quality work."

The root cause is measurement. Organizations measure what they can see: features shipped, tickets closed, story points completed. They rarely measure what did not happen: outages prevented, regressions caught before production, customer complaints that never materialized. Testing produces negative outcomes (preventing bad things), and negative outcomes are notoriously hard to quantify.

There is a second, subtler problem. Testing has historically required significant upfront investment. Writing a comprehensive E2E test suite for an existing application takes weeks. During those weeks, the engineer is not shipping features, which makes their velocity look worse on whatever dashboard management watches. The payoff comes months later when fewer bugs reach production, but by then nobody connects the improvement to the testing work.

2. Why "Just Write More Tests" Fails Politically

The standard advice for improving quality is to mandate higher test coverage. Set a coverage threshold (80%, 90%), add it to your CI gate, and enforce it. In theory, this works. In practice, it creates perverse incentives that make things worse.

When coverage thresholds are enforced without buy-in, developers write the cheapest possible tests to hit the number. These are typically shallow unit tests that exercise getters, setters, and trivial logic while completely ignoring the complex business flows where bugs actually live. A codebase can have 90% line coverage and zero tests for the checkout flow that generates all the revenue.

Coverage mandates also create friction. Every PR now requires additional test code, which slows down shipping velocity, which makes engineering leadership nervous, which leads to exceptions, which leads to the mandate being quietly abandoned. The engineer who advocated for the mandate gets blamed for slowing the team down, reinforcing the lesson that testing advocacy is a career risk.

The fundamental issue is that mandating behavior does not change incentives. If the organization still rewards shipping speed over reliability, coverage mandates just add paperwork. The solution has to come from a different direction: making testing so easy that it costs almost nothing, removing it from the political equation entirely.

Stop arguing about test coverage in sprint planning

Assrt generates Playwright tests from your running app automatically. No tickets, no estimates, no political battles. Just tests that exist.

Get Started

3. Making Testing Invisible with Automation

The only sustainable way to get testing into organizations that resist it is to make testing require zero developer effort. Not "low effort." Zero. If a developer has to write a single line of test code, testing becomes a task that competes with feature work for time and attention. If tests generate themselves, testing becomes infrastructure that just exists.

Several approaches are converging to make this possible. AI-powered test generation tools can crawl your application, identify critical user flows, and produce test scripts automatically. Tools like Assrt, Playwright Codegen, and various commercial platforms (Testim, Mabl, QA Wolf) can all generate initial test suites without manual authoring. The open-source options are particularly compelling because they produce standard Playwright code that your team already knows how to maintain.

The key principle is that generated tests should output code you own, not proprietary configurations locked inside a vendor platform. If your generated tests are YAML files that only work with one specific tool, you have replaced the political problem with a vendor dependency problem. Standard Playwright test files, committed to your repo, maintained alongside your application code, give your team full control.

Once the initial test suite exists, keeping it updated should also be automatic. CI pipelines can detect failing tests, flag whether the failure is a real bug or a test that needs updating, and in many cases auto-fix selector changes. The goal is a testing system that requires human attention only when it finds a real problem.

4. Practical ROI Metrics That Actually Convince Managers

If you need to make a business case for testing investment, stop talking about "code quality" and "best practices." Nobody with budget authority cares about abstract quality. They care about money, time, and risk. Here are the metrics that work.

First, track "escaped defect cost." Every bug that reaches production has a cost: engineering time to diagnose and fix, customer support tickets, lost revenue from downtime, reputation damage. Stripe published research showing that developers spend approximately 42% of their time dealing with technical debt and bad code, and a significant portion of that is fixing bugs that tests would have caught. If your team has 10 engineers at $150K average salary, 42% of their time is $630K per year. Even cutting escaped defects by 20% saves $126K annually.

Second, measure deployment frequency before and after adding test automation. Teams with comprehensive test suites deploy more often because they have confidence that changes will not break existing functionality. The 2023 DORA report found that elite performers deploy on demand (multiple times per day) while low performers deploy between once per month and once every six months. The primary difference is confidence, and confidence comes from automated testing.

Third, track mean time to recovery (MTTR). When bugs do reach production, how quickly can you fix them? Teams with good test suites recover faster because the test failure points directly to what broke. Without tests, debugging production issues requires manual investigation, which takes 3x to 10x longer. MTTR is a metric that engineering leadership already tracks, so connecting it to test automation is straightforward.

5. Building a Culture Where Quality Is the Default

Metrics get you budget approval. Culture is what makes testing stick. The most effective testing cultures share a common characteristic: testing is not a separate activity. It is part of the definition of done, like code review or documentation.

Start by making the test suite a first-class citizen in your CI pipeline. Every PR runs the full test suite. No exceptions, no skip flags, no "we will add tests later" labels. If the tests fail, the PR does not merge. This is not a coverage mandate. You are not requiring developers to write new tests with every PR. You are requiring that existing tests pass. The bar is "do not break what works," which is far more reasonable and politically defensible than "write tests for everything you build."

Next, celebrate prevented incidents. When a test catches a bug before it reaches production, make that visible. Post it in Slack. Mention it in the standup. Quantify what the bug would have cost. This creates a positive feedback loop where the value of testing becomes tangible and visible, counteracting the invisibility problem.

Finally, lower the barrier to entry. If generating a new test requires setting up fixtures, configuring test databases, installing dependencies, and reading 50 pages of internal documentation, nobody will do it voluntarily. The ideal setup is one command that creates a new test from your running application. Open-source tools like Assrt aim for exactly this: point it at your app, get Playwright tests back, commit them to your repo. The less ceremony around test creation, the more likely it happens organically.

The developer from that Reddit thread was not wrong to be frustrated. The incentive structure in most organizations genuinely punishes testing advocates. The path forward is not to fight the incentives but to make testing so effortless that it stops being a line item anyone argues about. When tests generate themselves and run automatically, nobody needs to be a hero to maintain quality. Quality just becomes the default state.

Make testing the path of least resistance

Assrt generates Playwright tests from your running application. No writing, no maintenance arguments, no political battles. Just coverage that exists.

$Open-source. Self-hosted. Your tests, your repo, your control.