Scenario-driven solution design that focuses on future use cases, dimensional analysis, and explicit trade-offs
Designs solutions by analyzing usage scenarios, prioritizing dimensions, and making explicit trade-offs.
/plugin marketplace add musingfox/cc-plugins/plugin install thinking@nick-personal-marketplaceThis skill inherits all available tools. When active, it can use any tool Claude has access to.
Use this skill whenever you are designing solutions, making architectural decisions, or choosing between different approaches. This skill ensures that solutions are grounded in real-world usage scenarios and that trade-offs are made consciously and explicitly.
Always apply this skill when:
Solutions should be driven by concrete future usage scenarios, not abstract ideals. Before proposing any solution, understand how it will actually be used.
Every scenario has multiple dimensions to consider (performance, maintainability, scalability, cost, complexity, etc.). Different scenarios prioritize different dimensions.
There is no perfect solution - every choice sacrifices something. The key is to make these sacrifices intentionally based on the scenario's priorities.
Users must understand what they're gaining and what they're giving up with each decision.
Always start by asking the user about their intended usage scenarios. Never proceed with a solution until you understand the context.
Questions to ask:
For each scenario, analyze the relevant dimensions. Common dimensions include:
Performance Dimensions:
Maintainability Dimensions:
Scalability Dimensions:
Complexity Dimensions:
Cost Dimensions:
Reliability Dimensions:
Flexibility Dimensions:
Based on the usage scenario, determine which dimensions are:
Example:
Scenario: Real-time trading system
Critical: Latency, reliability, data consistency
Important: Monitoring, error handling
Acceptable: Development speed, code simplicity (can use complex optimizations)
For each solution option, clearly state:
Template:
Option [X]: [Solution Name]
Optimizes for:
- [Dimension 1]: [How/Why]
- [Dimension 2]: [How/Why]
Sacrifices:
- [Dimension 3]: [What is compromised and to what extent]
- [Dimension 4]: [What is compromised and to what extent]
Scenario fit:
[Explain why this trade-off makes sense for the stated scenario]
When presenting multiple options, provide a clear comparison:
| Dimension | Option A | Option B | Option C |
|-----------------|----------|----------|----------|
| Performance | ★★★★★ | ★★★☆☆ | ★★☆☆☆ |
| Maintainability | ★★☆☆☆ | ★★★★☆ | ★★★★★ |
| Complexity | ★☆☆☆☆ | ★★★☆☆ | ★★★★☆ |
| Cost | ★★☆☆☆ | ★★★★☆ | ★★★★★ |
Recommendation: [Option X] because [scenario requires Y and Z]
Prioritize: Development speed, flexibility, cost Sacrifice: Performance optimization, scalability (can refactor later) Reasoning: Need to validate product-market fit quickly
Prioritize: Performance, reliability, scalability Sacrifice: Development speed, code simplicity Reasoning: System maturity justifies investment in optimization
Prioritize: Simplicity, maintainability, development speed Sacrifice: Polish, performance optimization, edge case handling Reasoning: Limited users, can fix issues as they arise
Prioritize: Flexibility, documentation, backward compatibility Sacrifice: Specific optimizations, opinionated design Reasoning: Must serve diverse use cases
Prioritize: Throughput, cost efficiency, fault tolerance Sacrifice: Latency (can be slower as long as it completes) Reasoning: Eventual completion more important than speed
Prioritize: Speed of implementation, demonstration of core concept Sacrifice: Production quality, error handling, testing Reasoning: Exploratory phase, may be discarded
✓ Always ask about usage scenarios before proposing solutions ✓ Make trade-offs explicit and conscious ✓ Revisit scenarios if requirements change ✓ Document the reasoning behind trade-off decisions ✓ Validate assumptions about scenarios with users ✓ Consider both current and future scenarios (6-12 months) ✓ Be honest about limitations of proposed solutions
✗ Propose solutions before understanding the scenario ✗ Hide or downplay trade-offs ✗ Optimize for dimensions that don't matter for the scenario ✗ Assume one-size-fits-all solutions ✗ Over-engineer for hypothetical future needs ✗ Under-engineer for known near-term needs ✗ Make decisions based on personal preferences rather than scenario needs
"I need to add a caching layer to our API."
Question: "What are the expected usage scenarios for this cache?"
User Response: "Our API serves product catalog data. We have 10,000 products, each product is viewed 50-100 times per day on average, and product data is updated once per day during a nightly batch job. We have about 5,000 concurrent users during peak hours."
Based on this scenario:
Critical Dimensions:
Important Dimensions:
Acceptable to Sacrifice:
Option A: In-Memory Cache with Daily Refresh
Optimizes for:
Sacrifices:
Scenario fit: This is ideal for your scenario because:
Option B: Redis Distributed Cache
Optimizes for:
Sacrifices:
Scenario fit: Over-engineered for current scenario, but consider if:
Option C: CDN Edge Caching
Optimizes for:
Sacrifices:
Scenario fit: Not recommended for your scenario because:
| Dimension | In-Memory | Redis | CDN |
|---|---|---|---|
| Read Performance | ★★★★★ | ★★★★☆ | ★★★★★ |
| Cost Efficiency | ★★★★★ | ★★★☆☆ | ★★☆☆☆ |
| Simplicity | ★★★★★ | ★★★☆☆ | ★★☆☆☆ |
| Scalability | ★★☆☆☆ | ★★★★★ | ★★★★★ |
| Durability | ★★☆☆☆ | ★★★★★ | ★★★★☆ |
| Setup Time | ★★★★★ | ★★★☆☆ | ★★☆☆☆ |
Recommendation: Option A (In-Memory Cache) because:
Migration Path: If traffic grows 10x or you add multiple API servers, consider Redis at that time. The code changes will be minimal.
Scenario-driven thinking ensures that solutions are practical, well-reasoned, and aligned with actual needs. By always starting with usage scenarios, analyzing relevant dimensions, and making explicit trade-offs, you create solutions that are fit for purpose rather than theoretically optimal but impractical.
Remember: There is no perfect solution, only the right solution for the specific scenario.
This skill should be used when the user asks about libraries, frameworks, API references, or needs code examples. Activates for setup questions, code generation involving libraries, or mentions of specific frameworks like React, Vue, Next.js, Prisma, Supabase, etc.