Steven Noble

Engineering Leadership3 min read

No Software Ships Bug-Free: A Shared Language for Release Decisions

Bugs are inevitable in any real product. The problem is rarely the presence of bugs themselves. The real problem is how teams decide which bugs matter, and what "blocking" actually means.

Without a shared framework, every bug becomes a negotiation. One founder sees urgency, another sees acceptable risk, and engineers are left trying to resolve what is ultimately a subjective disagreement rather than a technical one.

This is the point where release cycles start to slow down because the definition of stability is unclear.

The solution is to agree a simple severity model before you get to launch pressure. Not during a crisis, but when decisions are still calm and theoretical.

A practical structure looks like this:

P1 Critical issues are those that break the product entirely or introduce unacceptable risk. Users cannot complete core actions such as logging in or making payments, data may be lost, or security may be compromised. These issues always block a release.

P2 Major issues allow the product to function, but with serious degradation. Core workflows may be unreliable, key processes may fail intermittently, or essential administrative actions may be broken. These issues are usually fixed before launch unless there is a deliberate decision to accept risk.

P3 Minor issues are visible but non-blocking. They may include inconsistent behaviour, non-critical validation errors, or parts of the interface that reduce clarity but do not prevent task completion. These are typically scheduled for post-launch fixes.

P4 Cosmetic issues are purely visual or linguistic. Spacing, alignment, typos, and minor UI inconsistencies fall into this category and are almost always addressed after release unless they compound user confusion.

The exact labels matter less than the shared understanding of what each level represents. The value comes from consistency, not perfection.

Once this framework exists, it changes how release conversations work. Instead of debating whether a bug feels serious, the team is classifying it against agreed criteria. That removes emotion from the process and replaces it with repeatable judgement.

It also creates a clear release threshold. If any P1 issues exist, you do not ship. If only P3 and P4 issues remain, you can ship with confidence. P2 becomes a deliberate decision rather than an ambiguous grey area.

The goal is not to eliminate disagreement. It is to ensure disagreement happens within a shared language.