# 拼图拼图@: @ 写入实际效果的特征描述

<!--category-- Software Development, Documentation, Agile -->
<datetime class="hidden">2025-11-11T11:30</datetime>

# 一. 导言导言 导言 导言 导言

多年来,我读了数以百计的地物规格(/Q),写下了数百个特别规格(.QA),有些非常聪明 (;ZB),大多数是血腥可怕的@.QA,好的标本和坏的区别在于#'QT有关长度或形式问题 @;QIAS关于它是否真的能帮助开发者建立正确的东西而不会在过程中让他们发疯\.}

我从微软中学到的东西 改变了我对speces@:的思考方式 **spec 不是一个 Bible@; @ it' @s a tool_.}工具=%** 任何工具@, @% 您使用它来完成一项任务@ .} 您可以添加与您一样的详细内容, 正如您的\ @ MS K2 @ 利益攸关方 @ I, @ 和开发商需要进入“ . ” 。 然后您对它的适应=,{ 更改@ MPK6} 并随着功能的开发而更新它 mskK7}

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}把它当作一个活的工具 {\fnarial black\fs12\shad1\3cH2F2F3F}你正在构建真正解决问题的东西{\.}

这种灵活处理外观的方法产生了一种特殊的挑战 \ :}如果该功能能随着学习而演变 你如何估计它?

总而言之,I'在职业生涯中一直由我所生活过的原则;}所有过程... ...不管是在报告里填报的specs {/} even code reports sequá{MSSK4}...

**基本@ ; @ atermatic Spec is a contactal 工具, 让这个功能不是教条式的\ ,}不改变 LAWQ.}**

[TOC]

## 为什么Agile @(#和那实际上意味着什么?

粘贴笔记@. @ it’_a **在不确定的情况下建设正确事物的经济战略**@._specs 生活在不确定性中@,}所以他们必须保持灵活 too.}阅读 [危险宣言](https://agilemanifesto.org/)@, let it become how you think about buting whatthinging. @ 把它想象成一种产品开发的设计模式 @ . @ It_'# 不是一个过程 @ I; @ itós MSSK5 @ a mindical=. @

### 首要原则

* **更改为默认@, @ not the except=.{** 市场移动@, @% 用户惊喜您@ ,} 依附性滑 @ MS K2 @ aspec, 可以将’_ t灵活性变成虚构@ MPK4}
* **学习节奏预言.** 只有在人类触摸到东西之后 你才能发现真正的需要... ....阿吉勒能让学习 *简便、廉价*.
* **流过英雄的潮流** 小, 连续移动跳过大, 不常见 @ “big bang_ MS K3lods.

### 经济为什么能省下你的钱?

* **将错误的代价最小化@. @** 短周期@+轻量级元素表示坏想法会很快消失,
* **不可逆的延迟决定** 继续打开选项, 直到最后一个责任时刻@ ; @ complete
* **减少库存=.** 半-_写作史诗和大宗的“_future_”}部分是工作 -_in_-_累进债务\._船舶薄切,_银行 价值=.{

### 反馈循环是产品

每个环圈都会缩短 @ “ @ idea@ MS K1 @ 和 @ I“ @ useful @ MPK3}之间的距离 。

* **{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}斯佩克** 在代码加固之前, 能够捕捉到不均匀性@. @
* **Dev ⇄QA:** 将接受标准转换为可执行检查@. @%
* **内部狗食 @⇄#用户@: @%** 证明它能解决一个真正的问题 @, @ not a imagine one@. @

> 修改日志是 *关于你们所学的功过簿,*.

# 是什么使一个好地物特征斑点

## 问题=-}解决方案模式

唯一最重要的写作标准原则@: @% **总是以问题开始 @, @ not the subject@ . @**

此模式简单@ : @%

1. **问题** @-@ what's '\Q}实际上破碎了#?}用户所经历的疼痛是什么?
2. **解决方案** @-这里_'}我们如何提议修补它 ~#/利用这个机会
3. **范围** {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}我们在做什么?
4. **超出范围的范围** “-”什么? 我们明显没有做“(” 同样重要的“MS K3” 为未来规划提供资讯,

I' 见过无数直跳到“ "}用户点击按钮X” 的图案, 它叫 API Y"{ 却从未解释过使用者真正想要达到什么目的。 这是 asass_ MS K4 backwards@.}执行细节应该自然地从理解问题出发: < . >

记住开发者是特别的建筑机器 真的 @ (# code 是传送特性@ MS K1} 告诉他们什么的工具 *需要满足的需求* 如果您有一个UX人负责 UX 谱的UX ', 那么Dev 和他们应该合作 *用于用户的* 并且让审查过程测试这个想法@.

```mermaid
flowchart TD
    A[Feature Idea] --> B[Spec / Proposal]
    B --> C[Visuals: Flowcharts, Figma, UI Mockups]
    C --> D[Implementation]
    D --> E[Internal Testing]
    E --> F[Feedback Loop]
    F -->|Refine| B
    F -->|Ship| G[Release to Users]
    G --> H[User Feedback]
    H -->|Iterate| B
```

## 目的的明确性

在您写一个关于执行的单词前 @ , @ 您需要回答一个问题@ MS K1 @ { **为什么这样问?**

为什么我们要建立这个“?” ? 它有什么问题解决了 “?” 谁受益了“MS K2” 如果你能回答这些问题,请明确“'” 您是否拥有了一个功能?

以:开始一个好的插曲

1. **问题说明** @- @ whats ' @s折断或丢失@?_BARBAR_具体地说#.}
2. **用户影响** @-谁在乎,为什么? ? 可能的话量化吗?
3. **成功标准** 我们怎么知道我们解决了这个问题 使它可以测量
4. **非- 目标** 这防止了无休止的辩论 和无尽的争论

## 详细信息正确级别

这里大多数的设置都步履维艰, 开发商只能猜测@;#太详细了。 而您又在微管理执行选项中发现:开发者更有资格做出 @.}

关键在于指定 **What什么是什么 什么** 需要在没有开处方的情况下实现 **如何** 比如说 :

**好**当用户试图提交含有无效数据的表格时 @,}他们应该立即收到反馈,指出哪些字段需要更正@."

**坏**: {"在表格提交中(,})提交者按鍵'點擊處理器上嘅應呼叫驗證程式Form()},它會以樣式欄列檢查每個欄位}._value 與其認證@.regex屬性相對,如果有任何失敗, 則會用字段MS K8_name 與認證MSQK9 messsage 參數來呼叫顯示Error}()}

第一个是告诉我用户的经验应该是“; ” 我可以用 React,VueMS K2 Vanilla JavaScript},或运鸽子来实施它。 第二个假设执行细节可能完全错误于技术堆, 或者引入不必要的限制 ‘.’不同的人通常有不同的长处 写这个插图的人经常是 “'t Technology NSK7 maks 't 正在撰写代码{.}的那个人 想象自己是一个出租车司机而不是告诉目的地 但每一个齿轮都变换了

<img src="https://media.tenor.com/la1K-_RBV0cAAAAi/chick-stab-chick.gif" />
## 使用图片 @ / @ routcharts@ MS K1_ 获取点对齐

记住您在努力让人们了解 您在'中建议哪些内容。 有些团队包括 Figma 文件 “(” 一些故事板“ /” 或者UI的图像, *确保您得到理解*使用您需要的工具@. @

[在维基美人鱼中 .js图表是伟大的 这个! ](https://www.mostlylucid.net/blog/category/Mermaid)@;_BARBAR_记住 AI是伟大的制作这些也给一个文字描述

有些人可以分析书面描述 , 一些需要图片和电影

```mermaid
flowchart LR
A[User on Profile Page] --> B[Click 'Add Profile Picture']
B --> C[Upload Dialog Opens]
C --> D[Select Image File]
D --> E[Preview + Crop Options]
E --> F{User Confirms?}
F -->|Yes| G[Profile Updated with New Picture]
F -->|No| C
G --> H[User Sees Updated Profile]
```

## 边缘案例和错误处理

如果有一件事 I' 学到了它 ' 这个: **用户会找到方法打破你从未想象到的狗屎.**

一个好的景象 描述幸福的路径 ; 它认为:

- 当网络在“-”操作失败时会发生什么?
- 如果用户没有权限@? @ @ label
- 如何同时修改@? @%
- 如何处理分布式操作中部分故障?

您不需要在 Spec,中解答所有这些问题, 但是您需要承认它们的存在\ . 没有比通过实施发现半途而废更刺激的开发者了 没有人会想到 当外部API下降时会发生什么

您可能拥有“'”技术版面, 详细描述执行细节和解决“MS K5”技术问题的技术解决方案。

## 安全和绩效考虑

如果有特定的安全要求 (#autifulation data 加密@,}审计日志=%)}在代码审查中解释

类似@, @% 如果存在性能限制, 此搜索需要根据 @ 200_%s来完成, 包括以下的数据集: @1\%m million records @ MPK4}将其放入 spec.Qon'_ t让开发者去猜测非“ MS K7” 功能要求 #.#

# 良好标准的结构

这里“ '” 是用于特性speces @ MS K1} It'}不是福音书@ MSSK3}, 而是它='}为我提供了很好的服务

## 1. 概览

您的CEO应该能够阅读此节内容, 并理解该值@. @%

## 2. 背景 @/_context

@?}这能帮助开发商理解问题空间, 但没有在每次产品会议中出现@.#

Got it—let\’"s 扩展您的部分 **用户故事** 因此它不只是一份核对表, 而且是不同用户如何与系统互动的活版地图@. @

---


## “3.”用户故事“( 与人称’)”

用户故事是 @’}不只是一个框~-#ticking操练@—_他们#’}它们是一个方法 **具有体质的人** 您知道 @,}您的用户 **建造这个狗屎的全点**.
通过将每个故事锁定在一个人身上, 您迫使自己思考实际使用模式 @ , 动机 @ I, 和限制@ MS K3 格式简单但有力 @ MPK4

也许亚历克斯需要一个仪表板来观察您的特征中的安保问题 , 或许摩根需要他的许可才能阻止他破门而入

**作为 a [用户类型 @]}我想要的 [来做点事情 所以 [我实现了一些目标 ].**

缩略 **“所以这样,”** 内容是防止没有需要的建筑特征的保障... ...—它把每个功能都连接到一个真实的-世界结果 ."

---


### 示例人

- **亚历克斯署长** @–_关心控制@,}监督#, 效率$.
- **Jamie 临时用户** @– 值简单和快速赢%.
- **Priya 电力用户** – 将系统推向极限... ..., 想要高级定制@.
- **摩根新来者** – 需要指引 MS K1 登机时的指南 , 和保证
- **泰勒(Taylor)是利益有关者,** – @ does’}每日使用这个系统,但需要能见度

---


### 抽样用户故事

@|@ persona @ | @ story @ MPK2# 为什么这重要?
|---------|-------|----------------|
-=YTET -伊甸园字幕组=- 翻译: **署长**, 我想指派角色和权限 **因此,** 我可以确保数据安全和合规性 . MS K1 防止未经授权访问 并保持系统可信\. @|
@|Jamie (Casual用户@)|as a **临时用户**我要一个简单的仪表板 **因此,** 减少摩擦,增加领养率 . |}
“|Priya ( 电源用户’) |as a” **电源用户**, 我想创建自定义工作流程 **因此,** 我可以自动设置重复任务, 并保存时间@. @ @\ | @ 解锁效率和高级使用案例@ MS K2} @ MSC3 @
摩根 Morgan ( Newcomer MS K2 as a **新建器**,}我需要导师辅导和工具提示 **因此,** 我可以学习这个系统而没有感觉失落 . MS K1 改进登船和保留@. @|
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}*| 泰勒 ** **利益有关者**,}我要定期给我发邮件报告 **因此,** 我可以追踪进展而不在 @. @ @ | @ 保持决定@ MS K2_ makers 知情并参与\ .} @ MPK4#

---


### 为何人们会一起工作?

- **让抽象的人性化 .** 而不是““%uss @,”}你考虑过亚历克斯・,Jamie@,Priya,摩根•,和泰勒•MS K7
- **故事与目标的连接功能 @.** @“ @ @ 因此,@”# 条款强制要求清晰=%:}每个功能必须达到一个目的_.{
- **出现模式@. @%** 当您排列多个故事“ ,” 时, 您可以看到重叠@ , 冲突 @ MS K2 以及人与人之间的优先排序@ MPK3

## *4.详细要求

这是你的肉和马铃薯 .按功能区拆开 用小标题自由使用

对于每项要求 , 具体说明\:

- 预期行为
- 任何制约或审定规则
- 处理错误处理要求
- 如何与现有特征互动

## -=YTET -伊甸园字幕组=- 翻译:

@,安全要求@, 无障碍标准},浏览器/device succupport\MS K4唐MSKO5t 假设这些是显而易见的{. 但在某些团队中,这可能是其他TEAMSMS}...but don'n 失去焦点 □.如果你周期的一部分变成瀑布 那么你_'因为定义而失去了敏捷性 *.*

## 6.超出范围

本节与“'s in screen”\.一样重要,请明确说明您没有在这个spec@.}做哪些事情。

为什么这重要?

- **范围** @ - @ @ I" @ butbut couldn't we just@..."} 当您指向“ 范围外” 部分时, 对话会迅速消失。
- **设定期望值** 利益攸关方知道什么 **{\fn方正黑体简体\fs18\shad1\3aHBE\4aH64\fscx67\fscy66\2cHFFFFFF\3cHFF)** 此时此时间已交付@( @% 1}
- **启用未来工作** @- 此处的项目稍后可能变成它们自己的规格
- **重点小组的工作重点** 每个人都知道这项工作的界限。

超出范围项目中的良好范例*:

- @"# 移动支持@ (} 将在另外的 Spec)" 中处理 @
- " 现有数据的迁移@(}目前只处理新数据=)"
- @ "Admin UI 配置的“ MS K1” 界面将首先使用 config 文件@)"}
- “"”与系统X“(”的整合尚未确定是否具有依赖性 ‘)"’

如果有人在“-@of @-\csclospace ” 中争论一个属于范围@,}这样的话, “'}这段对话值得开发前的交谈开始...",}不是通过执行完成的中间部分#.}

## “7. 开放问题”

诚实地对待您不做't know what you don't do we@MSKO} 请清楚标记这些并确保他们在开发开始之前得到回答。 @. 没有比阻碍发展更糟糕的了, 因为没有人决定我们是进行软删除还是硬删除吗?

## 8. - 依赖

开发前需要准备好什么才能启动@? @

## 接受标准

QA 要如何测试这个 @ ? @ 这些应该是混凝土@ MS K1 @ 测试式语句 @ MPK2Bonus 点, 如果这些语句是以可以成为自动测试的格式撰写的, 那么它们会怎样做? @ I'} @ girln/$YourZ/ @ then style_ ).}

# 斑点虫的问题

这里的' @%s 有些东西不能让人谈论到足够的 :@%s **Spets 可能有错误太过QZ. @%**

spec bug 是当规格本身错误@ . @ 也许它自相矛盾 @ MS K1 @ 或指定了以下行为: @ OMK2_ 在技术上是不可能做到的\ ,} 或者它解决了错误的问题, 完全@ I.。 这些都是阴险的 因为开发者可能精确地执行“ '” 所写的东西, 最后还是有一种产品来完成 “'+t 正常工作 ” @( @ in Agile 主要焦点就是让这个“ MPK8 eed backack liopQ'” 尽可能短的时间

## 如何发生插件错误

1. **不完全理解** 撰稿人完全理解问题或现有系统@. @
2. **冲突需求** 不同的利害相关者想要不同的东西,
3. **技术不易性** @-_BARBAR_produces 要求一些能真正完成的东西 @MS K1}@(_Or can'}在合理的限制范围内完成
4. **变动的所需资源** @-_#世界向前发展,但这个插图没有更新 #.#

## 处理插件错误

当您发现一个作为开发者的插件错误\ , 您有一些选项\ MPK1 {}

### 立即提出

这几乎总是正确的答案 . 只要您发现一些不合理的东西... ...'},...

向拥有此模板的人发送明确信息@: @%

- 标书上写的是什么
- 为何有问题?
- 如果你有什么建议的话,你认为应该发生什么?

@(@email,_glickr@,}不管是什麽的#)}所以有{'}s a record *.*

### 实施此选项

有时候,你可能会被诱惑 仅仅建立什么\'}尽管你知道它'是错的{.} **做这个不这样做**

I' 见过开发商执行他们知道的规格是错误的, 因为 @" {'}_它所说的做>"\}然后当QA拒绝或用户抱怨<. 你T'}你的工作的一部分就是当你看到问题时大声疾呼{\.\ }

唯一的例外是,如果你提到这个问题... ...你被叫去继续不管怎么说...

### 自行解决

如果您有信心, 您可能希望自己校正它@ . @ 这对明显打字或格式化问题来说是件好事 @ , @ 但对于实质性的改变你需要得到利益攸关方的同意\ MS K4}

千万不要无声地改变要求 @. @ that'}你如何最终成为无人要的建筑特色#.@

## 防止斑点臭虫

最好的办法是首先防止标本虫的出现。

1. **早期参与开发者** “-”在产品最终确定“'”之前,先获得对规格的技术审查。
2. **早期参与QA** @- @QA QA is critical here@. @%
3. **自由使用示例** @-_#摘要描述很容易被误解@.}具体例子: ("{用户约翰有权限 X,}尝试做Y},},看到#")}更清晰
4. **对照现有系统进行验证** “- ”这个插图是否对目前的工作方式做了假设?“? ” (双倍)“- ) 请检查这些假设 ‘. ’
5. **灰尘的隔热** @ -_ 将这个标本当作一个活的文档@ MS K1} 当您在执行过程中学到更多东西时 @ I, 更新它#. 未来开发商会感谢您的@ MPK4

# 共同孔径

## 新奇 @ - @Length Spec

有些人认为更多细节总是更好 @. @ it' @s not\ .}一个无人阅读比大家都理解#5-_pagespecreat更糟糕的页面框@50-}

如果你的外观变成战争与和平 你要么成为战争和和平

- 需要把它破碎成多重特征
- 正在具体说明应当留给开发者执行的详细实施细节
- 解决了错误的问题,需要退后一步

## 模糊的手电波

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}那又怎样?

如果您的元素可以在单句中被完全捕获@ , @ it' @ 不是一个 spec @ MS K2 @ It\ '} 是一个模糊的愿望 @ . @ {

## 解答( M-) 第一层

'是先入为主的解决方案 也许您需要的是完全不同的东西

## 移动目标

如果事情正在改变 你对问题的理解不够清楚 但是在写插图前 停止做更多的发现

## 厨房辛克

"@While we'_BARBAR_ 在那里,,}可以吗?

# 处理像源代码一样的物种

改变我写书的方式的心态转变 **处理源代码时, 您的特性和对待源代码一样对待@ . @**

## 版本控制

您的设置应该与您的编码“ .” 一同生活在版本控制中。 请检查它们 in @ MS K1} 音轨更改@ .} 在您更新时写入有意义的承诺信件@ MPK3} 这将创建要求如何进化的历史\ .

在微软,中,我们保留了和代码{.}相同的存储库中的分数。 当一个拼图改变了\ MSK_}它经历了与代码{.} 同样的审查过程 这是'}官僚作风;} 它能确保每个人都明白什么在变化

## 重构分层

代码需要重新设定@, @speces=.}您在执行过程中学到更多东西时,

找到更好的方法来解决问题@? 更新插件以反映新办法, 并解释为什么您更改了方向 @. 发现一个你曾经拥有的边缘案例\ ' t考虑过 @MS K3 添加到 spec.

开发后的插图应该比开发前的插图更精细... ...". n如果它不是#'s not,\}您错过了记录你学到的东西的机会...

## 生活文件原则

当开发开始时 , @ it'}(在那个阶段)它只是@'_ready @'}当特效船舶成为维护模式时 它就完成了 {\fn方正黑体简体\fs18\b1\bord1\shad1\3cH2F2F1F}(到那时为止)

这不代表这个插件应该改变每日的“.” 要求的主要变化需要讨论和协议 “.” 但是澄清“MS K3” 其他例子 “,” 新发现的边缘病例应该随你发现而被折回到该插件中去

以这种方式去想 如果你愿意在代码,中留下过时的评论

## 为何这些特征需要保持现状

这里的' @%s 一些没有被讨论到足够多的东西@ :} **您的特征 成为所有事情的基础 在.之后**

**试试计划**:QA根据 spec. 写测试案例,如果标本已过时... , 测试正在检测错误的东西.... 你得到假的阳性...

**文件文件文件文件文档文件文件的文件文件文件会议文件文件文件,文件文件文献文件文件/文件文件资料文件文件文文件文件归档文件文件:文件文件记录文件文件、文件文件提供文件文件文号文件文件(文件文件 Do文件文件存档文件文件 文件文件文件和文件文件证件文件文件文件中文件文件Do文件文件档案文件文件**:Q用户文档@,QAP API docs @,Q}帮助系统=,Q}你高丽的RAG AI 支持代理 {-Q} 它们都从spec.Q 开始 如果标本描述 DONZ'QNT 存在的特性或缺失功能 从第一天起您的文件是错的

**未来发展**@:#当有人在六个月后需要延长此功能时,

**入职**@:_#新团队成员通过阅读speces@.}过期的语句来部分地学习这个系统,

因此,该特性必须保持当前状态@. @ it'}不只是关于初始执行的#;_它 @ 'Qs basical to everything @.*。

在微软 ,我们处理的插件更新与代码更新一样重要, 而代码更新也具有同等重要性 *.Spec change 通过审查*.它们被和编码{.}一起版本 当一个功能被修改了\, 更新时 它是“"done."”定义的一部分

如果您更改了代码, 但是 Don't 更新了 SpecMS K1 你've 创建了技术 DEBTMSC3 未来工作会比较慢, 因为没有人知道当前状态是什么 @ .}

<img src="https://media1.tenor.com/m/3T1hzop89-kAAAAC/debt-credit-card.gif" height="250"/>
# 标准与执行之间的关系

在这里,' 一些初级开发商经常don@'}t hold *: **代码是.**

代码是您实际构建的“.” 但是当它们选择了 “'”和“MSSK3”时,代码会赢得\.” 你可以运行一个 Spec@;" 您可以运行代码“ (+BDD 而不是不执行 @...” 未来主题“MS K11”

意思是:

1. **应当演化的特征** 当您在执行过程中发现一些事情时 @,# 更新了 Spec.\Q It@'}文件记录 您在建设什么你做'+re mail_ ,}不是神圣的文字=.{
2. **执行详情 Don'}属于物种区** -@'_BARBAR_(}但这是罕见的,而且往往是下流的'Agile Frameworls @'Z-一个宠物憎恨\. 禁止像阿吉勒这样的内在适应性做法 让我有点).。
3. **弥补差距的测试** @-_BARBAR_好的测试能证实执行符合要求 {.}它们='}(这是Spec.的可执行形式)

# 撰写不同观众的镜框

不同的人需要不同的东西

**行政 主管 执行官** “-”想知道商业价值和大致时间表“.” 给他们概览和成功标准:“.”

**产品管理者** “-”需要了解它如何与更广泛的产品战略及路线图相适应,

**开发者** “-” 需要足够详细的内容来正确执行,而没有被告知如何完成他们的任务。”“.” 给他们一些要求。 “MS K2” 边端病例“MSC3” 和“非-” 功能要求$.

**质A** “-”需要知道如何校验“.” 给他们接受标准‘.’

**设计师** “-”需要知道用户的经验应该是什么“.” 给他们提供用户故事和互动流‘.’ 更好地让他们同时开发 UX spec {/}(UX Spec spect {&)的故事板,

使用章节和结构, 人们可以阅读他们认为重要的东西。

# 测试您的Spec

在你给自己打电话之前 请先问问你自己 :

1. **一个从未见过这个功能的开发者,** 如果您不是, @ 您% ' @ re missed details@ MS K2} 从未有像 @ '_ 这样的小块在 current system 中工作* '. 首先, <'\ 懒惰的AbZQ,} 第二次{,} 这个功能会改变或者难以理解边缘情况 * _.}
2. **QA 能写出此spec? 中的测试案例吗 ?** 如果不是, 您的接受标准是 @ '} 不够清楚@ MS K2
3. **你能造一个完全没用的东西吗? 仍然符合这个标准** 如果这样,,你是否已经捕捉到实际需求?
4. **本文描述如何执行或实现什么?** 如果它以前是, 您就是' 微管理=.

# 以敏感方式处理各种特征

@ "_But we''re f灵敏的 mSSK2}我们不需要胸围,我听过很多这样的歌声

Agile does't 意指“"no planning” “"”或“MS K3no documents }." 意思是回应计划实施后的变化 ‘. 关键洞察力’ : **参数是工具@,不是合同 @.** 你只要用足够详细的细节来创建它们, 就可以开始“MSKK0” 然后随着你学习我的. 我的 "'\QAGile 旅程"的进化 “'"就更加极端了

## 瀑布的大小不同

基本差别在于“'Qt”格式或长度@; @ it'QS 心态和进程_.}

**瀑布区**:

- 任何发展之前完全在前面写作
- 从第一天开始就力求完整
- 更改需要正式的变更控制程序
- 一经批准,Spec 即为“"”
- 我们可以在开始之前知道一切
- Linear :Spec →构建 *→测试*→部署

**敏感区块**:

- 开始以最小可行细节为起点
- 开始时期望的不完全性 @ ( @ 以及# '@s fine_ )}
- 预期和欢迎变化
- 特征随着特性的不断演化
- 我们建设时会学习
- cyclicial @:草案 *→构建 *→学习\→更新Spec@→构建更多{→学习更多

瀑布法假设在写出代码前您可以完美地指定所有事情。 在现实中, 当用户真正尝试特性“.”计划时, 您可以发现一半的要求。 一旦使用者实际尝试了该功能的特性“ ,” 包含它 “.” 用户是 AdutIMATE 测试者 ‘. ’ 他们能够打破你曾经做过的狗屎 你甚至不知道你在什么?

<img src="https://media.tenor.com/RSp2ieJayNsAAAAM/panda-destroy.gif" height="250"/>
## 反馈循环是一切

在敏捷的采样中 @ , @ 反馈循环是您最好的朋友@ MS K1 @ You\ '}不断收集输入并更新 Spec:}

**开发者反馈**: @ @"#_BARBAR_AUWAY_BRANSLATO}(.}) 最初的方法贏得'}工作,因為 XMSK3@I'M 提议 Y 取代."+ @ @ @#→}更新樣式,

**用户反馈**@:_BARBAR_尝试与真正的用户测试此功能@(}(甚至内部) @MS K2 @#"}这实际上解决不了我的问题,因为 @..." @ @ →} **中枢** 基于你所学的知识 .

**执行反馈**“: ” 当您在构建“,”时, 您发现边缘病例“ , 技术限制”、“, 或更好的方法 ” @. ‘ MS K5 将这些学习内容转回Spec.

**QA反馈**“: " ”“Spec says X,但'没有考虑Y possibility}“." NSK4 将此假想添加到spec.

每一个反馈环圈都使得这些预览更好\ . 发展一小步之后的预览应该比之前的预选更准确, 因为您已经学到了你可以知道的东西 在一开始.

这就是为什么瀑布经常失败的原因 : 他们跳过反馈环圈 . * 当你发现图象错误的时候

**大事情,反馈 早期作为 faisible\." It'"为什么我建造 [LLMApi 磁石](https://www.mostlylucid.net/blog/llmapi) 帮助您建立双边投资条约, 然后使用假数据获取有用的反馈@. @%**

## 拥抱不完善 * @(#At First*)

这里的' 使得传统项目经理神经紧张 **如果最初的插图有漏洞的话,**

标记部分为“" @TBD@"}如果您还不知道 @'}请列出突出的开放问题\.}请明确说明您已经找到什么. 't 尚未知道#.}

这是"'t sloppiness;它" "'s honest" .你不知道前方的一切吗?".假装你做的只是意味着 你'会写出错误解决方案的自信规范"\.

以 @:开始

- 清除问题解析语句 @ (_ _ 您必须知道这个@ )} @
- 建议的解决方案方法 @ ( @ might change_)
- “"done"标准”“( 将予以精细化”“)
- 以开放问题标注的已知未知

然后填补空白,因为你学习到“.”和“I'”的缺口。 获得一个不完整的 “-”比完整的“MS K4”好得多。

## 粒子将改变

现在接受此项@ : @ @ **开发期间您的特性将会改变@. @%** 如果它不成功,你要么运气好 要么没学到什么

您应该期待更改@: @%

- 发现制约因素后技术方法转变
- 当你意识到你正在建造太多的“(”或“太小”时 范围调整
- ? "@Done @"}根据你对问题的理解,完善标准
- 实施期间发现的新边缘案件
- 通过试验找到更好的解决办法

每个变化都应该是:

1. **有文件记录** @- 更新 specé , don@'}只是更改代码而已
2. **通讯** @-_* 告诉利害相关方,
3. **理由说明** @-_Q 解释你所学到的促使改变的原因

spec's 版本的历史会成为您学到的东西的纪录... .......

## 当 Agile 拼写错误时

如果你忘了一件关键的事 敏捷的方法可能会失败 **" 会改变的" 不是指'**

错误的敏捷采样@ : @

- 每天都在无明确理由的情况下改变特征
- 没有定义 & " @ done@ MS K1} @ 因此特性不断增长
- 更改是 @' @t 通讯@(#spec 更新预计会直接跳转到您的同事脑海里 @MS K2} 人们根据不同的理解工作
- @" @Agile@"_用来作为不思考事情的借口
- 利益攸关方对范围变化感到惊讶,因为无人告诉他们

精巧的敏捷采样

- 基于学习的明显原因发生变化
- @"_Done@"}标准是清楚的,即使其他细节是#'t
- 讨论并记录了修改情况
- 敏捷不代表粗鲁
- 利益攸关方是反馈循环的一部分

这幅图是一个活的文件“, ” 但是它不是混乱的 “' ” 而是基于学习而进化的 它不是根据higms @. 来演化的

Agile从不做任何你想做的事 称它为"AGLE'MSKO"

它是一个充满活力的过程,它有SOLEGOAL 尽快建造最好的东西 [危险宣言 ](https://agilemanifesto.org/principles.html) 正如它所言,第一原则是... ....

> 我们最优先考虑的就是满足顾客的要求
> 直至早期和持续交付
> 具有价值的软件

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}因为你喜欢这种感觉...

## 只要足够详细开始

问题在于「'@t」 @"#该如何详细描述呢?

对于某些可能是:的特征来说

- 描述问题的段落
- 三个圆点勾画解决方案
- 清晰定义 @ " @ done@ MS K1_ 的外观

对其他人来说,可能是:

- 带有模型模型的详细用户流量
- 由数据支持的绩效要求
- 多系统集成规格

**添加存在不确定性的细节@. @%** 如果每个人都同意某事应该如何运作... ...",你不需要写在 令人痛苦的细节'.}如果有分歧或困惑的话

但归根结底,它有足够的细节 来启动反馈环'.

<img src="https://media.tenor.com/5q0fppfYcLAAAAAM/push-loop-infinite.gif" height="250"/>
## 模板和 AI:}快速启动

Don'T 过度思考了最初的spec. 初衷是拥有足够满足您的即时需要

- 粗略估计“(”甚至是一个SWAG “-” (垃圾)“WildZQK2”(猜测)“MSC3”比什么也没有好。”
- 对优先优先讨论的投入
- 足够你个人开始编码了

**使用模板**: 有一個關鍵區段的基本樣本 {(} Problem @ ,} <Solution>_,在範圍外 <, > 已達定的標準 *).}

简单的模板可能是 @ : @%

```
# [Feature Name]

## Problem
[What's broken? What pain exists?]

## Proposed Solution
[High-level approach]

## What "Done" Looks Like
- [ ] Specific, testable criterion 1
- [ ] Specific, testable criterion 2
- [ ] Specific, testable criterion 3

## In Scope
-
-

## Out of Scope
-
-

## Open Questions
-
-
```

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你已经有足够的时间开始讨论 甚至建造{\.}

**使用 AI 到 标准草案**像是Claude或ChatGPT这样的工具,

但-和这很重要 **让AYO'彻底勾引你 添加所有的东西**

AI喜欢全面性 . 它' 会给你们关于安全考量的章节 关于安全考核 MS K2 绩效要求 , 无障碍性MS K4 国际化MSKO5 错误处理, 登机MSk I, 监测}, 部署策略MSsk9 滚回计划MSOK10 以及你可能需要的其他17件事

保留您需要的东西 NOW @.}当您真的需要它时,其余部分可以稍后添加@.}

将 AI- 生成的光谱想成一个菜单@ . 选择启动所需的位数 @ MS K2} 忽略其它@ MPK3 您总是可以回来几秒钟\ .

目标是“'”一个完整的 Spec@; @ it'}足够开始工作吗? “.”是快速估计吗?

## 合作模式

这里“ ' @% 1” 的更改 **您不't 写一个插图,然后把它扔到墙上给开发商@.** 这幅画是一个合作的作品 .

最佳方法 I' 已经看到#:

1. **产品“/”PM勾画了问题。** 需要解决和为什么
2. **开发者贡献技术方法** 我们该如何解决这些困难?
3. **设计者提供UX要求** @- 用户的经验应该是什么?
4. **质量保证有助于提供测试假想情况** - 边缘案例和验证方法

这种合作方式很早就遇到问题, 当它们廉价地可以修补时, 而不是迟到的时候。

更重要的是,的意思是这个插图反映了什么' 实际上可能是什么\"MS K2" 不是有人在孤立中所希望的"MSC3"

## 发展过程中的进化

这里“ '” 表示灵活度与传统相异@ MS K1 @ **此特性可以随着您构建它而演变@ . @ @**

您发现您最初的策略赢得了“' @ t work@ ?} 更新此选项以反映新的策略” @ MS K2

您尝试此功能, 并意识到它实际上解决不了问题 @?Pivot并记录为什么@.}

用户反馈显示一个更好的解决方案 @?_Incolor it and explain the change@.}。

此进化是一个特性@ , @ not a bugQ.You @ MS K2re 对新信息的回应\ .} 这个参数应该捕捉到学习\ , 不假装你从第一天起就拥有完美知识=.}

但是如果这个功能能改变\ ,}你如何估计它?

## 估算挑战

这是敏捷的 :的秘密 **当特性可以演化时, 血压估算是血腥的难度@. @ @ @**

传统估算假设您知道自己在构建什么 M're building\ . 您可以将其细分为任务 @, 估计每个任务@, 加起来

拼图估计承认您是don't 知道前方的一切@.}这个功能可能会随着学习而改变

**您估计范围@ ,}不是绝对值 @ MS K1 {** 而不是 @"}这需要多少周时间_3_星期 200)}你说#"}(根据我们发现的东西)

**您在迭代中估算@ . @** @"@We'}将花一个短跑来探索这个并汇报我们学到了什么 然后我们可以更准确地估计其余部分 #."#

**您的时间@ - @ box 而不是范围 @ MS K1_boxing+.}** @2#星期结束时, 我们将会拥有我们能在那个时候建立的最佳版本@."

但所有这些方法都有一个关键要求 : **您需要知道 @ " @ done@ MS K1 @ 意思是 @ MPK2 @** 如果没有明确的定义, 一个功能可以永远保持转移@ . @ @

与瀑布方法相比, Agile 通常受到批评。 没有具体的具体特征,

# 定义“"@Done @"}“或如何阻止性能变现”吗?

这是许多灵活图谱破碎的地方 . @Everyone@'}人人对灵活性和迭代感兴奋*,}但没人想成为那个说""Right{,}的人

在您知道之前, 您的 "-simple 批注系统@"_BAR_已经发展成一个完整的社交网络, 包括短信 @,}简况=,}和朋友请求.}

## “模糊”的问题 @"#Done@" @

I' 曾见过接受标准如#:的标本。

- @"用户可以评论文章@"
- 仪表板显示相关信息@"
- "_Search运作良好 200)}"}

这些是'的完整定义 ; 它们是模糊的渴望 . 什么是“"”相关的信息?

开发者需要知道: **@,  label_ professions**

## 正在写入混凝土 @"#Done@"}标准

标准是:

- **可测试** - 校验它是否相遇
- **特定具体** “-”没有含糊的字眼,比如“"”和“"”或“MS K3”
- **环形** * -}它们不代表无限的范围

**坏**@ : @ @ I" @ Comment 应该被调慢@ MS K2 @
**好**:{"}Admin 使用者可以批准, 拒绝MS K3 或删除管理面板的批注@.n-}正常用户无法看到已核准的批評}. 在新批注上传时发送给管理方的电子邮件通知_."

**坏**@: @ @ "_ Search 应该快一点@"#
**好**100,000 posts\ @.}在@200>s中,根据以下数据集查询结果的百分位数 : @MS K4#possession #MSK5_BARBAR_按关联性排序#({Full}-Text搜索成绩*)}日期为“-#breader{\."}

**坏**: MS K1 键盘显示有用的衡量标准@"
**好**@: " @#Dashboard displays_:}总页面浏览量 *%( @Last 30{Yes_),}独一的访客 *(Last <30>*天♫),}顶端的 @MS K9}(按檢視<(LTZ7),{和访问者按国家分类)\.}所有标准更新一次 每小时=."}

注意差异@?}好例子告诉您到底需要存在什么,何时可以停止添加东西 @.}

## 超出范围部分是你的朋友

记得我之前说过,“超出范围”部分与“范围”中的“'Qs”)一样重要。

对于每一个功能,, 都有几十种东西可以添加 '." "超出范围部分" 明确呼唤什么你''\"没有做"MS K3" 这阻止了“"” 虽然我们在那里' 我们也可以在, 中加上"MSC7"的谈话 导致地貌相向性"=."

**范围**:+Nested 备注 @(_Oone 级别的答复@)
**超出范围的范围**: 无限制的批注线索@, volution procession @, 备注线索, 最佳批評排序}{, 註解 permalinks}MS K5 它們可能稍后作为单独的特性\)

当有人建议“"” 时, ' @ t 批注有上方的votes@ ?"} 您可以指向该标注并说“ MS K3 ” : “'’ 不属于此迭代的范围 ” @.$ Let'_ 讨论它作为一个单独的特性 一旦基本评论起作用了 “." ”

哦,接下来的Spec?}好吧,你有一堆未使用的好点子 已经捕捉到!

## 时间@ - @%Boxing 作为最后的度假村

有时您真的不知道 ' @ twitle@ done @ MS K2} 当您开始做时, 您会看到什么样子? 问题空间太不确定了 @ , @ 完全是新奇的, 甚至有些后端系统也不得不同时建立@ . @ 在这些情况下 @ I, time@ MPK7_boxing can working+: @

@"#We@'}在后端准备好之前, 将花上“2”周或"(\Q"等后端准备好 “)+ 原型化建议算法”的多种方法.... 在“MS K6”星期结束时,我们将评估我们所学到的东西,

但请注意: 您仍然有一个混凝土的“ "@done @ "Q” 条件 “ MS K3 星期” 然后评估“).+你#'QAre” 你不只是无限期地建造这些勘探, 这些探索经常是在像 SCRUM 中被称为“ I'_Spike'” 的“ MSCRUP” 地图上进行的。

### Spikes &SprintsMS K1

斯派克(Spike)是其中之一 @'go有一出戏, 并且想出这个技术的动作。 它能持续多久? 只要一个短写@(or longs), 但通常只是几天而已。 当我做了这些口吻时, 我一般会要求在结尾处发一封邮件:#(或维基邮戳等,

斯派克狙击手在结尾处预计会有可完成的任务。 “(”除了参与的人之外,还有其他人可以测试“循环”的 SpikmK1}一个Spik Might拥有但可能唯一的可完成任务就是团队的知识.

我让Devs选择一个未来探究的“(”计划, 但往往只是阻止小Jim 继续研究IT&).。

## 防止在发展过程中的恐怖范围

即使有清晰的“"@done @"}标准%, 范围也可以隐蔽地发现 “.’ 边缘案例” 你意识到用户需要一些你曾经拥有过的‘'’ 考虑过$. 您如何在不打破您对完成定义的情况下处理此问题? _?

**文档它',# don'}不做就去做吧>.*** 当您发现需要添加的新东西时 @ , @ 更新 spec . @ 明确显示范围已改变@ MS K2 @ 获得利益攸关方的同意 @ MPK3 @

这有两个目的 :

1. **可见度** @- 每个人都知道范围改变的原因
2. **成本意识** @-_ 利益攸关方看到添加事物影响时间表

如果您的布料不断增长 ,,那么#'是一个信号\ . 或者你正在构建错误的东西{(} 并且需要退后并重新思考_),或者这应该是多重特性},或您需要缩小范围来运送有用的东西

## 何时调用完成

在某些时候, 您需要发运“ . ” 。 这个功能需要完美@ ' @ title to be useful * .}

一个良好的测试 : **用户能否从此功能中获取值@? @% 1**

若是“, ” , 您可以在下一版中重新插入“ . ” Done doesn't ''\> 意指 “ MS K4" 将永远不会被改进 *#." 它意味着 “"” 能很好地解决用户受益的问题 我们可以继续其他工作

如果您没有完成 ', 您还没有完成 @ MS K2 @ 无论您的语句是怎么说的@ . @

最难的动作是“'@t start storking work” @; @ it'}停止工作#._clear "{done}"}标准使得停止成为可能

但请记住,您必须权衡是否向每个人发放该软件。 ,B+/UAT+MS K3+用户验收测试“%SK4+#关于'ZA风险的商业决定”\.}有时公众是他妈的DUMB, 并且看到部分完成的预览功能: “GOSPEL”为您的系统质量=.+@如果一个受控群体的问题更安全的话, 一个被控制的群体会比较安全吗?.+#

<img src="https://media1.tenor.com/m/hl4H1KOXEMcAAAAC/bongo-cat-keyboard-smash.gif" height="300"/>
# 规格审查程序

当您完成写入 ; 时完成的是一个spec@'}当它被使用它的人审查过的时候完成

## 象代码审查一样处理特征审查

我在微软:所学到的最佳做法 **与代码审查一模一样的工作** 虽然微软的'男孩俱乐部 ' 经常让审查感觉像角斗场 如果有人是鸡巴的话

在审查 specs\ @:}时

- **提问** @- @ @ " @ what happen if X 发生时会怎样? @ I?"是'@ t批評@; @ it_' @sindow a ground
- **建议备选方案** 你是否考虑过你的方法吗? 开始讨论
- **指出失踪案** - @ @ MS K1 @ this doesn't ''# t覆盖 Z 假想@"}帮助完成图片
- **挑战假设** 为什么我们这样解决它? 可能显示更好的方法

当您的特性正在被审查时@: @ {}

- **问题就是机会** @-# 他们揭示了什么? '}你错过了什么
- **建议改进规格** 不论你是否接受他们,
- **它不是针对个人** {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}关于让工作做得更好
- **审核人可能错了** @-@ 解释为什么你的方法有意义吗? ,#他们也许也能学到东西

最精细的评语是对话 . 你来回地说\".你互相学习"\". 出现的情况比任何人都能单独写到的要好

## 由谁进行审查

从所有重要角度 获得评论@: @%

**开发者审评** “- ”这是否真的有效?“? ”我们有没有技术上的限制? 我们是否有技术方面的限制?“'”考虑过吗? ?是不是有足够的细节来实施‘? ’? 如果你正在建造这个“MS K5” 你会有什么问题呢?

**产品审查** @ - @ 是否这解决了正确的问题@ MS K1 @ 符合产品战略吗? @ I?} 什么是'Qs missing @ MPK4是否“ " @ done @ OMK6}标准实际上表示用户的值=? *

**设计审查** “-”用户经验是否有意义? 我们有没有考虑过可访问性?“? ” 那么移动机呢?“?”是解决了用户的“MS K4”问题,还是只是建构功能吗?”

**质量A审查** “-”我们能否测试这个“? ”是否接受标准足够明确?“MS K2 ” 那么边缘情况呢?“? ”会出什么差错?‘?’吗?

您不需要来自每个人的正式签名@-QO}您需要他们的输入 才能让这个页面更漂亮 @.Q 把它想象成“"Q 请求提供备注” @MS K5Q 而不是“"Q 申请批准_."Q

## 共同审查问题

优秀的审评员会问问题来改进Specé:

- @" 如果用户做了 X?" @ @ @ (# 前置案例@)}会怎么样?
- @"_#这如何与现有功能 Y?"}{({position=% )}互动?
- " @What@'}如果依附 Z 是' @t ready @?" @\ MS K4#risk_) @
- @" @% 容我们简化它, 而不是W_?"} @ (@ options)}
- “"”我们怎么知道这个成功与否?
- "什么是我们不做的 ?"+#(_COSO})

这些都是真正的问题,

## 输入反馈

你接受所有的建议吗? ....

1. **认真考虑** " 他们不理解"
2. **如果你接受的话** @-更新 spec,}感谢评论员
3. **如果你不接受的话** @- @ 解释为什么@, @ maybe they#' @re missing context
4. **如果它超出范围** @- 添加到 <% 1> 范围外的@" 或{"} 未来增强=" 部分

如果每轮审评结果都显示您没有在听, 或者您的审核者是't engaged @.

在您开始实施前,先从所有这些角度获得审评结果。 “. ”在成本分析中发现问题。“; ” 在生产成本周中发现这些问题。“. ”

# 具体实例@:标记翻译处

要让这一切变得不那么抽象 @,}这里 @ '}我为这个博客所建自动标记翻译功能的外观是什么?

## 问题说明

以英文撰写的博客文章只排除非@- @英语读者=.}手动将每篇文章译为多种语言,

## 解决方案

使用 EasyNMT 机器翻译服务@. @% 此服务将 @:}自动翻译标记文件以配置目标语言

- 监视标记文件的更改
- 提取可翻转文本,同时保存标记下结构和代码块
- 批量翻译提高效率请求
- 生成带有适当语言后缀的已翻译的标记减缩文件

## 成功标准@( @ what @"#Done @"}看起来像是) @

这些标准告诉我们,我们何时才能停止研究这个特性?

- 将新博客文章自动翻译为所有配置的语言 @_BARBAR_:}西班牙语@,French\,意大利语{,}德国语}#,葡萄牙語},}中文}<,阿拉伯語},Hindip,日語}日本語}MSQQQK10韓文MS K11荷蘭,俄羅斯MSG13
- 翻译后的文件保持与原始文件相同的标记减缩结构
- 代码块@, @ 图像 URLs @ ,}和格式保持不变
- 翻译在 @15 分钟内完成,
- 系统只能重新@ - @ translates 已更改% MS K1} 的文件通过 hash 比较校验\ )
- 即使临时无法提供翻译 API, 服务也成功启动
- 翻译过程中的错误被登录, 但 Don@ ' @ t崩溃程序

注意这些是具体的和可测试的 @.}当所有内容都达到<,> we\'re done.}我们不做'}继续添加诸如{"}翻译质量评分@"}或{MS K8}文译编辑_"}这样的功能 除非我们明确扩大“.”

## 范围

- 处理标记文件的背景服务
- 与《方便NMT》翻译APIPI相结合
- Hash-基更改检测以避免不必要的重复@ -翻译
- 处理 EasyNMT @'}%s 单词限制的批量处理
- 在多个 EasyNMT 实例中平衡的回合-robin 负载
- 在翻译时保存标记的语法@ , @ 代码块\ MS K1}和图像

## 超出范围的范围

- 手动翻译编辑的用户界面 @ (_ 未来增强@ MS K1\ {}
- 翻译内存或词汇管理@(如果出现质量问题, 可以添加 @)
- 实时-时间翻译@(}后地处理是可以接受的 @)
- 代码区块内密码注释的翻译@(}故意排除 @)
- 翻译的自动质量评估@ ( @ manualuple review 需要初始考核@ MPK1

## 技术制约因素

- EasyNMT 每个请求都有 {~500} 字数限制 *\ (NOT true [多数情况下, - @nmt](/blog/mostlylucid-nmt-complete-guide) 能够采取他妈的BOOKS)}\ ;}必须相应批量
- 翻译服务可慢速 {(~15} 第二次超时/ 每批 * ) _ @ MS K2 mostlylucid- nmt is aroudn {3} 秒@)}
- 合理性能需要多个简单NMT实例@( @nope mostlucid @-}%nmt @ 😜)#
- 文件系统 I/%O 一定不能阻挡主应用程序

## 特定时的开放问题

- @ ~~@ 是否我们应该缓存译文以避免 re-} 翻译未变的文件\ MS K2} **使用文件散列比较**
- “~~”我们如何处理简单NMT服务故障?“?~~” **解析@ : @ 日志错误和跳过文件\ ;} 这将在下次服务重新启动时重试 @ MS K2 @ a 断路器 @ MPK3 @ maybe a pigage @ I?)**
- 我们用技术内容可以看到什么质量问题? **《船舶与评估》和《手册审查渔获量问题》**

## 执行期间我们学到的东西

在完善Spec:的开发过程中出现了一些东西。

**批量大小图**: 以 @20-line 批量@, 开始, 但发现%10 线条在维持上下文@ MS K5}同时使用 EasyNMT's 字数限制时更可靠

**图像探测**正在将标记中的图像文件名发送到翻译服务@,断句解析 @.添加扩展文件检测以跳过图像路径@MS K4

**服务可用性**“:EasyNMT”在启动时可以是温和的,“. 添加健康检查查询 `/model_name` 尝试翻译前的端点@. @%

**Hash 仓储**: 原计划为文件 hashes,}但基于文件系统{-}建立的数据库存储 `.hash` 此服务证明文件简单, 并避免数据库依赖性@. @%

这些学习被重新整理成文件,并附有类似内容。

## 为何这粒子起作用

该说明遵循了所讨论的原则 :

- **问题=M-}第一位**@:BARBAR_ 以实际问题开始的@(_manual transfer is slow #)}不是解决问题的方法 *#(_使用 EasyNMT)}
- **明确范围**@: 明确点出我们在做什么? '}翻译记忆 *,}UI编辑=)}
- **详细程度正确**: 指定了需要发生的事情 *\ MS K1 preserve 标记下调结构 * 没有规定确切执行
- **生活文件**开放问题得到解决,决定随着执行工作的进展而记录下来。
- **协作**讨论并解决了@,}然后记录下来

@: results a production 几个月来一直在生产中运行的功能 @ , @ 自动翻译每个博客文章,

# 有关危险物种的共同问题

根据我们所覆盖的 ',这里的问题是经常出现的问题

## "}我真的需要一个小特征的插件吗?

它取决于 @ " @ small@ ."} 如果它真的微不足道的话 @ I' @ 更改按钮 text_ , @ 修补打字机@ MPK5 @ no.# 但是如果你需要\ MS K7 @

- 估计需要多长时间
- 获得利益攸关方的同意
- 确保质量保证知道如何测试
- 文档您为未来参考而建的建筑

然后是“, ”甚至一个快速的插图也能帮助 “. ” 它确实需要正式地“MS K2 ” 在一张涉及问题“,”的票中加上几个小点,

如果您能解释“"”和“done”在两句中看上去像什么? “,”您需要一个spec.吗?

## @"#我如何对待想要一切的利益攸关方?

解释一下,:...

1. **添加更多增加时间框架** @-+}他们想要在「2+周」中出现A型,
2. **下一步可以办到** @- "_BARBAR_'}这主意不错 让我们来做核心工作吧
3. **时间--_Box部队优先事项** -=YTET -伊甸园字幕组=- 翻译:

如果他们坚持每件事都同样重要的话, @,_建议他们选择要推迟哪些其他工作来代替@.}通常会很快澄清优先事项\.

## @ " @ @ 如果标本变化如此之大 @ ' @%s 从一开始无法辨认 #?"#

只要:就够了

- 文档中的更改@(}更新了 spec,}唐尼•'}仅修改代码=)}
- 利益攸关方知道哪些变化和原因,
- 你学到了一些东西\(}这些变化反映了学习的改变 □,}不是混乱 *)*

如果由于您完全误解了最初的问题, 无法识别该图解“ , ” 。 “ ' ” 在下次启动前会有更多发现的迹象@ MS K2 ” 但是重复和学习将会被期待 @ . }

Spec's 版本的历史应该讲述您学到的东西的故事@.

在启动阶段,这叫做“'Pivot' ” 你开始构建一个游戏, 最后建立一个惊人的短信系统, 代之以 “..你有没有听说过移动游戏 Glitch'}(没有听过手机游戏)

<img src="https://media1.tenor.com/m/8DRynH5nEE8AAAAC/if-you.gif" height="200px" />
Don'}不要太上锁了,如果有的话 '机会

## @ "@ should I write screpes for bug fixes_ ?"} 是否该写入错误修正的描述书@ MS K1 @

对于关键昆虫来说 : @ no@,}只要修补它们#. @

对于影响多个系统或需要改变建筑结构的复杂错误来说 @: @是 @MS K1}对待它就像一个特性 @ . @ what'}#(_ problem@),}你是如何去修正它的?(\solution=),}你会如何知道它是修补的吗?

使用您的判断@. @ 如果修正为“'}不明显或可能有副作用” @,}一个快速的插件帮助\.}

对于安全错误来说,这是非常真实的。 您需要知道您正在修补什么或' 以及如何验证它。 @ & 和 WIDELY 共享修正@.

## @"# 形式应该有多正式? #?"@

有些团队对JIRA的入场券很满意... ... ....

手续的重要性小于内容@: @%

- 清除问题语句
- 拟议的解决办法
- 工作的定义
- 明确范围边界

您可以在 Markdown @ , @ Comagination@ ,} Word_ MS K2 或纸巾上拼贴的写入该格式。 格式是 < '\ tmatter> @ I;, 思维是{.}

这是对于Agile Development ;和为什么我讨厌 Agiles Frameworms (和SCRUMMS K2的常不提及的关键所在。 WHOLE Point的意思是,像一个敏捷的外观一样,你的程序需要适应性过快的. 如果写作给一个团队工作一点 does a little docs down to a small team technology but full docuts works for a big one...", do that '.\}
如果“5”日间周期只为一个团队工作,但“2”周则会为另一个团队冲刺吗? “,” 。
使机器尽可能顺利运转

作为管理者, 查看您的输出是 @ ; @ { 如果董事会需要一个燃烧的图表 那么您如何使用当前数据构建一个 MS K1} ? 如果您需要使用可读@ ' storypoint_ '} 这将获取您所需要的数据\ I?}

最终,你们团队产出的特点和利益攸关方需要什么? 如果你们能够减少对团队的影响的话。 那么,'是你们的部分。

## 如果只有I'是这个项目的唯一开发者 ?"

在六个月内,你仍需要Pecress , maybe so @. 当你需要延长此功能时...", 你赢得了'。

而且你还需要去:

- 给付你薪水的人的估算工作
- 定义“" @%done@"”意味着什么,以便您能够完成
- 记录您为日后可能加入的其他人建造的东西

写入您自己的标准就像寫作單位測試@: @ it feels less now but save time later *#}(就像我 @,_I'} @ I ForGETship Twork_,}(Oreget phighnow_MSK6) 把它寫下來,所以它就可以完成 @MS K7 @ 即使它“'Qs” 只是一个 Github 问题列表\□). @

## 我如何对付伪装成'的 范围爬虫?

当有人说""OH,我忘了提一下 "XMS K3",那"'没有澄清" ;它"新的范围"

回应:: "_BARBAR_'}(这是一个很好的要求) @,}但这不是我们在Spec.中商定的内容 Let{'}将它添加到“范围外”部分,

如果真的有要求的话,请不要紧 (@to @-#to}-$Have{),}然后是:

1. 更新规格以包括它
2. 更新估计数
3. 商定新的时间表或根据原定时间表削减哪些时间

永远不要静默吸收范围爬虫 它会破坏你的估计和可信度

## "我能不能在素描完成前开始编码? #?"

是,如果你能回答开放的问题 're prototyping

学习的原型是好的,: "}我们有三种方法...

建筑生产代码还没准备好 就意味着你猜测要求... .......

Explication:如果您是产品所有者和开发者 @(solo project@),你可以同时标注和编码\.,但您仍然可以记录您的决定

“'”是一个很好的方法, 能够让这些肾脏充电来开始“.”评估技术的方法。 “,”写着普通锅炉板等“MS K4”

## 万一我的球队不看分数呢?

找出原因

- **太长了 ?** 使其更短@ , @ 增加可扫描性
- **太正式了 ?** 使用较轻格式
- **无关紧要的?** 确保他们真的需要你提供的细节
- **坏习惯 @?** 开始要求开发开始前进行规格审查

如果人们跳过标准审查,然后编造错误的东西 ', 使疼痛显现出来'."\ "" 这在标准中是'QT 所以我们需要重新制作它\ "\ 是一个学到的教训_.\ {

如果它们被埋在隐蔽的维基百科中 没有人会读到它们

## 我该花多少时间去买一台

开发时间的缩略语规则 .

@2-_周刊特写@:} @ 1-2_ 天天在Spec.#
半天时间。
用于“2-日”功能 “:”一两个小时

但不要太虔诚一些。 有些功能需要更多更新 -前期思维。 其他的则显而易见,

如果您花更多时间在外观而非执行上, 请记住 @ :# spets是帮助您工作的工具@ MS K5 @ 不是艺术作品 @ MPK6 @ @

## 为何估计总是错误?

因为软件估算根本上很困难 @._这里#'}这让人不舒服的真相@: **仅当您在“,”之前完成此任务时, 在环境中 < , > 使用这些不更改要求的工具>{,} MS K4\ 来估计工作是否有效@ .**

几乎从未发生过

每次你估计 你和:打交道时

- **未知未知** “- 问题您不知道”“'”还不存在。
- **已知未知** -你所知道的问题存在 但不知道如何解决
- **变化中的需求** 在你建造“(”时,CEO有一个疯狂的主意。 “..”发生在我身上 我曾经接到我的Hulgely DRINK客户在淋浴中 与一个愚蠢的IDS &)打来的电话
- **环境差异** - 图书馆在您的最后一个工程中工作@, 但这一个有不同的附属关系 在IIS里运行了全部 但是这个需要运行 Linux @& Kestrel.
- **工具问题** 建筑系统=,}部署管道,}或测试环境行为不同
- **融合惊喜** -你拨打的API? MSSK1
- **人文因素** 或处理生产问题。
- **财务财务** @-_有时需要更小的版本, *将发表一篇关于 @'_Startup dev'}的文章, 以及这与未来#'/clusic Dev{'}有何不同?

这就是为什么:

- **距离比拍点估计值** @- @ @ "2-5 @ days @ MPK2} 承认不确定性
- **Spikes 帮助** @-_#在估计全部工作前花一天时间调查@;}这个科技比我估计的要难或容易,
- **时间--_Boxing 工作** 将花上一周时间, 看看我们能得到什么?
- **历史数据事项** - 跟踪相似任务实际花费的时间
- **倾斜是诚实的** ' 会更经常地说正确

<img src="https://media1.tenor.com/m/vrpp1cfR6XgAAAAd/star-trek-star-trek-tos.gif" height="300" />
工作越新奇,你的估计就越差 你造了同样的CRUD

这就是为什么 specs 需要清晰的 @ " @ done@ MS K1 @ 标准 @ MPK2 @ 您可以 < '} t 估计准确=\ ,{ 但您可以确定何时停止@ I.} 这'_ 更有价值@ OMK7}

## “"”关于研究或勘探任务的规格如何?“?"”

这些需要不同的标准,而不是“"” 功能X工作@," @ it'}{"_we}'}回答问题Y#."}

勘探示例框:

- **问题**:我们不知道A或B是更好的建议引擎
- **解决方案**“: 支出”“1”周原型,两种方法都有
- **已执行标准**“: ”我们拥有每个“,”的工作原型,用于两个“MS K2”的性能衡量标准和建议。
- **不适用范围**我们决定生产2号之后,我们又来了

Time-Boxing对于勘探来说至关重要 没有它,研究任务永远不会结束

## @"}我该如何为我所熟悉的 ' 功能写图解呢?

从你知道的开始 :

- 问题声明 @(_你应该知道这个#)}
- 最能猜到的)
- 开放性提问: @(#你所知道的一切 #'#t know@)#
- 即使粗鲁的) 也符合标准

标记区域为 @ " @%TBD@ MS K1} 请诚实地描述不确定因素\ .

然后使用常规审查程序来填补空白@. @ 审查期间的谈话经常澄清您所理解的内容 @ '_ 不理解 @ MPK2}

记住::=未完成;-=but}-=honest beats full_-@but+-wrong=.#

## @"Can GitHub 发行#/_Jira的票是Spec?"}

绝对的.QQSpec doesn't\an7\bord0\shad0\fn方正黑体简体\fs18\b1\bord1\shad1\3cH2F2F1F}JitHub 或 JIRA的票可以作为非常完美的标本

关键在于内容@, @不是容器 @.}一个好议题 @MS K2_as @MSSK3{spec 应该有#:}

- **清除问题语句** 我们到底要解决什么? 为什么?
- **拟议的解决办法** 我们如何接近它?
- **已执行标准** - 特定, 可测试接受标准
- **范围边界** “-”“'+s”,“MS K2+%s use 标签,例如“"_Out”、“-@of @-{ospera"}”等项目显然没有做‘)’吗?
- **开放问题** - 标注这些标签, 用“ MS K1}问题” " 标签或类似标签

使用问题的好处

- **在一个地方每件事物** 讨论:,和任务跟踪
- **易于连接** 参见相关议题
- **内建@- @in 版本** - 问题编辑历史显示要求是如何演变的
- **熟悉工作流程** 队伍已经知道如何使用它

将问题用作speces=:}提示

- 使用未在批注中埋藏的 Spec,的问题描述@( 人们读到描述 @)
- 更新描述, 以显示更改@)}
- 使用标签来表示状态@: @ @ "_ 需要 @ I-} @spec,"} @ MPK4spec{ MS K5# 已备@ ,"} @ @ *"} @ spec=-}(changed) @,"}等 @ mskK10}
- 讨论内容很重要,
- 支持文档的链接@(&diagrams @,}模型={)}(如果需要的话)

测试“:”可以让某个人读懂这个话题, 并知道该如何构建‘,’,

## “"”关于受监管行业的特征如何?“?"”

如果您在医疗保健领域 ' ,_Finance @,}航空航天=,}(或者其他受监管的领域)...",你可能需要更正式的规格来遵守吗?".#原则仍然适用\:}

- 从问题开始
- 明确界定
- 随你的学习而发展
- 检查保持当前状态

但您也需要 :

- 遵循您所在行业的文档标准@' @%s
- 包含要求的章节 #(#安全分析 ,}监管合规性 @,_审计线索@)}
- 必要时获取正式签名@-_çoffer
- 保存更详细的版本历史
- 在项目结束后保留设置@ (_ 用于审计 @ MS K1} @

即使是在受监管的环境中 , 敏捷的采样工作. 你只需要跳过更多圈子就可以跳过 MS K2 这块斑点还是个工具 ~; it' 只是满足调制者和开发者需要的工具

# 在结论中的结论

在灵活环境中写入好的特性谱是一种技能,它能通过练习来改进“. ” 。 目标是在前面写出完美的参数 (}{他们没有@' t的存在}); it{' 编写有助于你的团队随着学习而开始和进化的规格_\ O.

关键原则#:

- **标准是工具@, @% 不是合同** - 添加您需要的细节@,随着学习而进化
- **开始于问题@, @ not the room** 执行源自对问题的了解。
- **合作? ,吗?** 人人贡献力量,
- **定义“" @%done @"}明确定义** *- 预防地物转移,使用混凝土*, 可测试标准
- **范围外以外的事项** {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你做了什么?
- **预测变化** - 功能随着你建立这些特性而变化 @;捕捉到学习
- **检查保持当前状态** 它们成为测试和今后发展的基础。

最难的部分是 @'_t 写入初始的spec.} ItQ'_s knew when to stop working on a post@.}不知道何时停止工作,没有明确的#"\done @MS K5}标准=,}功能会长成永远 永不发运{.}

这就是为什么简单估计如此困难的原因 . @你#'}不只是估算执行时间@; 你'}你在估测学习时间_.吗? 要多久才能找出实际解决问题的办法?

您能做的最好的事情是“:” 清楚什么是 “"@done @"” 意指“MS K3}时间=$-box 不确定性_, ” ,并在您学习". 时更新该语句。 请把它当做代码=: 版本@, refactor it, 改进\.

良好的设置让开发者有能力智能解决问题, 同时知道他们何时可以停止“.” It'}它是一个对话启动器 “,”而不是一个紧身衣{.}

如果您是一位开发者, 读取一个不符合'#t 有道理或者没有明确的“"@done @"”标准的话。 “:+”会大声地说‘.’ 它不难用到$;} ['+s is professional MSK8] 现在整理它比构建一个在接收整个应用程序之前不断增长的特性更好。