Loading...
Loading...
Explore candidate solutions before committing. Use when you have a problem statement and need to evaluate approaches - band-aid, optimize, reframe, or redesign.
npx skill4agent add open-horizon-labs/skills solution-space/solution-space/problem-statement"The hardest part of design has never been coming up with ideas. It is letting go of the first workable idea to look for better ones."
"The problem we're solving is: [statement]. The key constraint is: [constraint]. Success looks like: [outcome]."
/problem-statement## Candidate Solutions
### Option A: [Name]
- Approach: [Brief description]
- Level: [Band-Aid / Local Optimum / Reframe / Redesign]
- Trade-off: [Main cost]
### Option B: [Name]
...## Recommendation
**Approach:** [Selected option]
**Level:** [Band-Aid / Local Optimum / Reframe / Redesign]
**Why this one:**
- [Reason 1]
- [Reason 2]
**Why not the others:**
- Option A: [Reason rejected]
- Option B: [Reason rejected]
**Known trade-offs we're accepting:**
- [Trade-off 1]
- [Trade-off 2]## Solution Space Analysis
**Problem:** [One sentence]
**Key Constraint:** [The binding constraint]
### Candidates Considered
| Option | Level | Approach | Trade-off |
|--------|-------|----------|-----------|
| A | [Level] | [Brief] | [Cost] |
| B | [Level] | [Brief] | [Cost] |
| C | [Level] | [Brief] | [Cost] |
### Evaluation
**Option A: [Name]**
- Solves stated problem: [Yes/Partially/No]
- Implementation cost: [Low/Medium/High]
- Maintenance burden: [Low/Medium/High]
- Second-order effects: [Description]
[Repeat for each option]
### Recommendation
**Selected:** Option [X] - [Name]
**Level:** [Band-Aid / Local Optimum / Reframe / Redesign]
**Rationale:** [Why this approach fits the constraints]
**Accepted trade-offs:**
- [Trade-off 1]
- [Trade-off 2]
### Implementation Notes
[Any specific considerations for the selected approach]/solution-space
Users report the dashboard is slow. Loading takes 8 seconds.## Solution Space Analysis
**Problem:** Dashboard loads in 8 seconds; users expect <2 seconds
**Key Constraint:** Can't rewrite the entire frontend this quarter
### Candidates Considered
| Option | Level | Approach | Trade-off |
|--------|-------|----------|-----------|
| A | Band-Aid | Add loading spinner | Doesn't fix slowness |
| B | Local Optimum | Add caching layer | Cache invalidation complexity |
| C | Reframe | Lazy-load dashboard sections | Changes UX slightly |
| D | Redesign | Stream data, render incrementally | Larger change |
### Evaluation
**Option A: Loading Spinner**
- Solves stated problem: No (perception only)
- Implementation cost: Low
- Second-order: Users still wait 8 seconds
**Option B: Caching Layer**
- Solves stated problem: Partially (helps repeat visits)
- Implementation cost: Medium
- Second-order: Stale data risk, invalidation complexity
**Option C: Lazy Loading**
- Solves stated problem: Yes (perceived speed)
- Implementation cost: Medium
- Second-order: Slight UX change, content shifts
**Option D: Streaming Render**
- Solves stated problem: Yes (actual + perceived)
- Implementation cost: High
- Second-order: Enables future improvements, larger change
### Recommendation
**Selected:** Option C - Lazy Loading
**Level:** Reframe
**Rationale:** The problem isn't "dashboard is slow" - it's "users wait before seeing anything useful." Lazy loading shows useful content in <1s while loading the rest. Lower cost than streaming, better than caching.
**Accepted trade-offs:**
- Content will shift as sections load
- Need to prioritize which sections load first/solution-space
We have a bug where notifications fire twice. This is the third
config flag we're adding to work around notification timing issues.## Solution Space Analysis
**Problem:** Notifications fire twice; third config flag proposed
**Key Constraint:** Pattern of band-aids suggests systemic issue
### Candidates Considered
| Option | Level | Approach | Trade-off |
|--------|-------|----------|-----------|
| A | Band-Aid | Add debounce flag | 4th flag incoming |
| B | Local Optimum | Consolidate notification logic | Still reactive model |
| C | Reframe | Why do we notify on this event? | May simplify |
| D | Redesign | Event sourcing for notifications | Larger change |
### Evaluation
**Option A: Debounce Flag**
- Solves stated problem: Temporarily
- Second-order: Maintenance nightmare, flags interact
**Option B: Consolidate Logic**
- Solves stated problem: Probably
- Second-order: Still treating symptoms
**Option C: Question the Trigger**
- Solves stated problem: Possibly dissolves it
- Second-order: May reveal unnecessary complexity
**Option D: Event Sourcing**
- Solves stated problem: Yes, prevents duplicates by design
- Second-order: Significant refactor
### Recommendation
**Selected:** Option C - Reframe, then possibly D
**Level:** Reframe (investigation)
**Rationale:** Three config flags is a code smell. Before adding a fourth, understand why notifications are triggered from multiple paths. The duplication likely indicates unclear ownership of the notification concern.
**Next step:** Map all notification trigger points. If >3 paths trigger the same notification, the problem isn't timing - it's architecture..oh/<session>.md/solution-space auth-refactor.oh/auth-refactor.md/solution-space"Save to session? [suggested-name] [custom] [skip]"
## Solution Space
**Updated:** <timestamp>
[solution space analysis and recommendation].oh/<session>.md/execute/problem-statement/execute/dissent/problem-statement/execute/dissent/problem-statement