grilling
Interview the user relentlessly until you reach a shared understanding. Map this as a design tree: every decision branches into the decisions that hang off it.
Work the tree in rounds. The frontier is every decision whose prerequisites are already settled: the questions you can ask now without guessing at answers you haven't heard yet.
Altitude
Altitude filters the frontier. A question reaches the user only if it clears the bar:
- The goal always clears it. What the user is trying to achieve, who it serves, what counts as done, what is in and out of scope.
- A technical question clears it only when it is a one-way door: the fix is expensive once you are wrong. Where a seam sits, and how deep the module behind it is.
- Every two-way door is yours. Where the code sits, what a function takes, which helper to reuse: cheap to reverse, so settle it and move on. Judge each question on its own.
Invoke /codebase-design when a technical question clears the bar, and put the question in its language. Its principles also settle the two-way doors you take yourself.
Invoke /domain-modeling when the user reaches for a fuzzy or contested word. The wrong name for the core thing is a one-way door.
Rounds
Ask the whole cleared frontier in one round: number each question and give your recommended answer. Close the round with the two-way doors you settled yourself, so the user can object without having to answer. Then wait for the user's answers before the next round.