保持生产性张力Skill PreservingProductiveTensions

此技能用于在软件开发和团队协作中,识别并保留有价值的决策张力,避免过早强制解决,以增强系统灵活性和适应性。关键词包括生产性张力、架构决策、配置管理、文档化、权衡优化。

架构设计 0 次安装 0 次浏览 更新于 3/16/2026

name: 保持生产性张力 description: 识别当分歧揭示有价值上下文时,保留多种有效方法而不是强制过早解决 when_to_use: 当在优化不同合法优先级的同等有效方法之间摇摆时 version: 1.1.0

保持生产性张力

概述

有些张力不是要解决的问题——而是要保留的有价值信息。当多种方法在不同上下文中真正有效时,强制选择会破坏灵活性。

核心原则: 保留揭示上下文依赖性的张力。仅在必要时强制解决。

识别生产性张力

张力是生产性的当:

  • 两种方法优化不同的合法优先级(成本 vs 延迟、简单性 vs 功能)
  • “更好”的选择取决于部署上下文,而不是技术优越性
  • 不同用户/部署会选择不同的方法
  • 权衡是真实的,不会因巧妙的工程而消失
  • 利益相关者有冲突但有效的关切

张力需要解决的当:

  • 保留两者的实现成本过高
  • 方法在根本上冲突(无法共存)
  • 在特定用例中存在明确的技术优越性
  • 这是单向门(选择锁定架构)
  • 保留两者添加复杂性而无价值

保留模式

模式1:配置

使选择可配置,而非硬编码到架构中:

class Config:
    mode: Literal["optimize_cost", "optimize_latency"]
    # 每种模式都有干净、简单的实现

何时使用: 两种方法在架构上兼容,切换是运行时决策

模式2:并行实现

将两者作为独立的干净模块维护,共享契约:

# processor/batch.py - 优化成本
# processor/stream.py - 优化延迟
# 两者都实现:def process(data) -> Result

何时使用: 方法显著分歧,但共享相同接口

模式3:文档化权衡

在文档/决策记录中明确捕捉张力:

## 未解决的张力:身份验证策略

**选项A:JWT** - 无状态,易于扩展,但令牌撤销困难
**选项B:会话** - 易于撤销,但需要共享状态

**为什么未解决:** 不同部署需要不同的权衡
**决策推迟到:** 部署配置
**审查触发条件:** 如果80%的部署选择一个选项

何时使用: 无法在代码中保留两者,但需要文档化选择是故意的

红旗——你正在强制解决

  • 当两者都有效时,问“哪个最好?”
  • “我们需要选一个”而不解释原因
  • 根据你的偏好 vs 用户上下文选择
  • 为了“取得进展”而解决张力,而保留它们本身就是进展
  • 当多样性有价值时,强制共识

所有这些都是指:停止。考虑保留张力。

何时强制解决

你应该强制解决的当:

  1. 实现成本过高

    • 构建/维护两者会显著减缓开发
    • 团队没有带宽进行并行方法
  2. 根本性冲突

    • 方法做出矛盾的架构假设
    • 无法干净地分离关注点
  3. 明确的技术优越性

    • 一种方法在特定上下文中有明显更好的客观优势
    • 不是“我更喜欢X”,而是“X解决我们的约束,Y不”
  4. 单向门

    • 选择锁定我们进入一个架构
    • 在选项之间迁移会昂贵
  5. 简单性需要选择

    • 保留两者确实添加复杂性
    • YAGNI:如果我们只需要一个,不要构建两者

明确提问: “我应该选择一个,还是保留两者作为选项?”

文档格式

当保留张力时,清楚文档化:

## 张力:[名称]

**上下文:** [为什么此张力存在]

**选项A:** [方法]
- 优化: [优先级]
- 权衡: [成本]
- 最佳当: [上下文]

**选项B:** [方法]
- 优化: [不同优先级]
- 权衡: [不同成本]
- 最佳当: [不同上下文]

**保留策略:** [配置/并行/文档化]

**解决触发条件:** [强制选择一个的条件]

示例

生产性张力(保留)

“我们应该优化成本还是延迟?”

  • 答案: 使其可配置——不同部署需要不同的权衡

技术决策(解决)

“我们应该使用SSE还是WebSockets?”

  • 答案: SSE——我们只需要单向通信,实现更简单

业务决策(推迟)

“我们应该支持离线模式吗?”

  • 答案: 不要保留两者——基于用户需求让利益相关者决定

记住

  • 合法优先级之间的张力是特性,不是错误
  • 过早共识破坏有价值的灵活性
  • 配置 > 强制选择(当合理时)
  • 明确文档化权衡
  • 当有理由时,解决是好的