| This document is for instructors/facilitators only. Do not distribute to participants. |
This document is for instructors/facilitators only. Do not distribute to participants.
Workshop Overview
| Item | Details |
|---|---|
Audience |
Fullstack engineers with 3–4 years of experience |
Structure |
8 sessions × 100 minutes (excluding breaks) |
Format |
Lecture + hands-on mixed |
Group size |
6–16 participants recommended |
Materials |
Printed Worksheets A/B, whiteboard, role cards (Session 3) |
Fixed Case Characters
The TeamOrder case characters are referenced throughout the entire workshop. Familiarize yourself with these personas in advance.
| Character | Role | Personality | Function in Workshop |
|---|---|---|---|
Minjun |
BizDev, 31 |
Non-technical, sharp field instincts |
Brings ambiguous requirements. Not acting in bad faith. |
Jiyeon |
Fullstack 3 yrs, 28 |
Confident building things fast |
Easy for participants to project themselves onto. Archetypal "solution addict." |
Seunghyun |
Fullstack 5 yrs, 32 |
Reflective, team senior |
Point-of-view character. Shows the progression of learning. |
Hyuntae |
Fullstack 1 yr, 26 |
Most junior, asks what others take for granted |
Appears from Session 4. Reveals different levels of understanding within a team. |
Facilitator tip: Do not criticize the characters. Jiyeon jumping straight to coding, Hyuntae being confused — these mirror where participants currently are. Maintain the frame of "not wrong — there was another way," not "that was incorrect."
Session Flow — Full Map
Session Topic Epistemological Nature ────────────────────────────────────────────────────────────────────────────── 1 Solution Addiction Awareness 2 The Anatomy of Ambiguity Vocabulary Acquisition 3 Whoever Asks Designs Skill Training 4 Before Drawing the Map Structure Recognition ─────────────────────────── ← Turning Point ─────────────────────────────── 5 Walking Through the Fog Paradigm Shift ─────────────────────────── ← Entering Solution Space ───────────────────── 6 I've Seen This Problem Before Pattern Connection 7 Where to Focus Your Energy Judgment Training 8 Seunghyun's Map Integration ──────────────────────────────────────────────────────────────────────────────
Session Continuity — Cumulative Structure
The core design principle of this workshop is accumulation.
-
The TeamOrder case begins with one sentence in Session 1 and runs identically through Session 8
-
Worksheet B deepens participants' real-work cases across all 8 sessions
-
Each session’s assignment feeds into the next session’s opening connection
-
Sessions are not independent. If a session is missed, the following session becomes difficult
Core Message — The Entire Workshop
The one thing participants should take from this workshop:
"Spending more time on the problem is how you build the solution faster."
When the Problem Space is explored more thoroughly: * What must essentially be achieved becomes clear * What can wait becomes visible * What does not need to be built is identified * → Build less and more precisely, and deliver earlier
1. Solution Addiction — The Habit of Skipping the Problem Space
1.1. Time Allocation
| Order | Content | Time |
|---|---|---|
0. Connection from previous session |
5 min |
|
1. Opening provocation — The 30-second experiment |
10 min |
|
2. Concept explanation (Einstellung, Presumptive Architecture, Problem/Solution Space) |
20 min |
|
3. Fixed case exercise — Worksheet A-1 |
30 min |
|
4. Real-work case slot — Worksheet B-1 |
20 min |
|
5. Debrief |
10 min |
|
6. Distribute Assignment Card #1 |
5 min |
|
Total |
100 min |
1.2. Session Facilitation Notes
-
★ Session 1 is an awareness session. Establish a "no right or wrong" atmosphere first.
-
★ When writing Solution Space items on the board after the "30-second experiment," do not criticize them. Let participants discover together "why is this in the Solution Space."
-
★ Make it clear that Presumptive Architecture is not bad. The difference between "using it knowing it’s an assumption" and "using it thinking it’s a fact."
-
★ For groups that generated few Problem Space questions, ask "why didn’t more come up?" The volume comparison itself is learning material.
1.3. 0. Connection from Previous Session (5 minutes)
Since this is Session 1, show the full workshop map.
What we will do across 8 sessions: "What should we do with that one sentence Minjun brought us?" — Start building right away? — Or is something else needed first?
1.4. 1. Opening Provocation (10 minutes) — "The 30-Second Experiment"
Without slides or preamble, distribute paper and say:
"Minjun just said this:
'Can you beef up the team collaboration features? Notifications and task assignment. Demo next month.'
In the next 30 seconds, write down everything that comes to mind."
After 30 seconds, ask a few people to read what they wrote.
Typical responses:
"Real-time notifications with WebSocket" "If we use Kafka for event processing" "Create a separate notifications table" "Firebase Cloud Messaging" "Add an assignee column for task assignment"
Write these on the board and say:
"Everything written here is in the Solution Space.
Is there even one thing from the Problem Space?"
Brief silence. This is the entire argument of this session.
1.5. 2. Concept Explanation (20 minutes)
Concept 1 — Einstellung Effect (10 minutes)
The phenomenon where familiar solutions block better ones. This effect grows stronger with more experience. Explicitly explain why engineers at 3–4 years are particularly at risk.
Concept 2 — Presumptive Architecture (5 minutes)
Every developer carries an unconscious architecture default. This itself is not bad. Emphasize the difference between "using it knowing it’s an assumption" and "using it thinking it’s fact."
Concept 3 — Problem Space vs Solution Space (5 minutes)
Both spaces must be visited. Key: the transition must be conscious. The problem is automatic switching.
1.6. Small Group Share Guide
Comparison Points ────────────────── "Same requirement — did Problem/Solution classification differ?" → That difference is itself an example of between-interpreter ambiguity. "Is Presumptive Architecture bad?" → No. Using it knowing it's an assumption is the key. "We didn't generate many Problem Space questions" → Why didn't more come up? What kinds of questions were blocked?
1.7. 5. Debrief Guide (10 minutes)
Anticipated resistance and responses
────────────────────────────────────
"Some of the classifications felt ambiguous"
→ Good. Those boundary cases are the topic of next session.
"Fewer Problem Space questions came up than I expected"
→ Why didn't more come up? What kinds of questions were blocked?
"I thought I knew it, but when I wrote it down I realized how much I don't know"
→ This is today's core experience.
"Is Presumptive Architecture bad?"
→ No. The difference between using it knowing it's an assumption
and using it thinking it's a fact.
2. The Anatomy of Ambiguity — A Language for Decomposing Requirements
2.1. Time Allocation
| Order | Content | Time |
|---|---|---|
0. Connection from previous session |
5 min |
|
1. Opening provocation — Translation experiment |
10 min |
|
2. Concept explanation (FAC triangle, sources of ambiguity) |
20 min |
|
3. Fixed case exercise — Worksheet A-2 |
30 min |
|
4. Real-work case slot — Worksheet B-2 |
20 min |
|
5. Debrief |
10 min |
|
6. Distribute Assignment Card #2 |
5 min |
|
Total |
100 min |
2.2. Session Facilitation Notes
-
★ In the "translation experiment," when different answers appear, ask "is there anything wrong here?" and wait briefly. The silence is the learning moment.
-
★ It is natural for the Attributes column to be empty. Emphasize that it only surfaces when you actively draw it out.
-
★ The Constraints column will be hardest. Guide participants that it means "finding unstated assumptions."
-
★ "The document is nothing; the documenting is everything" — point out that the whiteboard work itself is the team alignment process.
2.3. Session Walkthrough
2.4. 0. Connection from Previous Session (5 minutes)
Bring up the key from Session 1’s assignment on the board or slide.
Last session: "Am I understanding the problem, or recognizing a pattern?" Collecting Session 1 assignments: "From the requirement you received this week, how many Problem Space questions did you generate?" → 2–3 people share briefly This session: Being able to generate questions is good. But which questions are effective? You need to know where the ambiguity is to ask good questions.
2.5. 1. Opening Provocation (10 minutes)
"The Translation Experiment"
Put one sentence on the slide or board.
"Please make it easier for users to log in."
Ask participants:
"Write down specifically what this sentence means.
If you were turning this into a development task, what tasks would it create?
1 minute, work individually."
After 1 minute, ask 3–4 people to read their answers.
Typical responses:
A: "Add social login (Google, LinkedIn)" B: "Improve login form UI, reduce input fields" C: "Simplify the password recovery process" D: "Auto-login / Remember me feature" E: "Improve login error messages"
Write these side by side on the board and say:
"We read the same sentence, and five different tasks appeared.
Is any of these wrong?"
Brief silence.
"None of them are. All could be right, and all could be wrong.
Because no one yet knows which of these the original sentence means.
This is ambiguity."
2.6. 2. Concept Explanation (20 minutes)
2.6.1. Concept 1 — Three Sources of Ambiguity (8 minutes)
Weinberg explains that ambiguity in requirements comes from three different places.
① Linguistic Ambiguity When the word itself carries no measurement standard.
"Fast response" → How fast? 200ms? 2 seconds? "Easy to use" → For whom? In what situation? "Secure" → From what threats? To what level? "Better" → By what measure?
These words have a standard in the speaker’s mind. But that standard wasn’t transmitted.
② Between-Interpreter Ambiguity When different people picture different things from the same word.
"Enhanced notifications" BizDev imagined: Popup on client team lead's PC Backend developer: Email / Slack webhook Frontend developer: In-app badge, red dot User (team member): Can't we just get a text?
Talking in the same language, but describing entirely different things. Everyone has experienced what happens when development starts in this state.
③ Missing Context Ambiguity When there are unstated assumptions.
"It should work just like it does now" → Do you know how it works now? "Obviously that wouldn't be done" → What's obvious? "While keeping the existing approach" → What is the existing approach? "Build it quickly" → How quickly? What can be sacrificed?
These assumptions go unsaid by the speaker because they’re too obvious to them. But they’re unknowable to the listener.
2.6.2. Concept 2 — Functions / Attributes / Constraints Triangle (12 minutes)
Weinberg sees all requirements as actually composed of three different categories.
Functions
(what it does)
△
/ \
/ \
/ \
/ \
Attributes ─────── Constraints
(how it must do it) (what cannot be touched)
| Category | Definition | Typical expression | Common trap |
|---|---|---|---|
Functions |
Actions the system performs |
"Process a payment," "send a notification," "assign a task" |
Take note only of these and stop |
Attributes |
Quality criteria for those actions |
"Under 200ms," "99.9% availability," "on mobile too" |
These cause rework later |
Constraints |
Conditions the solution must respect |
"PCI-DSS compliance," "budget of $200K," "cannot change existing DB" |
Only discovered after design is done |
Why does this distinction matter?
If only Functions are heard: "Send a notification" → Think any method will do → Implement via email → Later: "it needs to be real-time" (an Attribute) surfaces → Rework
If Attributes are heard first: "In real-time, on all platforms, within 1 second" → Attributes determine Architecture → WebSocket considered from the start
If Constraints are discovered late: Design is complete → "Oh, by the way, the client’s network blocks WebSocket" → Full redesign
Conclusion: Attributes and Constraints only surface if you actively draw them out. Both BizDev and users naturally speak in Function language. Engineers must extract them through questions.
"The document is nothing; the documenting is everything" (Weinberg)
Deliver one of Weinberg’s most important insights briefly.
"The document is nothing; the documenting is everything."
The purpose of creating a requirements document is not to store the document. The purpose is for the team to arrive at the same mental model through the process of creating it.
The act of filling in the FAC triangle aligns the team’s understanding. The conversation matters more than the output.
2.7. 3. Fixed Case Exercise (30 minutes)
2.7.1. Small Group Share Guide
Small Group Share (8 minutes)
Groups of 3–4 compare PART 2 results.
Facilitator guide:
Comparison Points
──────────────────
"Is there a case where different things were written in the same column?"
→ That difference is itself an example of between-interpreter ambiguity.
"Did anyone classify an Attribute as a Function?"
→ Invite discussion about why they classified it that way.
"Is the Constraints column the most empty?"
→ It usually is. Constraints are the hardest to surface.
Ask "why didn't this one come to mind?" as a meta-question.
Full Group Share (7 minutes)
Collect each group’s "most dangerous gap" onto the board. If different groups chose different things — why is the core of the discussion.
2.8. 4. Real-Work Case Slot (20 minutes)
2.8.1. Debrief Guide
2.9. 5. Debrief (10 minutes)
Facilitator guide — anticipated resistance and responses
"The boundary between Attributes and Functions is confusing" ──────────────────────────────────────────────────────────── That is normal. The boundary genuinely shifts depending on context. "Real-time" can be an Attribute or a core Function depending on the situation. What matters is not the classification itself, but whether the team has the same understanding of that item. "The Constraints column is hard to fill in" ──────────────────────────────────────────── Constraints are the hardest to surface. The reason is that stakeholders don't say them because they're "obvious." Next session (Session 3) covers the questioning techniques for drawing these out. "Once FAC is all filled in, can we start development?" ──────────────────────────────────────────────────────── If all "?" become "confirmed," yes. But some "?" may stay even after asking. That's what Session 5 (living with ambiguity) covers. For now, the goal is simply knowing what you don't know. "Do we really have to do all this every time? It seems like it would take too long" ─────────────────────────────────────────────────────────────────────────────────── It takes time at first. But the goal is to use these tools naturally within conversation. The final goal is not "filling in a FAC table" — it's "automatically checking these three things in your head."
3. Whoever Asks Designs — Context-Free Questions
3.1. Time Allocation
| Order | Content | Time |
|---|---|---|
0. Connection from previous session |
5 min |
|
1. Opening provocation — Two types of questions |
10 min |
|
2. Concept explanation (Context-Free Q 3 categories, Black Box) |
20 min |
|
3. Fixed case exercise — Interview roleplay + Worksheet A-3 |
30 min |
|
4. Real-work case slot — Worksheet B-3 |
20 min |
|
5. Debrief |
10 min |
|
6. Distribute Assignment Card #3 |
5 min |
|
Total |
100 min |
3.2. Session Facilitation Notes
-
★ Show the Minjun role card only to the participant playing Minjun, before the interview roleplay. Asymmetric information is the key.
-
★ If unexpected information like "night shift" surfaces from a team that used a Meta-Question, bring it into the full group share. This experience demonstrates the effect of Meta-Questions.
-
★ If "this feels awkward" resistance arises: remind them that the goal is "getting this information naturally within normal conversation."
-
★ If a team found many edge cases in the Black Box, have them trace back which questions produced them.
3.3. Session Walkthrough
3.4. 0. Connection from Previous Session (5 minutes)
Last session: Requirements are made of Functions / Attributes / Constraints. And having more "?" than "confirmed" items is normal. Collecting Session 2 assignments: "When you tried to fill in the Attributes or Constraints columns, what questions got blocked?" → 2–3 people share briefly This session: How to generate questions that fill those blank columns. Are there good questions and bad questions? If so, what's the difference?
3.5. 1. Opening Provocation (10 minutes)
"Two Types of Questions Experiment"
Give participants a scenario.
You just heard this from BizDev:
"Please make the dashboard more intuitive."
>
You can now ask BizDev one question.
What question would you ask? Write it down. (1 minute)
After 1 minute, classify the questions that came in into two groups on the board. Don’t tell participants in advance — let them find the pattern as you classify.
Typical questions that come in:
Group A (narrowing questions) ───────────────────────────────────────────────────────── "Which menu should appear first?" "Should we change the chart colors?" "Should we improve loading speed?" "What layout change would work well?" Group B (opening questions) ───────────────────────────────────────────────────────── "What is most frustrating about the current dashboard?" "In what situations do you typically use the dashboard?" "If it were intuitive, what would it look like?" "Is there anything the current dashboard can't help you do?"
After classifying, say:
"Group A is already assuming a solution.
'Should we change the chart colors?' presupposes the problem is the chart colors.
Group B is still in the problem space.
>
Weinberg gave Group B a specific name:
Context-Free Questions — questions that don’t presuppose a context (solution)."
3.6. 2. Concept Explanation (20 minutes)
3.6.1. Concept 1 — Context-Free Questions (12 minutes)
A concept Weinberg presents in Exploring Requirements. Context-Free Questions are general-purpose questions applicable to any domain or product. Because they presuppose no specific solution, they allow exploration without narrowing the problem space.
They fall into three categories.
① Process Questions — How is it happening?
Questions to understand the current situation and flow.
"How are you currently handling this problem?" "Who is doing this task? How many people?" "When does this problem feel most acute?" "What happens if this isn't resolved?" "Is there a workaround you're using right now?"
The last question in particular — "What workaround are you using right now?" — is what Weinberg emphasizes as the most powerful. A workaround is a clue to the real need. People are already doing in action what they cannot express in words.
② Product Questions — What should it be?
Questions to understand expectations and boundaries for the system.
"What must this system absolutely do?" "What must it never do?" "What state would let you say 'this worked'?" "What single missing thing would be most valuable?" "Who judges whether this was successful?"
"What must it never do?" is particularly important. It rarely surfaces in requirements conversations, but it frequently becomes the Constraint that trips things up later.
③ Meta-Questions — Questions about the questioning
The category Weinberg often describes as the most powerful.
"Would you be okay with me asking you questions like this?" "Is there anything I might be missing?" "Can I check that I've understood correctly?" "Could you connect me with someone who knows more about this?" "Are any of my questions heading in the wrong direction?"
Why Meta-Questions are powerful: they give the other person permission to correct the direction of the conversation. When an engineer is operating under a wrong assumption, the other person can naturally correct it.
3.6.2. Concept 2 — Black Box Test (8 minutes)
If Context-Free Questions have been used to explore sufficiently, the next step is agreeing on the boundary of the system.
Weinberg describes this as the Black Box Test — agreeing first on only what is visible from the outside, before discussing how to implement the inside.
┌─────────────────────────────────────────────┐ │ │ │ Trigger ──→ [ Black Box ] ──→ Output │ │ │ │ ↕ Edge conditions │ │ │ └─────────────────────────────────────────────┘
Black Box Template:
| Item | Question | Notes |
|---|---|---|
Name |
What do you call this feature/system in one word? |
Agreeing on a name is the first alignment |
Trigger |
When does this feature start? |
What event activates it? |
Input |
What goes in? Who provides it? |
People, data, system events |
Output |
What must come out? To whom? |
User screen, data, external system |
Edge Cases |
Conditions where it fails or doesn’t work |
The part most often omitted |
Why the Black Box Test is useful: * Boundary can be agreed on without debating implementation * "What happens in this case?" edge case questions surface naturally from the boundary * Requirements can be confirmed in language both BizDev and users understand
3.6.3. Brief Connection — Jobs-to-be-Done (supplementary concept, 3 minutes)
Deliver Christensen’s perspective in one line.
"People don’t buy products. They 'hire' products to accomplish a Job."
"Please build a notification feature" is a feature request. "Please eliminate the situation where the team lead assigns but the team member doesn’t know" is a Job.
The same Job can be completed in multiple ways. It might not require notifications at all. Context-Free Questions are the tool for finding the Job behind a feature request.
3.7. 3. Fixed Case Exercise (30 minutes)
3.7.1. Small Group Share Guide
Small Group Share (5 minutes)
Groups that used the same role card compare their Black Boxes.
Facilitator guide:
Comparison Points
──────────────────
"Same interview subject — how different are the Black Boxes?"
→ The direction of the questions was different.
Trace backwards: which question led to which discovery?
"Which team found the most edge cases — what questions did they ask?"
→ Teams that asked "what should it never do?" and
"under what conditions does this fail?" find more edge cases.
"What happened in teams that used a Meta-Question?"
→ 'Is there anything I might have missed?' pulls out the most new information.
Bring this experience into the full group share.
3.8. 4. Real-Work Case Slot (20 minutes)
3.8.1. Worksheet B-3 | My Real-Work Case: Applying Context-Free Questions
┌─────────────────────────────────────────────────────────────┐ ==== Debrief Guide === 5. Debrief (10 minutes) _Facilitator guide — anticipated resistance and responses_
"Context-Free Questions feel too basic. Wouldn’t it be strange to ask these in real work?" ──────────────────────────────────────────────────────── True. The goal is not to recite these questions verbatim. The goal is to hold these categories in mind and get this information naturally within normal conversation. Just as Seunghyun didn’t say to Minjun "I’ll now ask you Process Questions."
"What if BizDev says they don’t know?" ──────────────────────────────────────── 'I don’t know' is also information. 'Who do you think would know?' is the next question. And if nobody knows — that itself is the topic of Session 5. It may be Essential Ambiguity.
"There are too many edge cases in the Black Box. We’re stuck." ────────────────────────────────────────────────────────────── That’s a good sign. Finding more edge cases means fewer surprises later. You don’t have to resolve all of them. 'We now know about this' is what matters.
"I’m not good at interviewing. It’s too awkward." ────────────────────────────────────────────────── Just remember one Meta-Question. 'Is there anything I might have missed?' That one question draws out the most.
''' ''' == Before Drawing the Map — Problem Structure and Domain Model === Time Allocation [cols="1,1,1", options="header"] |=== | Order | Content | Time | | 0. Connection from previous session | 5 min | | 1. Opening provocation — The headache analogy | 10 min | | 2. Concept explanation (3 layers, Problem Framing, Domain Model) | 20 min | | 3. Fixed case exercise — Worksheet A-4 | 30 min | | 4. Real-work case slot — Worksheet B-4 | 20 min | | 5. Debrief | 10 min | | 6. Distribute Assignment Card #4 | 5 min | | *Total* | *100 min* |=== === Session Facilitation Notes - ★ Don't give the answer in the layer classification exercise. The goal is the team agreeing on "which layer we're trying to fix." - ★ In the Domain Model sketch, State design varies the most. If different groups drew 'Assigned' and 'Acknowledged' differently, bring it into the full comparison. - ★ 'Do we always have to fix the root cause?' is an important question. Emphasize that it's a "conscious choice." It foreshadows Session 5's Spike and Session 7's Risk. - ★ Repeatedly point out that the Domain Model is a "team vocabulary alignment process," not a "document." === Session Walkthrough === 0. Connection from Previous Session (5 minutes)
Last session: Context-Free Questions filled the FAC blanks. Black Box agreed on the system’s boundaries.
Collecting Session 3 assignments: "What happened when you actually used a question?" → 2–3 people share briefly → Especially bring up any "unexpected discoveries"
This session: We asked enough. We listened enough. But — do we understand the right problem? Having asked doesn’t mean you’ve understood.
''' === 1. Opening Provocation (10 minutes) _"The Headache Analogy"_ Write briefly on slide or by speaking. [quote] ____ _Someone complains of a headache every morning._ ____ [quote] ____ _They go to a doctor who prescribes painkillers._ ____ [quote] ____ _The painkiller relieves the headache._ ____ [quote] ____ _But the next morning, the headache comes back._ ____ [quote] ____ _The headache is a symptom._ ____ [quote] ____ _The real cause turned out to be — chronic sleep deprivation and too much caffeine._ ____ [quote] ____ _The painkiller fixed the symptom, but not the problem._ ____ After a moment, ask: [quote] ____ "Has anything like this happened to you in software development? ____ [quote] ____ A time when you built what was asked, and a similar request came in again later." ____ Ask participants to raise their hands. Most will. [quote] ____ "That's because you fixed the symptom. ____ [quote] ____ This session covers — how to distinguish symptoms from problems from root causes, ____ [quote] ____ and how to know when you've understood a problem well enough." ____ ''' === 2. Concept Explanation (20 minutes) ==== Concept 1 — The Three Layers of a Problem (10 minutes) Every problem situation has three layers.
Surface │ ▼ ┌─────────────────────────────────────────────────┐ │ Symptom │ │ What’s observable. Where the pain is felt. │ │ "Users are churning" │ │ "Team members miss tasks" │ │ "Data is wrong" │ └─────────────────────────────────────────────────┘ │ Why? ▼ ┌─────────────────────────────────────────────────┐ │ Problem │ │ The direct cause of the symptom. │ │ "Onboarding is too long" │ │ "No notification after assignment" │ │ "No validation in the input screen" │ └─────────────────────────────────────────────────┘ │ Why? ▼ ┌─────────────────────────────────────────────────┐ │ Root Cause │ │ The deeper cause generating the problem. │ │ "No value demonstration for new users" │ │ "Assignment workflow happens outside system" │ │ "No owner for data entry" │ └─────────────────────────────────────────────────┘
Why does the distinction matter?
Fixing at symptom layer: Painkiller → Symptom temporarily disappears → Problem remains, symptom recurs
Fixing at problem layer: Add notification → This problem is solved → Root cause remains, other problems emerge
Fixing at root cause layer: Bring assignment workflow fully into system → Multiple symptoms disappear at once
But this doesn't mean you always have to dig to the root cause. _Which layer to address is a conscious choice_. It's okay to decide to fix the symptom layer for a demo next month — as long as you know that is the decision you're making. ''' _Problem Framing — How you frame it changes the solution_ How you frame the same phenomenon changes the shape of the Problem Space.
Phenomenon: "Team members miss tasks"
Frame A (seen as a notification problem): → Strengthen notification system → Technical solution emerges
Frame B (seen as a communication problem): → Redesign assignment process → Organizational/process solution emerges
Frame C (seen as a visibility problem): → Let team lead see team members' current tasks → Dashboard solution emerges
Frame D (seen as an accountability problem): → Assignment acknowledgement feature → Different kind of technical solution emerges
Which frame is "right" is not currently known. But _the most dangerous thing is having only one frame_. Recognizing that multiple frames are possible is the first practice. ''' ==== Concept 2 — Domain Model vs Design Model (Fairbanks) (10 minutes) Fairbanks distinguishes three models surrounding software.
Domain Model ←── Belongs to Problem Space │ │ (this is the Bridge) ▼ Design Model ←── Starting point of Solution Space │ ▼ Code Model ←── Actual implementation
_Domain Model — Real-world concepts_ The _real-world people, actions, rules, and states_ that this system deals with. Domain Model elements in the TeamOrder case:
People (Actors): Team lead / Team member / Client admin Actions: Task assignment / Task acknowledgement / Task completion / Urgent assignment States: Unassigned / Assigned / Acknowledged / In Progress / Done / Overdue Rules: Night shift urgents delivered immediately / Re-notify if unacknowledged / Deadline reminders Objects: Task / Team / Production line / Deadline
_Design Model — The structure of the software being built_ ERD, API design, system diagrams. From here, you're in the Solution Space. The mistake most engineers make:
Requirement received │ │ ← This is skipped ▼ Domain Model (understanding reality) │ │ ← This is also skipped ▼ Design Model (ERD, API) ← This is where they start
What happens when the Domain Model is skipped? The design diverges from the real-world concepts. During development, "how do we handle this case?" questions keep repeating. Most of those questions belong in the Domain Model layer. _The time to move to the Design Model is when the Domain Model has sufficiently stabilized._ How do you know? When the team is speaking the same domain vocabulary. When "task" and "to-do" aren't used interchangeably. When "Assigned" and "Acknowledged" are distinct. ''' === 3. Fixed Case Exercise (30 minutes) ==== Small Group Share Guide _Small Group Share (7 minutes)_ Pin or draw each group's Domain Model side by side on the board. Facilitator guide:
Comparison Points ────────────────── "How differently was State drawn across groups?" → State design varies the most. Teams that treated 'Assigned' and 'Acknowledged' as the same vs different. This difference will completely change DB design and API design later.
"How many Rules were found?" → Did any teams include the night shift urgent rule? Teams that didn’t — reflect on why it was left out.
"How different is the Domain Model from the current design (if any)?" → Large gaps are future rework points.
''' === 4. Real-Work Case Slot (20 minutes) ==== Worksheet B-4 | My Real-Work Case: Layer Analysis + Domain Model
3.8.2. Debrief Guide
3.9. 5. Debrief (10 minutes)
Facilitator guide — anticipated resistance and responses
"The symptom/problem/root cause boundary feels fuzzy." ──────────────────────────────────────────────────────── True. This boundary genuinely shifts with perspective. 'No notification after assignment' could be a symptom or a problem depending on who you ask. What matters is not "exact classification" — it's that the team collectively recognizes "which layer are we trying to fix." "Do we always need to draw a Domain Model? Even for a small feature?" ──────────────────────────────────────── You don't need to pull out the tool every time. The goal is not a 'Domain Model document' — it's that 'domain vocabulary is aligned within the team.' Naturally asking in Slack, "wait, 'Assigned' and 'Acknowledged' are different things, right?" — that is also Domain Model work. "Isn't it always better to fix the root cause?" ────────────────────────────────────────────────── True. This is also the topic of Sessions 5 and 7. With one month to demo, fixing the problem layer may be realistic. What matters — is knowing that it is a choice. "We are currently fixing the symptom. The root cause comes in Q2." — as a decision.
4. Walking Through the Fog — Living with Ambiguity
4.1. Time Allocation
| Order | Content | Time |
|---|---|---|
0. Connection from previous session |
5 min |
|
1. Opening provocation — Two kinds of not knowing |
10 min |
|
2. Concept explanation (R/E distinction, Cunningham, Spike, Schön) ★ 25 min for this session |
25 min |
|
3. Fixed case exercise — Worksheet A-5 |
30 min |
|
4. Real-work case slot — Worksheet B-5 |
15 min |
|
5. Debrief |
10 min |
|
6. Distribute Assignment Card #5 |
5 min |
|
Total |
100 min |
4.2. Session Facilitation Notes
-
★ This session inverts the premise of Sessions 1–4. Participants may feel uncomfortable. Acknowledge that the discomfort is normal.
-
★ Make the distinction between "just build it" and a Spike clear. A Spike begins knowing its purpose (learning) and its outcome (to be discarded).
-
★ Emphasize that misclassifying R/E is okay. Doing the Spike itself brings clarity.
-
★ Many participants misunderstand the original meaning of Technical Debt (Cunningham). Explain sufficiently that it is not "bad code" — it is an "intentional epistemological choice."
-
★ "Is this decision actually needed right now?" — point out that this judgment itself is a senior capability.
4.3. Session Walkthrough
| Session character | This session is the turning point that inverts the premise of Sessions 1–4. Allow sufficient time for concept explanation. |
|---|
4.4. 0. Connection from Previous Session (5 minutes)
The journey so far: Session 1: I was jumping to the Solution Space too quickly Session 2: Requirements are Functions / Attributes / Constraints Session 3: Context-Free Questions fill in the blank columns Session 4: Distinguish symptom/problem/root cause, draw the Domain Model Shared premise: "Ambiguity → resolved → through questions" This session cracks that premise. Collecting Session 4 assignments: "When you showed your Domain Model to your team, were there parts they understood differently?" → 2–3 people share briefly
4.5. 1. Opening Provocation (10 minutes)
"Two Kinds of Not Knowing Experiment"
Give participants two situations.
Situation A
The client’s BizDev says they don’t know "how fast the notifications need to go."
It seems like you could find out by asking the actual end users (team leads) at the client.
>
Situation B
The team doesn’t know "whether users will actually use this notification feature."
No one has used a feature like this before, and the client isn’t sure either.
Ask about both situations.
"Both situations involve 'not knowing.'
Can they be solved the same way?
Or do they need different approaches?
Decide in 30 seconds."
After 30 seconds, have participants raise their hands. They will split between "same approach" and "different approach."
"Why did you think they’re different? Why did you think they’re the same?"
This discussion is the starting point for today’s session.
"Situation A is an ambiguity you can resolve by asking.
Situation B is an ambiguity nobody knows yet.
Even if you ask, there is no answer.
>
Sessions 1–4 were tools for Situation A.
Today we deal with Situation B."
4.6. 2. Concept Explanation (25 minutes)
4.6.1. Concept 1 — Two Kinds of Ambiguity (10 minutes)
There are two fundamentally different kinds of ambiguity.
┌─────────────────────────────────────────────────────────┐ │ Resolvable Ambiguity │ │ │ │ • Someone knows the answer │ │ • Asking or researching will produce an answer │ │ • The tools from Sessions 1–4 apply │ │ │ │ Examples: "What is the response time requirement │ │ for notifications?" │ │ "Is there a night shift?" │ │ "What is the budget ceiling?" │ └─────────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────┐ │ Essential Ambiguity │ │ │ │ • Nobody knows yet │ │ • Asking yields no answer — reality hasn't │ │ been decided yet │ │ • You can only know by doing, by building, │ │ by putting it in front of users │ │ │ │ Examples: "Will users actually use this feature?" │ │ "Will this approach fit our team's │ │ workflow?" │ │ "What notification format works in │ │ this environment?" │ └─────────────────────────────────────────────────────────┘
Failing to distinguish these two leads to two mistakes.
Mistake 1 — Treating Essential Ambiguity as Resolvable: Keep asking questions that have no answer. Delay decisions. Spend time waiting for complete information. "We’ll know more if we research further."
Mistake 2 — Treating Resolvable Ambiguity as Essential: Simply assume something you could find out by asking. "That’s probably close enough." Rework later.
One diagnostic question:
"Is there an action I can take to learn this?"
>
If yes → Resolvable. Take that action.
If no (or still uncertain after acting) → Essential.
A Cunningham strategy is needed.
4.6.2. Concept 2 — Cunningham’s Approach: The Simplest Thing (10 minutes)
Ward Cunningham created several core ideas in software development. He invented the Wiki and designed key practices of XP (Extreme Programming).
One question Cunningham asked:
"What is the simplest thing that could possibly work?"
This question is frequently misunderstood. It does not mean "build the minimum feature."
The precise meaning:
"What is the smallest action that will reveal this ambiguity?"
Facing Essential Ambiguity, Cunningham’s strategy is — not to complete, but to learn. Through the smallest, fastest action, get feedback from reality. That feedback reduces the ambiguity.
Spike Solution (XP):
A Spike is throwaway code written to explore a specific ambiguity before writing production code.
Purpose: Does this technology meet this requirement?
Does this approach work in this environment?
Method: As simple, fast, and disposable as possible
Production quality not required
Outcome: Yes/No or new questions
Learning is the output, not the code
Example from the TeamOrder case:
"Does the user actually receive a background notification?"
→ Verifying by reading documentation vs
Actually sending it to a device with a test app
This question can be partially answered by reading docs. But "does it arrive on a tablet with the screen off at a factory at night?" can only be known by trying it. That is a Spike.
Technical Debt — The Original Meaning (Cunningham)
Many people don’t know the context in which Cunningham originally talked about Technical Debt.
He was not using it as a metaphor for bad code.
Cunningham’s original meaning:
"A more refined design is needed than what we currently understand,
but we can't achieve that right now.
We build intentionally simply,
and refactor as learning accumulates.
This gap is the 'debt.'"
The key: an intentional epistemological choice.
"Build without knowing now, fix when we do know" — that is taking on debt. It is not laziness. It is a mature strategy when facing Essential Ambiguity.
In contrast, building carelessly because of ignorance is not debt. That is just bad code.
4.6.3. Concept 3 — Reflection-in-Action (Schön) + Three Diagnostic Questions (5 minutes)
Philosopher Donald Schön studied expert practice and found something important.
Experts do not draw up a perfect plan before acting. They think while acting, and they understand problems more deeply through the results of their actions. He called this Reflection-in-Action.
Not the architect who completes the blueprints before touching a brick — but the potter who understands the structure by feeling the clay.
This is not immaturity. It is a mature epistemology for complex problems.
Three Diagnostic Questions — Integrated Summary:
Facing this ambiguity — what will I do?
Question 1: Is there an action I can take to learn this?
If yes → Resolvable → Weinberg strategy (questions, interviews)
Question 2: Still uncertain even after acting?
→ Essential → Cunningham strategy (Spike, minimum action)
Question 3: Is this decision actually needed right now?
If not → Deferring the decision is the strategy
(Fairbanks's "Just Enough" spirit)
4.7. 3. Fixed Case Exercise (30 minutes)
4.7.1. Small Group Share Guide
Small Group Share (5 minutes)
Facilitator guide:
Comparison Points
────────────────
"Did any teams classify the same ambiguity as R while another classified it as E?"
→ Why they saw it differently is the key.
Is there anything classified as E where action is actually possible?
Conversely, is there anything classified as R that nobody actually knows?
"What was most difficult when designing the Spike?"
→ Setting the standard for "the simplest."
Guide participants to repeatedly ask
"Can this be done even more simply?"
"Did anyone use the 'doesn't need to be decided now' column?"
→ This judgment itself is an important capability.
Breaking free from the compulsion to resolve all ambiguity immediately.
4.8. 4. Real-Work Case Slot (15 minutes)
4.8.1. Worksheet B-5 | My Real-Work Case: Reclassifying Ambiguity
4.8.2. Debrief Guide
4.9. 5. Debrief (10 minutes)
Facilitator guide — anticipated resistance and responses
"If there's Essential Ambiguity, do we just build something?
Isn't this just saying 'let's hack it together'?"
────────────────────────────────────────────────────────────
No. There is a key difference.
Just building: Build without recognizing the ambiguity
Spike: Recognize the ambiguity, and intentionally
build the minimum to explore it
A Spike has a purpose — learning. And you know it will be discarded.
Building without purpose is not a Spike.
"What happens if we misdiagnose Resolvable vs Essential?"
──────────────────────────────────────────────────────────
That's fine. Doing the Spike itself makes it clearer whether
something is Resolvable or Essential. The diagnosis doesn't
have to be perfect. Starting is more important.
"Is it a good thing to intentionally take on Technical Debt?"
──────────────────────────────────────────────────────────────
Not in every situation.
The key is — 'do you know you're taking it on?'
Debt taken on unknowingly and debt taken on knowingly are different.
If you know, you can plan when to repay it.
"Weinberg said to resolve ambiguity.
Cunningham says to carry it with you. Which is right?"
────────────────────────────────────────────────────────
Both are right. They're talking about different situations.
Weinberg: resolvable ambiguity → resolve it
Cunningham: irresolvable ambiguity → walk with it
The diagnostic ability learned today is the tool for making that judgment.
5. I’ve Seen This Problem Before — Analogical Reasoning
5.1. Time Allocation
| Order | Content | Time |
|---|---|---|
0. Connection from previous session |
5 min |
|
1. Opening provocation — Same problem, different domain |
10 min |
|
2. Concept explanation (Analogical Reasoning, Reduction, Business Research) |
20 min |
|
3. Fixed case exercise — Worksheet A-6 |
30 min |
|
4. Real-work case slot — Worksheet B-6 |
20 min |
|
5. Debrief |
10 min |
|
6. Distribute Assignment Card #6 |
5 min |
|
Total |
100 min |
5.2. Session Facilitation Notes
-
★ The essence of analogical reasoning is "importing the principle," not "copying the solution." Remind participants who confuse the two repeatedly.
-
★ When completely different domain analogies surface from the same problem — affirm both. More is learned from the differences.
-
★ In business research, emphasize that the goal is reading Trade-offs, not a feature list. Make participants ask "what did this service sacrifice?"
-
★ Point out that "the way experience accumulates" is this capability. It can be trained.
5.3. Session Walkthrough
5.4. 0. Connection from Previous Session (5 minutes)
The journey so far: Session 1: Recognizing the premature jump to Solution Space Session 2: Decomposing requirements with FAC Session 3: Exploring with Context-Free Questions Session 4: Symptom/problem/root cause, Domain Model Session 5: Resolvable vs Essential, Spike This session is the final layer of Problem Space exploration. After understanding the problem thoroughly — we now ask: "Has a problem of this kind already been solved somewhere in the world?" Collecting Session 5 assignments: "When you looked back for an experience where you had to just try something — was that ambiguity R or E?" → 2–3 people share briefly
5.5. 1. Opening Provocation (10 minutes)
"Same Problem, Different Domain Experiment"
Put two situations side by side on a slide.
Situation A Situation B ──────────────────────────────── ──────────────────────────────── Delivery app Social media feed When an order comes in, it must Too many followed accounts to be automatically assigned to the show all posts. nearest available courier. Which ones do you show first? Some couriers may already be busy.
Ask participants:
"Does anyone see these two problems as the same kind of problem?
In what way do you think they're similar?"
A moment later, give a hint.
"Both are about — how to allocate limited resources (couriers, screen space)
across multiple requests (orders, posts).
The domain is different, but the _structure_ is the same."
Continue:
"The TeamOrder notification priority problem has the same structure.
How to deliver multiple notifications
to limited attention (team members' attention).
>
Pólya asked this.
'Do you know a related problem?'
If someone has already solved a problem with a similar structure,
we can learn from their solution."
5.6. 2. Concept Explanation (20 minutes)
5.6.1. Concept 1 — Analogical Reasoning (10 minutes)
One of the things Pólya emphasized most in How to Solve It.
"Do you know a related problem?"
There is no need to treat a problem as if you’re seeing it for the first time. If the structure of this problem resembles a known problem in another domain, you can bring in the logic of that solution.
Three steps of analogical reasoning:
Step 1: Extract the structure What is the core structure of this problem? (Abstract the actors, actions, relationships, constraints) Step 2: Search for analogous problems Is there a problem in another domain that resembles this structure? Step 3: Import the principle Apply the solution principle of the analogous problem to this problem (the principle, not the solution itself)
TeamOrder case application example:
Step 1 — Extract the structure:
"Delivering messages to multiple recipients,
where recipients' states (online/offline/sleep) are uncertain,
and message urgency varies"
Step 2 — Search for analogous problems:
• Hospital ER triage — sequencing by patient urgency
• Air traffic control — priority communication among multiple aircraft
• Email spam filter — sorting by importance
• TCP retransmission — retry mechanism when packet not acknowledged
• Twitter notification batching — critical notifications immediately,
rest bundled
Step 3 — Import the principle:
TCP retransmission principle:
"Retransmit if no delivery confirmation received"
→ Re-notify if team member notification acknowledgement is absent
Triage principle:
"Use different channels based on urgency"
→ Night-shift urgents via separate channel (SMS/call),
regular via app push
An important caveat: This is not copying the solution. It is importing the principle. Not using TCP as-is, but bringing the logical structure of "retry if no acknowledgement."
5.6.2. Concept 2 — Reduction (5 minutes)
Reduction is mapping a complex problem onto a known problem type.
"What kind of problem is this, fundamentally?"
Commonly used problem-type vocabulary:
| Problem type | Core structure | Typical examples |
|---|---|---|
Matching problem |
Optimally connecting set A to set B |
Courier-order, job-seeker-hiring |
Trust problem |
Building trust between strangers |
Used goods marketplace, accommodation sharing |
Cold Start problem |
Recommendations with no initial data |
New user, new product |
Visibility problem |
One side doesn’t know the other’s state |
Team task status, logistics location |
Rate Control problem |
Requests exceed processing capacity |
API throttling, notification fatigue |
Consistency problem |
Data diverges across multiple locations |
Distributed systems, multi-device |
TeamOrder case: A combination of Visibility problem + Rate Control problem
The team lead doesn’t know whether team members have seen their assignments (Visibility), and too many notifications get ignored (Rate Control).
Knowing these two problem types means — there are validated solution patterns for each type.
5.6.3. Concept 3 — Business Research: Reading Trade-offs (5 minutes)
When researching competing or similar services, simply listing features isn’t very useful.
From Cunningham’s perspective — other services already have the results of exploring Essential Ambiguity through action embedded in their products.
What you should read is the Trade-offs they chose.
Business research question frame: "What did this service prioritize above all else?" "What did it sacrifice?" "Why did they choose this approach?" "What type of user/environment is it optimized for?" "In what situations does this design fail?"
Example: Slack’s notification design * Top priority: Message delivery reliability + notification customization * What was sacrificed: Simplicity (settings are too complex) * Optimized environment: Desktop-centric knowledge workers * Where it fails: Field workers, users who don’t configure notifications
TeamOrder’s users are field workers. This is where you can see why Slack’s design doesn’t work for them.
5.7. 3. Fixed Case Exercise (30 minutes)
5.7.1. Small Group Share Guide
Small Group Share (10 minutes)
Facilitator guide:
Comparison Points
────────────────
"Did different teams find analogies from entirely different domains?"
→ The same problem can generate analogies from completely different domains.
If one team found hospital triage and another found TCP retransmission,
both are correct. And the principles extracted from each will differ.
List those differences on the board.
"Where did things get stuck when importing the principle?"
→ Check: "Were they trying to copy the solution or import the principle?"
The former usually ends with "it doesn't fit our situation."
"How did reading Trade-offs in business research
differ from a simple feature comparison?"
→ Surface this question to help participants articulate
the difference in research perspective.
5.8. 4. Real-Work Case Slot (20 minutes)
5.8.1. Worksheet B-6 | My Real-Work Case: Applying Analogical Reasoning
5.8.2. Debrief Guide
5.9. 5. Debrief (10 minutes)
Facilitator guide — anticipated resistance and responses
"Finding analogies feels like it would take too long." ──────────────────────────────────────────────────── It does at first. But this is training. After doing it a few times, you'll start to hear a problem and automatically think "I've seen this structure somewhere." That moment is one of the shifts from 3–4 years of experience to 5–6 years. "Can't analogies be wrong?" ──────────────────────────────────────────────────── Yes. Analogical reasoning can be wrong. But discovering that "it was wrong" is also learning. Finding that "unlike TCP, our problem can't force acknowledgement" can lead to a deeper understanding of the problem itself. "Can't you only use analogies from domains you already know? How do you find them from unfamiliar domains?" ──────────────────────────────────────────────────────────── Two approaches. First, search using problem-type vocabulary. Terms like "Visibility problem solution" and "notification fatigue pattern" as search queries. Second, people with different experiences within a team can surface different analogies. This is why teams with diverse backgrounds have an advantage.
6. Where to Focus Your Energy — Risk-Driven Design
6.1. Time Allocation
| Order | Content | Time |
|---|---|---|
0. Connection from previous session |
5 min |
|
1. Opening provocation — Two teams' story |
10 min |
|
2. Concept explanation (Quality Attributes, Risk-Driven 3-step, Cunningham connection) |
22 min |
|
3. Fixed case exercise — Worksheet A-7 |
30 min |
|
4. Real-work case slot — Worksheet B-7 |
20 min |
|
5. Debrief + simplification flywheel |
10 min |
|
6. Distribute Assignment Card #7 |
3 min |
|
Total |
100 min |
6.2. Session Facilitation Notes
-
★ This session is most important for participants who feel the strongest pressure to "design everything perfectly."
-
★ Confusion between Engineering Risk and PM Risk comes up frequently. Make it clear that "the timeline is tight" is a PM Risk.
-
★ Some participants will find it difficult to fill in the PART 4 "doesn’t need to be done now" column. Emphasize that it means "planning when to revisit" — not "never doing it."
-
★ Make sure to cover the "design simplification flywheel" at the end. This is the bridge to Session 8.
6.3. Session Walkthrough
6.4. 0. Connection from Previous Session (5 minutes)
The journey so far: Sessions 1–4: Tools for deep exploration of Problem Space Session 5: Two types of ambiguity and Spike Session 6: Finding already-solved structures through analogical reasoning We're now entering the Solution Space in earnest. If Sessions 1–6 were about understanding "what to build," Sessions 7–8 are about "how to build it." But — how much effort should we put into "how"? Do we need to design everything perfectly? Collecting Session 6 assignments: "When you applied a principle imported from an analogous case to your own case — what changed?" → 2–3 people share briefly
6.5. 1. Opening Provocation (10 minutes)
"Two Teams' Story"
Present briefly on slide or verbally.
Team A
Starting a new feature, they spent 3 weeks writing architecture documents.
They drew every component, every API, every data flow.
When development started, two major assumptions were already wrong.
Team B
Starting a new feature, they said "let’s just build it" and started coding immediately.
3 weeks later — performance issues hit.
The architecture had to be completely reworked.
Ask participants:
"Which team got it right?"
A moment later:
"Both were wrong.
Team A over-designed,
Team B under-designed.
>
Fairbanks asked about the middle path between these two extremes.
'How much should you design?'
>
His answer — in proportion to the risk."
6.6. 2. Concept Explanation (22 minutes)
6.6.1. Concept 1 — Quality Attributes vs Functionality (7 minutes)
The key distinction must be pinned down precisely first.
Functionality
─────────────
"What the system does"
Examples: Sends a notification, assigns a task, shows a list
→ Can be accumulated sprint by sprint
→ Relatively easy to add later
Quality Attributes (the "-ilities")
────────────────────────────────────
"How well the system does it"
Examples: Performance, Availability, Security,
Scalability, Modifiability
→ Secured through architectural decisions
→ Very expensive to change later
→ Unlike functionality, they trade off against each other
Why this distinction matters:
Cost of adding functionality later: Linear Cost of adding a Quality Attribute later: Exponential
Adding Consistency later could require changing the DB schema, API structure, and cache strategy entirely. If considered from the start, a single design decision might have been enough.
Quality Attributes in the TeamOrder case:
| Quality Attribute | Meaning in TeamOrder | Risk if neglected |
|---|---|---|
Reliability |
Night-shift urgent notifications must definitely arrive |
Line stoppage |
Performance |
Notification delivery delay must be within acceptable range |
Team member is slow to respond |
Modifiability |
Notification channels must be addable later |
Full rework when adding email/SMS |
Usability |
Must be easy to confirm in the field |
Notification received but no action taken |
Weinberg’s Attributes (Session 2) reappear here. Attributes not surfaced in Session 2 become design risks in Session 7.
6.6.2. Concept 2 — Risk-Driven Model (Fairbanks) (10 minutes)
Fairbanks’s central question:
"How much software architecture should you do?"
His answer: In proportion to the risk.
Risk-Driven Model — 3-step loop ┌─────────────────────────────────────────────────┐ │ │ │ 1. Identify failure risks │ │ "If this fails, does the project die?" │ │ │ │ ↓ │ │ │ │ 2. Choose techniques matched to the risk │ │ Engineering risk → only Engineering │ │ techniques are effective │ │ │ │ ↓ │ │ │ │ 3. Stop when risk is sufficiently reduced │ │ "Just Enough" — design is a means, │ │ not an end in itself │ │ │ └─────────────────────────────────────────────────┘
Engineering Risk vs Project Management Risk
This distinction is the most practical part for engineers at 3–4 years of experience.
Engineering Risk Project Management Risk ───────────────────────────────── ─────────────────────────────────── Problems of system analysis/ Problems of schedule, team size, design/implementation and priorities "Performance won't meet "We probably can't finish in 3 weeks" requirements" "Can't guarantee data "The team doesn't know this consistency" technology" "There's a security "Requirements keep changing" vulnerability" → Resolved with Engineering → Resolved with PM techniques techniques (schedule adjustment, training, (prototype, load testing, process improvement, etc.) threat modeling, etc.)
When risk type ≠ technique type, the technique is ineffective:
Drawing class diagrams for a performance risk is ineffective. Performance risks require techniques like load testing or queuing analysis. Drawing architecture diagrams for a schedule risk is also ineffective.
Practical risk identification checklist:
If any of the following are "YES," treat as an Engineering Risk □ Does this system have demanding response time requirements? □ Is data consistency critical to this system? □ Does it handle security-sensitive data? □ Is there a possibility of sudden traffic growth? □ Do multiple teams touch the same component? □ Does a failure in one component cascade to full system failure? □ Are significant feature additions/changes expected later? □ Is integration with external systems/services complex?
6.6.3. Concept 3 — Connection to Cunningham (5 minutes)
Point out where the Risk-Driven Model and Session 5’s Cunningham meet.
Fairbanks’s "stop when risk is reduced" shares the same spirit as Cunningham’s "What is the simplest thing that could possibly work?"
Low-risk areas: Elaborate design is actually wasteful → Cunningham: Simplest Thing → Fairbanks: Stop designing High-risk areas: Insufficient design is the cause of failure → Fairbanks: Choose techniques matched to risk → Cunningham: Explore quickly with Spike
Conclusion: "How much to design" is judged not by "how complete do we want it" but by "where are the failure risks."
6.7. 3. Fixed Case Exercise (30 minutes)
6.7.1. Small Group Share Guide
Small Group Share (8 minutes)
Facilitator guide:
Comparison Points
────────────────
"Do teams have different top 3 risks?"
→ Same system, different risk priorities —
what contextual difference drove that judgment?
It may be the difference between demo perspective
vs live service perspective.
"Are there cases where PM Risk and Engineering Risk were confused?"
→ Most commonly mixed:
"I don't think we can build this in a month" → PM Risk
"I don't think we can guarantee night-shift notification delivery" → Engineering Risk
Point out that the techniques for addressing these two are completely different.
"Was the PART 4 decision — 'doesn't need to be done now' — difficult to make?"
→ If difficult — why?
How do they reconcile with the pressure to "design everything perfectly"?
This is the core shift in perception this session aims for.
6.8. 4. Real-Work Case Slot (20 minutes)
6.8.1. Worksheet B-7 | My Real-Work Case: Risk Identification + Design Energy Allocation
6.8.2. Debrief Guide
6.9. 5. Debrief (10 minutes)
Facilitator guide — anticipated resistance and responses
"You can't know all the risks in advance." ──────────────────────────────────────────── True. You can't know them completely. But keep two things in mind. First, focusing on the risks you can know is where to start. Risks you can't know are discovered and addressed during operation. Second, Session 6's analogical reasoning helps here. Systems with similar structures tend to produce familiar risks — "Prototypical Risks." Knowing recurring risk patterns from the same type of problem reduces blind spots. "How do you define Quality Attributes numerically?" ────────────────────────────────────────────────────── We come back to Session 2's Attributes. Quantifying "response time" as a Quality Attribute as "95th percentile under 200ms" is exactly what Session 3's Context-Free Questions extracted. An Attribute without a number cannot be verified. "Won't things we skip now become harder later?" ────────────────────────────────────────────────── They might. That's why PART 4 asks "when will we revisit this." "Not doing it now" is not "never doing it." Monitor for when the risk grows, and re-invest at that point.
The Design Simplification Flywheel
One more key outcome of the Risk-Driven approach to cover before closing. The clearer it becomes what "doesn't need to be done now," the more you can focus on "what must be done now." Focus enables → completing that faster. Completing faster enables → delivering to users sooner. Delivering sooner enables → receiving real feedback sooner. Having feedback enables → knowing more precisely what to build next. Problem Space exploration and Risk-Driven design may seem like they slow things down, but they actually make this flywheel possible. Of course, deferred things eventually come back. But by then — the core is already in users' hands. And extending a validated core is far safer than building everything from scratch without validation.
7. Seunghyun’s Map — Validating and Integrating the Solution
7.1. Time Allocation
| Order | Content | Time |
|---|---|---|
0. Connection from previous session — 8-session journey summary |
5 min |
|
1. Opening provocation — Two teams' demo |
10 min |
|
2. Concept explanation (Problem-Solution Fit, Pre-mortem) |
15 min |
|
3. Fixed case exercise — Worksheet A-8 |
30 min |
|
4. Real-work case final presentation — Worksheet B-8 |
25 min |
|
5. Debrief — full workshop convergence |
10 min |
|
6. Distribute final card |
5 min |
|
Total |
100 min |
7.2. Session Facilitation Notes
-
★ This is the final session. Focus on integration and reflection more than tool usage.
-
★ In PART 3 "comparing Session 1 and now," be sure to call on someone who checked "things I no longer need to build appeared." This is the core conclusion of the entire workshop.
-
★ Ask questions that connect Pre-mortem failure reasons to the Session 1–7 tools. "Which session’s tool could have caught this failure reason?"
-
★ Don’t force the real-work case presentations. Keep it voluntary, but give presenters adequate feedback time.
-
★ After distributing the final card, give a brief moment of silence. Let participants feel the resonance of Session 8.
7.3. Session Walkthrough
7.4. 0. Connection from Previous Session (5 minutes)
Summary of the 8-session journey: Problem Space exploration tools Session 1: Recognizing premature jumps to Solution Space Session 2: Decomposing requirements with FAC Session 3: Context-Free Questions + Black Box Session 4: Symptom/problem/root cause, Domain Model Handling ambiguity Session 5: Resolvable vs Essential, Spike Solution Space exploration tools Session 6: Analogical reasoning + business research Session 7: Risk-Driven design energy allocation This session: With everything learned in Sessions 1–8 → validate the solution And reflect — "What did understanding the problem deeply actually change?" Collecting Session 7 assignments: "When you applied a technique to your most important risk — what came out?" → 2–3 people share briefly
7.5. 1. Opening Provocation (10 minutes)
"Two Teams' Demo"
Team A
They built quickly for one month.
Notification feature, task assignment, dashboard, report feature.
At the demo, the client team lead said:
"This… doesn’t seem like what we wanted."
Team B
They built just three things in one month.
Task assignment notification, acknowledgement confirmation, night-shift urgent channel.
At the demo, the client team lead said:
"We could start using this right away."
Ask participants:
"Was Team B building only three things laziness,
or good judgment?"
A moment later:
"Team B understood the problem deeply enough
to know that three things was everything.
Team A built a lot because they didn't understand the problem —
they didn't know what was needed.
>
This is the core of today’s session.
When you truly understand the problem, the solution actually becomes simpler.
What to build becomes clear,
and what doesn’t need to be built becomes visible.
And that simpler thing can be delivered first."
7.6. 2. Concept Explanation (15 minutes)
7.6.1. Concept 1 — Problem-Solution Fit (7 minutes)
What must be continuously checked before building the solution — and while building it:
Is the problem I’ve defined actually connected to the solution I’ve built?
Problem-Solution Fit check: ┌──────────────────────────────────────────────────┐ │ Problem definition (Problem Space exploration │ │ results) │ │ │ │ - Who is suffering? │ │ - In what situation? │ │ - What workaround are they using now? │ │ - What cost occurs if this isn't resolved? │ │ │ │ ↕ Does this correspond? │ │ │ │ Solution (Solution Space exploration results) │ │ │ │ - Whose pain does this feature alleviate? │ │ - In what situation does it work? │ │ - Does it replace the workaround? │ │ - What remains unresolved? │ └──────────────────────────────────────────────────┘
The most common mismatch:
Problem: "Team members miss tasks and the line stops" Solution: "Nice notification UI + read receipts + notification history page" → Do read receipts and a history page prevent line stoppages? The core of the problem (guaranteed delivery) is missing.
Three practical questions for the Fit check:
-
"If this feature didn’t exist, what would users do?" → If the workaround would remain intact, Fit hasn’t been achieved.
-
"Could the problem still occur even with this feature?" → If yes, the core has been missed.
-
"Is there anything not built that is needed to solve this problem?" → If there is, decide: does it need to happen now, or can it wait?
7.6.2. Concept 2 — Pre-mortem: Reverse Simulation (8 minutes)
A technique proposed by Gary Klein.
Normal review: "Why will this solution succeed?" Pre-mortem: "Assume this solution was adopted and failed 6 months later — what were the reasons?"
Why reverse is more effective:
Normal review Pre-mortem ─────────────────────────── ─────────────────────────────── Success bias develops Imagining failure reduces bias "It'll work out" "If it failed, why?" Hard to find weaknesses Weaknesses surface naturally Psychologically hard to Hypothetical failure creates criticize in team setting psychological safety
How to run a Pre-mortem:
1. "Assume this solution was actually deployed." 2. "Six months have passed." 3. "It failed. For what reasons?" 4. Each person writes 3+ reasons individually (2 minutes) 5. Small group share → extract top 3 most-cited failure reasons 6. Can those reasons be addressed preemptively?
TeamOrder case Pre-mortem examples:
"Reasons TeamOrder's notification feature failed after 6 months" • Night-shift urgent SMS costs ran higher than expected — feature was turned off • Team members were receiving too many notifications and started turning them off • Background notification policy changed after an iOS update • Team leads didn't know what to do with team members who hadn't confirmed, so they stopped using it • The factory's firewall was blocking FCM (discovered later)
What can be addressed preemptively now: * SMS costs → Set a monthly cap; let users set urgent flags themselves * Notification fatigue → Rate Control logic (analogical reasoning from Session 6) * Firewall → Confirm client network requirements as a Constraint (Session 2 FAC)
7.7. 3. Fixed Case Exercise (30 minutes)
7.7.1. Small Group Share Guide
Small Group Share (8 minutes)
Facilitator guide:
Core comparison points for this session
────────────────────────────────────────
"Did anyone check 'things I no longer need to build appeared' in PART 3?"
→ This is the core conclusion of this session, and the entire workshop.
Ask them:
"What disappeared? How did you come to know it was okay for it to disappear?"
"Did the solution become simpler?"
→ For teams where it did: which session produced that simplification?
(Session 2 FAC? Session 4 layer choice? Session 5 Spike? Session 7 Risk?)
"Among the Pre-mortem failure reasons,
are there any that could have been caught with Session 2–4 tools?"
→ When this connection is visible, the entire workshop's learning
has been integrated.
7.8. 4. Real-Work Case Slot — Final Integration (25 minutes)
Session 8’s real-work case slot is different from usual. Instead of individual worksheet work, this is time for an integrated presentation of what participants applied to their real-work cases across Sessions 1–8.
7.8.1. Worksheet B-8 | My Real-Work Case: Final Integration Presentation
7.8.2. Debrief Guide
7.9. 5. Debrief (10 minutes)
Anticipated difficulties and responses
"I felt anxious that we were building too few features"
→ This is the core moment of learning. Use the TeamOrder outcome
to directly show why "exactly what's needed" is a compliment.
"Worksheet B doesn't feel complete"
→ Completion is not the goal. What's sufficient is the trace
showing how problem understanding deepened across 8 sessions.
"I'm not sure I can actually use the tools"
→ Have them remember just one thing.
When you receive a requirement → pause just once → ask a question.
The rest attaches naturally through experience.
Facilitator guide — core convergence of this session
Converge to a single message that runs through all 8 sessions. "When you truly understand the problem, the solution actually becomes simpler." This is the conclusion of the entire workshop. Do you remember what you came up with in 30 seconds in Session 1? If the solution then and the solution now are different, ask where that difference came from. It might be that identifying Attributes in Session 2's FAC meant you didn't need to build unnecessary features. It might be that deciding "fix the problem, not the symptom" in Session 4's layer choice narrowed the scope. It might be that resolving technical uncertainty through Session 5's Spike meant you didn't spend two weeks going in the wrong direction. It might be that knowing "this doesn't need to be done now" from Session 7's risk identification enabled focus for the demo. All of this is the result of Problem Space exploration. Because we spent more time understanding, we could build less, more precisely, and deliver sooner.
7.10. 6. Workshop Closing (5 minutes)
Assignment Card #8 — This time, there is no assignment
┌──────────────────────────────────────────────────┐ │ Final Card │ │ │ │ There is no assignment. │ │ │ │ Instead, take this one thing with you. │ │ │ │ The next time you receive a requirement, │ │ before moving to the Solution Space, │ │ pause just once and ask: │ │ │ │ "What do I know right now? │ │ And what do I not yet know?" │ │ │ │ That question is this entire workshop. │ └──────────────────────────────────────────────────┘
8. Operational Tips — Overall
8.1. Establishing Psychological Safety
The opening provocations in this workshop ask participants to reflect on their existing habits. If an atmosphere of criticism or "you were wrong" develops, learning closes down. Maintain the frame: "The choice wasn’t wrong — there was another way."
8.2. When Participants Get Stuck
The most common points where participants get stuck on worksheets:
| Stuck point | Facilitator intervention |
|---|---|
Attributes column is empty in FAC |
Ask "Why would it matter to know this?" |
State isn’t surfacing in the Domain Model |
Prompt "List all the states this concept can be in" |
R/E classification is difficult |
Ask "Is there an action you can take right now to find out?" |
No analogies come to mind |
First have them "abstract this problem’s structure in one sentence" |
Too many risks are surfacing |
Narrow with "Which of these could kill the project?" |
8.3. Managing Worksheet B
Worksheet B carries the same case through all 8 sessions. Remind participants to "take out your Worksheet B" at the start of each session. Participants who didn’t register a case in Session 1 can register in Session 2.
8.4. Assignment Card Connections
Each session opens with 5 minutes where 2–3 people briefly share results from the previous session’s assignment. Keep it voluntary rather than forced, but make sure to surface interesting cases when they appear. This sharing is what creates the workshop’s sense of being grounded in real work.