--- id: wiki-2026-0508-solution title: Solution category: 10_Wiki/Topics status: verified canonical_id: self aliases: [Solutioning, Solution Design, Problem-Solution Mapping] duplicate_of: none source_trust_level: A confidence_score: 0.9 verification_status: applied tags: [methodology, design-thinking, problem-solving, solutioning] raw_sources: [] last_reinforced: 2026-05-10 github_commit: pending tech_stack: language: methodology framework: design-thinking --- # Solution ## 매 한 줄 > **"매 solution 의 problem 의 inverse 의 X — 매 fit 의 search"**. 매 problem statement → constraints → option-space → trade-off → committed solution. 매 design thinking + engineering rigor 의 fusion. 매 2026 modern PRD/RFC stack 매 LLM-aided option exploration 의 기본. ## 매 핵심 ### 매 problem-vs-solution 의 분리 - **Problem**: 매 user pain, business gap, technical debt. 매 solution-agnostic description. - **Solution**: 매 specific approach 의 implement. 매 multiple options 의 enumerate. - **Anti-pattern**: 매 "we need X" framing — 매 solution 의 jumped-to. 매 problem 의 first articulate. ### 매 5-step canonical flow 1. **Articulate**: 매 problem 의 1-sentence + 매 measurable success criterion. 2. **Constrain**: 매 budget, deadline, team, tech-stack, risk tolerance. 3. **Enumerate**: 매 3+ options. 매 do-nothing baseline 의 always include. 4. **Trade-off**: 매 each option 의 cost/risk/value 의 score. 5. **Commit + reverse-doc**: 매 chosen option 의 RFC/ADR write. 매 rejected options 의 reason 도 기록. ### 매 응용 1. Tech RFC / ADR. 2. Product PRD. 3. Customer-discovery loop. 4. LLM-aided option generation. ## 💻 패턴 ### ADR template (Markdown) ```markdown # ADR-042: Switch to event-driven order pipeline ## Status Accepted (2026-04-12) ## Context Sync API call chain causes 2.3s p95 latency under peak load (12k rps). Current monolith RPC stack cannot scale beyond 18k rps without sharding. ## Decision Adopt Kafka-based event pipeline for order lifecycle (created → paid → shipped). ## Consequences + p95 drops to 400ms (validated in load test). + Decoupled services enable independent deploys. - Operational complexity: Kafka cluster, schema registry, DLQ. - 6-week migration with dual-write phase. ## Alternatives considered 1. Sharded monolith — rejected: 4mo migration, no future-proof. 2. gRPC streaming — rejected: still tightly coupled. 3. Do nothing — rejected: SLO breach by Q3. ``` ### Option matrix scoring ```python # option_matrix.py from dataclasses import dataclass @dataclass class Option: name: str value: int # 1-5 (impact) cost: int # 1-5 (effort) risk: int # 1-5 (uncertainty) @property def score(self) -> float: # Weighted: value heavy, risk penalizing return (self.value * 2.0) - (self.cost * 0.8) - (self.risk * 1.2) options = [ Option("event-pipeline", value=5, cost=4, risk=3), Option("sharded-monolith", value=3, cost=4, risk=2), Option("do-nothing", value=0, cost=0, risk=5), ] ranked = sorted(options, key=lambda o: o.score, reverse=True) for o in ranked: print(f"{o.name}: {o.score:.2f}") ``` ### Problem-statement template ```markdown **Who**: Mid-market SaaS ops engineers (50-500 employee orgs). **What**: Cannot debug Kafka consumer lag without SSH-ing into broker. **Why-now**: Compliance requires audit trail + zero-trust env (no SSH). **Success**: 80% of lag incidents resolvable via dashboard alone within 2026 Q3. **Non-goal**: Replacing existing Kafka cluster. ``` ### LLM-aided option enumeration ```python # enumerate_options.py from anthropic import Anthropic client = Anthropic() def enumerate(problem: str, constraints: list[str]) -> list[dict]: msg = client.messages.create( model="claude-opus-4-7", max_tokens=2000, messages=[{ "role": "user", "content": f"""Problem: {problem} Constraints: {chr(10).join(f'- {c}' for c in constraints)} Generate 4 distinct solution options. Include 1 'do-nothing' baseline and 1 'wildcard' creative option. For each: name, summary, est_cost (1-5), est_risk (1-5).""" }] ) return parse_options(msg.content[0].text) ``` ### Trade-off heuristic gate ```python def should_pursue(option) -> bool: if option.risk >= 5: return False # too uncertain, prototype first if option.cost > option.value: return False # net-negative return option.score > 0 ``` ### Reverse-doc rejected options ```markdown ## Rejected: GraphQL federation **Why considered**: Frontend wants typed schema, backend wants composability. **Why rejected**: Federation gateway adds 80ms median latency. Team has 0 GraphQL prod experience. 4mo onboarding curve. **Revisit when**: Latency budget grows OR team gains GraphQL expert. ``` ## 매 결정 기준 | 상황 | Approach | |---|---| | Vague stakeholder ask | 매 problem statement 5W 의 force | | 2+ viable options | 매 ADR + matrix scoring | | Reversible decision | 매 ship-and-iterate (Type 2) | | Irreversible decision | 매 deep RFC + review (Type 1) | | Unknown unknowns | 매 spike/prototype 의 first | **기본값**: ADR + 3+ option enumeration + reverse-doc. ## 🔗 Graph - 부모: [[Design Thinking]] - 변형: [[RFC-Process]] · [[ADR]] ## 🤖 LLM 활용 **언제**: 매 option enumeration brainstorm, 매 ADR draft, 매 problem-statement refinement, 매 reverse-doc generation. **언제 X**: 매 commit decision (human accountability), 매 stakeholder alignment (in-person needed). ## ❌ 안티패턴 - **Solution-first**: 매 "we need Kafka" 매 problem 의 articulate 없이. - **Single option**: 매 alternatives 0개. 매 confirmation bias. - **No baseline**: 매 do-nothing option 의 omit. 매 cost 의 hidden. - **No reverse-doc**: 매 rejected options 의 oral history. 매 future-team 의 repeat. - **Solution worship**: 매 framework 의 fetishize over outcomes. ## 🧪 검증 / 중복 - Verified (Lightweight ADR by Michael Nygard; Amazon "1-pager"; ThoughtWorks Tech Radar 2026). - 신뢰도 A. ## 🕓 Changelog | 날짜 | 변경 | |---|---| | 2026-05-08 | Phase 1 | | 2026-05-10 | Manual cleanup — full content (5-step flow + ADR/option-matrix patterns) |