Whatever is left unspecified will be invented by the implementer
Aliases: gap filling in implementation · silent handoff · unspecified content shape
What it is
A data shape the screens never show does not wait in engineering for the next review. Unspecified-case invention is what happens when the package is silent on a content edge: someone must invent a rendering so the branch compiles. The invention comes from personal habit, memory of a nearby screen, or a framework default — not from a decision anyone jointly saw. A gap is not “empty for now.” A gap is a transfer of authorship.
This is not the same as a component missing hover or disabled skins and having them filled in on the fly. What changes hands here is the shape of content — how an overlong identifier sits, what an empty attachment name does — not the control’s own interaction skin.
Why it happens
A product that must ship cannot leave an uncovered else blank. Compilers, type systems, and fixtures demand a concrete branch: truncate, wrap, show a dash, ellipsize, or treat an empty string as missing and hide the row. Each implementer facing the same hole reaches for a different default tool — wrapping on one platform, clipping on another, middle truncation copied from an old line of business. Each choice looks like solving the problem; side by side, the same field behaves three ways on three screens.
Silence is also read as permission. Reviewers of the happy path assume “undrawn means unimportant.” Implementers assume “undrawn means I can do what I know.” Neither thinks they changed the design, so the split is found only when a user meets two treatments at two entries. Completeness of a package is not how many happy paths it contains. It is whether the right to translate silence into code was taken back before that translation ran.
Where it stops holding
An item on a deferral list with an owner and a date for the missing frame is not silence; it is a registered unknown. Implementers should use an explicit temporary (a development marker), not a private lifetime decision. Throwaway prototypes and internal demos can afford invention if those inventions are barred from flowing back into production files. When the implementer is also the design owner of that screen, deciding on the spot is design work, not gap-filling — but the decision still has to be written back, or the next person will invent again. Native platform behavior (how a system date picker shows an overlong region name) can be accepted wholesale only if the package says “follow the system”; otherwise it is still treated as mutable.
Applying it
- In a handoff walkthrough, list every data slot on the happy path and ask whether shortest, longest, empty, and illegal values have screens. Any unanswered cell is a gap, not “we’ll see at implementation.”
- A gap has two legal exits: add the frame, or write a dated deferral with one temporary treatment (show “unavailable” everywhere; do not let each surface invent).
- Do not say “this should never happen” without writing it down. If product rules forbid that shape, ship the forbid-rule and the blocking treatment when the shape is reached.
- Ask two engineers who were not in the design to look only at the current package and independently write how they would handle an undrawn slot. If the answers diverge, invention has already happened — put that slot in the package before code.
Related
- Same group: R2.05.1 Handoff must show both extreme-long and extreme-short content · R2.05.2 Zero, one, and many each need their own defined layout · R2.05.4 Bound values come from real distributions, not imagined extremes · R2.05.5 Overflow behavior must be specified separately by content type · R2.05.6 Stacked edge cases need their own frames
- Adjacent: R1.03 Completeness of component states · R2.01 Annotation and asset export
- Search terms:
unspecified-case invention·handoff gap·implementer fills in
Cards in the same group
- R2.05.1Handoff must show both extreme-long and extreme-short content
- R2.05.2Zero, one, and many each need their own defined layout
- R2.05.4Bound values come from real distributions, not imagined extremes
- R2.05.5Overflow behavior must be specified separately by content type
- R2.05.6Stacked edge cases need their own frames