Skip to main content

Specification-by-Absence

A Derived Failure Pattern of Implicit Rules and Unverifiable Expectations

Summary

Specification-by-Absence is a Failure Pattern in which, when explicit specifications do not exist, "what is not written" itself is treated as de facto specifications.

What this Pattern addresses is not the problem of not writing specifications sufficiently. It is a structure in which, amid uncertainty and pressure for change, documenting specifications is postponed, and that void is filled by implicit expectations and conventions.


Context

In software under operation, defining all specifications in advance is not realistic.

Especially regarding the behavior of existing functions and exceptional cases, the fact "it has been working this way" tends to be treated as a substitute for documented specifications.

In such situations, even though specifications are not made explicit, only expectations become fixed.

Forces

The main dynamics that generate this Pattern are as follows:

  • High cost of specification description
    Writing precise specifications requires time and agreement, and in environments where changes occur frequently, it is easily postponed.

  • Dependence on existing behavior
    Running code is referenced as de facto specifications, and the intent of behavior is not articulated.

  • Asymmetry of confirmation costs
    Compared to the cost of making specifications explicit, proceeding on the assumption of implicit expectations looks cheaper in the short term.

  • Localization of changes
    Changes that limit scope of impact accumulate, and the overall specification image is no longer shared.

Failure Mode

Because specifications are not made explicit, discrepancies between expectations and implementation cannot be verified after the fact.

As a result, the following forms of breaking proceed simultaneously:

  • Expectations appear after code review
    Only after implementation, it is pointed out as "different from assumptions."

  • Specification confirmation is replaced by reference to past behavior
    The basis of correctness depends on history and memory.

  • Changes are treated as the basis for specifications
    Implementation that happened to be entered becomes fixed as a reference point for subsequent specification decisions.

Consequences

  • The distinction between specification changes and bug fixes becomes ambiguous
    (Part I: What Breaks — Responsibility / Data)

  • Decision criteria are not shared, and discussions flow toward impressions
    (Part II: Why It Breaks — Context Erosion)

  • New members and AI have no choice but to guess correctness
    Because assumptions and constraints are not made explicit, use as decision support is limited.
    (Part II: Why It Breaks — Context Erosion)

  • Trust in specifications is gradually lost
    (Part I: What Breaks — Data / Responsibility)

Countermeasures

The following are not a list of solutions, but counter-patterns for changing dynamics with minimal intervention against Failure Mode.

  • Explicitly handle what has not been decided
  • Differentiate and articulate facts and expectations of behavior
  • Do not try to write everything, but leave minimal specifications needed for decisions

Resulting Context

Specifications remain incomplete, and not everything is documented.

However, by making visible the parts that are undefined, discrepancies between expectations and implementation can be addressed early.

As a result, specifications function not as fixed deliverables, but as reference points that support decisions.

See also

  • Context-Blind Change
    The foundational pattern in which absence of specifications becomes fixed as a structure when assumptions are not shared during changes.

  • Test-Passing Illusion
    A derived pattern in which, in environments where explicit specifications do not exist, verification success tends to be treated as a substitute for correctness.


Appendix: Conceptual References

Appendix: References

  • Pamela Zave, Michael Jackson, Four Dark Corners of Requirements Engineering, 1997.
  • Barry W. Boehm, Software Engineering Economics, 1981.
  • Gojko Adzic, Specification by Example: How Successful Teams Deliver the Right Software, 2011.