P

Preserving Productive Tensions

by @obrav
4.2(120)

この Skill は、ソフトウェア開発における「生産的な緊張」を認識し管理します。これは、すぐに解決すべき問題ではなく、貴重なコンテキストを示す意見の相違や複数の有効なアプローチを指します。この Skill は、設定可能にするか並行実装を維持することで、早すぎる解決を強制することなく、システムの柔軟性を保つようチームを導きます。これにより、保守性、拡張性、適応性の高いソフトウェアアーキテクチャの構築を支援します。

architecturedecision-makingflexibilitytrade-offsengineering-practicesGitHub
インストール方法
git clone https://github.com/obra/superpowers-skills.git
compare_arrows

Before / After 効果比較

1 组
使用前

開発者はアーキテクチャの意見の相違に直面した際、合意を急ぐあまり、特定の状況でより優れた選択肢となりうる他のアプローチを時期尚早に排除しがちです。これにより、システムの柔軟性と適応性が損なわれ、将来の要件や異なるデプロイ環境に対応する際に、高額なリファクタリングや妥協が必要となり、プロジェクトの進行を著しく遅らせます。

使用後

この Skill は、チームが生産的な緊張を認識し保持するよう導き、設定や並行実装を通じて複数の有効なアプローチをオプションとして維持します。これにより、システムは異なるコンテキストや要件に柔軟に適応でき、時期尚早な決定による硬直化を回避します。この Skill は、アーキテクチャの適応性と保守性を大幅に向上させ、将来の変更コストを削減します。

SKILL.md

Preserving Productive Tensions

Overview

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.

Recognizing Productive Tensions

A tension is productive when:

  • Both approaches optimize for different valid priorities (cost vs latency, simplicity vs features)
  • The "better" choice depends on deployment context, not technical superiority
  • Different users/deployments would choose differently
  • The trade-off is real and won't disappear with clever engineering
  • Stakeholders have conflicting valid concerns

A tension needs resolution when:

  • Implementation cost of preserving both is prohibitive
  • The approaches fundamentally conflict (can't coexist)
  • There's clear technical superiority for this specific use case
  • It's a one-way door (choice locks architecture)
  • Preserving both adds complexity without value

Preservation Patterns

Pattern 1: Configuration

Make the choice configurable rather than baked into architecture:

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

Pattern 2: Parallel Implementations

Maintain both as separate clean modules with shared contract:

# 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

Pattern 3: Documented Trade-off

Capture the tension explicitly in documentation/decision records:

## 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

Red Flags - You're Forcing Resolution

  • Asking "which is best?" when both are valid
  • "We need to pick one" without explaining why
  • Choosing based on your preference vs user context
  • Resolving tensions to "make progress" when preserving them IS progress
  • Forcing consensus when diversity is valuable

All of these mean: STOP. Consider preserving the tension.

When to Force Resolution

You SHOULD force resolution when:

  1. Implementation cost is prohibitive

    • Building/maintaining both would slow development significantly
    • Team doesn't have bandwidth for parallel approaches
  2. Fundamental conflict

    • Approaches make contradictory architectural assumptions
    • Can't cleanly separate concerns
  3. Clear technical superiority

    • One approach is objectively better for this specific context
    • Not "I prefer X" but "X solves our constraints, Y doesn't"
  4. One-way door

    • Choice locks us into an architecture
    • Migration between options would be expensive
  5. Simplicity requires choice

    • 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?"

Documentation Format

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]

Examples

Productive Tension (Preserve)

"Should we optimize for cost or latency?"

  • Answer: Make it configurable - different deployments need different trade-offs

Technical Decision (Resolve)

"Should we use SSE or WebSockets?"

  • Answer: SSE - we only need one-way communication, simpler implementation

Business Decision (Defer)

"Should we support offline mode?"

  • Answer: Don't preserve both - ask stakeholder to decide based on user needs

Remember

  • Tensions between valid priorities are features, not bugs
  • Premature consensus destroys valuable flexibility
  • Configuration > forced choice (when reasonable)
  • Document trade-offs explicitly
  • Resolution is okay when justified

ユーザーレビュー (0)

レビューを書く

効果
使いやすさ
ドキュメント
互換性

レビューなし

統計データ

インストール数520
評価4.2 / 5.0
バージョン
更新日2026年6月19日
比較事例1 件

ユーザー評価

4.2(120)
5
37%
4
43%
3
13%
2
5%
1
2%

この Skill を評価

0.0

対応プラットフォーム

🤖claude-code

タイムライン

作成2026年6月19日
最終更新2026年6月19日
🎁 Agent 知識カード
アンケート