Record a negative engineering decision when a plausible approach was deliberately rejected and is likely to be proposed again. State the rejected option, the context in which it was rejected, the reason, the consequences and the conditions that would justify reconsidering it.

Why rejected options deserve a record

Positive decisions are visible in the implementation. Negative decisions usually leave no artifact at all. That makes them fragile: a new teammate or coding agent sees a sensible-looking option and has no evidence that the team already investigated it.

Capturing the rejection prevents repeated analysis without pretending the answer is universal. The decision is scoped to a repository, a point in time and a stated set of constraints.

What the record should contain

Write the rejected option in neutral language. Explain the requirement or risk that made it unsuitable. Link to evidence where possible, and state whether the rejection is permanent, conditional or expected to be revisited.

  • Rejected option: hard-delete the user and dependent records immediately.
  • Reason: the product promises a 30-day restoration window.
  • Consequence: deletion must use a recoverable state and delayed purge.
  • Reconsider when: the restoration promise and retention policy are formally changed.

Avoid turning the record into folklore

Do not write 'never use technology X' without scope or rationale. That phrase is easy to copy and impossible to evaluate. A useful negative decision explains which problem was being solved and which evidence would invalidate the rejection.

Use lifecycle states. If the constraint changes, supersede the old record with a new reviewed decision. Preserving the relationship is more informative than rewriting history.

Make the rejection discoverable

Tag the record with the domain language an engineer would use when proposing the rejected approach. Relate it to the accepted decision and expose both through the same deterministic query path. The goal is for a question such as 'Can I hard-delete a closed account?' to return the reasoned rejection before implementation begins.

Sources and further reading

  1. Architectural Decision Records
  2. MADR decision template