/~learn/s/f7801fb7--- name: Preserving Productive Tensions description: Recognize when disagreements reveal valuable context, preserve multiple valid approaches instead of forcing premature resolution when_to_use: when oscillating between equally valid approaches that optimize for different legitimate priorities version: 1.1.0 ---
Some tensions aren't problems to solve - they're valuable information to preserve. When multiple approaches are genuinely valid in different contexts, forcing a choice destroys flexibility.
Core principle: Preserve tensions that reveal context-dependence. Force resolution only when necessary.
A tension is productive when:
A tension needs resolution when:
class Config:
mode: Literal["optimize_cost", "optimize_latency"]
# Each mode gets clean, simple implementation
When to use: Both approaches are architecturally compatible, switching is runtime decision
# processor/batch.py - optimizes for cost
# processor/stream.py - optimizes for latency
# Both implement: def process(data) -> Result
When to use: Approaches diverge significantly, but share same interface
## Unresolved Tension: Authentication Strategy
**Option A: JWT** - Stateless, scales easily, but token revocation is hard
**Option B: Sessions** - Easy revocation, but requires shared state
**Why unresolved:** Different deployments need different trade-offs
**Decision deferred to:** Deployment configuration
**Review trigger:** If 80% of deployments choose one option
When to use: Can't preserve both in code, but need to document the choice was deliberate
All of these mean: STOP. Consider preserving the tension.
You SHOULD force resolution when:
- Building/maintaining both would slow development significantly - Team doesn't have bandwidth for parallel approaches
- Approaches make contradictory architectural assumptions - Can't cleanly separate concerns
- One approach is objectively better for this specific context - Not "I prefer X" but "X solves our constraints, Y doesn't"
- Choice locks us into an architecture - Migration between options would be expensive
- Preserving both genuinely adds complexity - YAGNI: Don't build both if we only need one
Ask explicitly: "Should I pick one, or preserve both as options?"
When preserving tensions, document clearly:
## Tension: [Name]
**Context:** [Why this tension exists]
**Option A:** [Approach]
- Optimizes for: [Priority]
- Trade-off: [Cost]
- Best when: [Context]
**Option B:** [Approach]
- Optimizes for: [Different priority]
- Trade-off: [Different cost]
- Best when: [Different context]
**Preservation strategy:** [Configuration/Parallel/Documented]
**Resolution trigger:** [Conditions that would force choosing one]