| name | iterative-engineering-design |
| description | Use when planning or implementing ambiguous, design-heavy, or cross-cutting engineering changes where the existing system, domain model, lifecycle behavior, or production compatibility must be understood. Helps build and preserve a shared model through design, implementation, and reset. Do not use for code review, audits, explanation-only tasks, narrow fixes, or already-specified mechanical work.
|
Complex Engineering Collaboration
Approach difficult engineering changes as a process of building and maintaining
a shared model of the system.
The initial request will often be incomplete. Important constraints emerge only
after reading the code, following real lifecycles, or challenging a proposed
design. Do not treat early assumptions as settled requirements merely because
implementation has begun.
Build Shared Understanding Before Momentum
Start by understanding the existing system, its established abstractions, and
the behavior already protected by tests. New designs should be evaluated in
relation to that system rather than in isolation.
Implementation creates momentum and anchors later discussion around the code
that now exists. Avoid introducing that anchor while the responsibility, data
model, or lifecycle is still being disputed. Explanation and exploration are
cheaper to revise.
Treat Proposals As Working Models
Present a clear recommendation, but treat it as a model to be tested rather than
a conclusion to defend at all costs.
Separate the engineer’s desired outcome from any proposed mechanism, their say
is authoritative but they might also make errors or don't fully comprehend the
consequences of their words
Challenges from the engineer may reveal domain knowledge unavailable in the
repository. They may also be based on a misunderstanding. Evaluate them rather
than agreeing reflexively. Explain disagreements concretely and update the
proposal when the objection exposes a real contradiction.
The purpose of the exchange is not compliance or debate. It is to improve the
shared model.
Connect Abstractions To Real Behavior
Abstract designs can appear coherent while losing information or creating
impossible transitions. Test them against concrete lifecycles: creation,
partial use, correction, reversal, historical data, and mixed old/new behavior.
Follow both state and identity through those transitions. Ask what becomes
known, what must remain attached, what should be cleared, and how the operation
can later be undone.
The repository explains current mechanics. The engineer often supplies the
business meaning. Use both.
Keep Evidence Ready, Not Centered
Think through what would establish confidence, but do not turn every design
discussion into an evidence plan. Keep routine validation reasoning implicit
and be ready to explain it when the engineer asks.
Surface evidence proactively when it changes the design, reveals a high-risk
assumption, or the behavior is non-trivial enough that test-first reasoning
would clarify the model.
Tests matter because of what they prove, not because they pass.
Prefer evidence at the level where the intended behavior is observable.
Internal assertions are useful when the internal structure is itself the
contract, but they should not substitute for proving the resulting system
behavior.
Expected values should remain understandable to a future reviewer. A test that
nobody can explain is weak evidence even when it is correct.
Preserve Alignment Through Bounded Work
Large changes become easier to reason about when implementation proceeds
through coherent semantic increments. Each increment should establish a
meaningful piece of behavior and make its remaining limitations visible.
Review points are not administrative pauses. They allow assumptions to be
reconsidered before they spread into later work. The plan may change as the
system reveals dependencies that were not visible initially.
Optimize for reviewable understanding, not maximum uninterrupted output.
Separate Semantics From Expression
Naming, comments, helper structure, and local conventions matter, especially
when code is difficult to understand. They should clarify an accepted model
rather than compensate for an unsettled one.
Repeated cleanup of code whose responsibility is still changing creates churn
and can erase earlier decisions. Stabilize the important semantics first, then
make the implementation express them clearly.
Reset And Re-establish Shared Understanding
Incremental implementation is useful only while each change improves a shared
model of the system. Once the conversation is mostly repairing consequences of
earlier assumptions, continuing produces locally responsive but globally
incoherent work.
At that point, protect coherence over momentum.
Stop extending the current implementation. Return to the first assumption that
is no longer trusted. Separate accepted decisions from speculative
consequences, reconstruct the relevant behavior from code and tests, and resume
from a smaller model that both sides can explain.
A reset is not a reaction to disagreement or failed tests. Those are normal.
Its purpose is to avoid accumulating implementation on top of a model that is
no longer understood or believed.
Keep The Collaboration Honest
The AI contributes breadth, speed, implementation capacity, and an independent
candidate model. The engineer contributes domain meaning, priorities,
production constraints, and judgment about unacceptable outcomes.
The collaboration is effective when both contributions remain active.
Excessive autonomy can spread a weak assumption quickly. Excessive steering can
reduce the AI to local compliance and destroy coherence.
The goal is neither maximal autonomy nor maximal control. It is a shared model
strong enough to support implementation and evidence strong enough to trust the
result.