Hardening and Stabilization Sprints
Dedicating one or more sprints after feature complete to stabilize code treats quality as a phase rather than a continuous practice.
11 minute read
Dedicating one or more sprints after feature complete to stabilize code treats quality as a phase rather than a continuous practice.
11 minute read
Zero automated tests. The team has no idea where to start and the codebase was not designed for testability.
9 minute read
Every release requires days or weeks of manual testing. Testers execute scripted test cases. Test effort scales linearly with application size.
11 minute read
QA is a phase after development, making testers downstream consumers of developer output rather than integrated team members.
11 minute read
Most tests are slow end-to-end or UI tests. Few unit tests. The test suite is slow, brittle, and expensive to maintain.
12 minute read
A mandatory coverage target drives teams to write tests that hit lines of code without verifying behavior, inflating the coverage number while defects continue reaching production.
7 minute read
Tightly coupled code with no dependency injection or seams makes writing tests require major refactoring first.
11 minute read
A specific person must manually approve each release based on exploratory testing, creating a single-person bottleneck on every deployment.
11 minute read
Services test in isolation but break when integrated because there is no agreed API contract between teams.
12 minute read
Developers accept AI-generated code without verifying it against acceptance criteria, allowing functional bugs and security vulnerabilities to ship because “the tests pass.”
8 minute read
Multiple teams share a single staging environment, creating contention, broken shared state, and unpredictable test results.
10 minute read
Testing is someone else’s job - developers write code and throw it to QA, who find bugs days later when context is already lost.
9 minute read
Changing one module breaks others. No clear boundaries. Every change is high-risk because blast radius is unpredictable.
10 minute read
Tests exist but run only when a human remembers to trigger them, making test execution inconsistent and unreliable.
8 minute read
Management pressures developers to skip or shortcut testing to meet deadlines. The test suite rots sprint by sprint as skipped tests become the norm.
9 minute read
Developers accept AI-generated code without verifying it against acceptance criteria, and functional bugs and security vulnerabilities reach production unchallenged.
4 minute read
Application code has a CI/CD pipeline, but ML models and data pipelines are deployed manually or on an ad hoc schedule.
3 minute read
Tests pass locally but fail in CI, or pass in CI but fail in staging. Environment differences cause unpredictable failures.
3 minute read
The team dedicates one or more sprints after “feature complete” to stabilize code before it can be released.
4 minute read
Test coverage numbers look healthy but defects still reach production.
3 minute read
Zero test coverage in a production system being actively modified. Nobody is confident enough to change the code safely.
4 minute read
The time from making a change to knowing whether it works is measured in hours, not minutes. Developers batch changes to avoid waiting.
4 minute read
The only way to know if a change passes CI is to push it and wait. Broken builds are discovered after commit, not before.
3 minute read
Internal code changes that do not alter behavior cause widespread test failures.
3 minute read
Something that worked before the release is broken after it. The team spends time after every release chasing down what changed and why.
4 minute read
Pipelines take 30 minutes or more. Developers stop waiting and lose the feedback loop.
3 minute read
The team cannot run the full regression suite on every change because resetting the test environment and database takes too long.
5 minute read
The test suite takes 30 minutes or more. Developers stop running it locally and push without verifying.
3 minute read
Tests share mutable state in a common database. Results vary by run order, making failures unreliable signals of real bugs.
4 minute read
The pipeline fails, the developer reruns it without changing anything, and it passes.
3 minute read
Some services have full pipelines and coverage. Others have no tests and are deployed manually. No consistent baseline exists.
3 minute read