# Аgile Speccing: Письмо про характеристики, які насправді працюють

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

# Введение

Протягом років я читала: МСК1 . Я написала сотні характеристик. МСК2 . Деякі були блискучими, а деякі жахливими. МSK3 . Більшість - жахливо жахлими. . Різниця між хорошими та поганими характеристиками - це не довжина чи формальність, а МСК6 , і МСК7 - це те, чи це насправді допомагає розробникам побудувати правильну річ, не знущаючи їх до божевілля в процесі .

Ось чому я навчився у Microsoft, що змінило моє ставлення до спеціаліз **Це не біблія.** Як і будь-який інший інструмент, ви використовуєте його, щоб зробити роботуM SK1 ви додаєте стільки деталей, скільки ви маєте , зацікавлені сторони M SK3 і розробники мають піти наперед . Потім ви пристосовуєте його МSK5 змінюєте його

Погляньте на опис як на священний. МСК0 - незмінний документ, і ви - МСК1 - будуєте неправильну річ ідеально. МSK2 - дуже швидко рухається в неправильному напрямку. М СК3 - сприймайте його як живий інструмент, а ви - ' - будуєте щось, що насправді вирішує проблеми.

Цей гнучкий підхід до спеціаліз створює певний виклик: якщо функція може розвиватися так, як ви її вивчаєте , як же ви її знаєте?

Загалом, це принцип, яким я живу в своїй кар 'єрі. МСК1. Кожен процес, будь то деталі, МСК2, заповнення звітів, МSK3, навіть аналіз кодів і т.д. М СК4 - це налоги. ММК5. Як і всі інші податки, вони мають приносити ціну за гроші, щоб отримати кращий результат, ніж було б без них, або вони мають піти. ММС6. Якщо ваш процес каже, що вам потрібна жорстка система розповідей та згортання графів, але жоден злодій не використовує їх для чогось, окрім знущання вашої команди.

**По суті, МСК0 - це інструмент для спілкування, щоб покращити функцію, а не dogматичний ",", що не змінює закону**

[TOC]

## Чому гнучкий ( і що це насправді означає

Гнучкий - це: МСК0 , "-", а також клейкі нотатки, МСК2 . **економічна стратегія для створення правильного під час невизначеності**. Зразки живуть всередині цієї невизначеності , тому вони також мають бути гнучкими [Маніфест гнучкості](https://agilemanifesto.org/), перетворюйте це на те, як ви думаєте про будування будь-чого . Думайте про це як про модель розробки продукту

### Перші принципи

* **Різниця по замовчуванню, не є виняткомM SK1** Ринок рухається. МСК0. Ви здивовані користувачами. МSK1. Відлежності стають неможливими. .. Спектр, який може стати флексним.
* **Навчання перевершує передбачення.** Ви відкриваєте справжні потреби лише після того, як люди торкаються речей. Аgile робить навчання *дешево і швидко*.
* **Потік над героїчністю.** Невеликі, тривалі рухи перевершують великіM SK1 нерідкісні “ великий удар” падінняMSC4

### Економіка: Чому це заощаджує гроші?

* **Miniмувати вартість помилки.** Короткі цикли + легкі характеристики показують, що погані ідеї швидко помирають, а не через шість тижнів будування
* **Запізнення невідворотних рішень.** Залиште варіанти відкритими до останнього відповідального моменту.
* **Скорінити запаси.** Половина МСК0 написані епохи та масивні МSK1 майбутні ” розділи - це робота МСК3 в МСк4 прогресовий борг М СК5 корабельні тонкі шматочки M СК6 банк цінності М S К7

### Рупи зворотнього зв 'язку - це продукт

Кожна петля зменшує відстань між “ideaM SK1 і МSK2потрібний”:

* **Шпек ⇄ DevM SK1** неможливих зафіксувати, перш ніж код цементує їх.
* **Dev ⇄ QAM SK1** перетворити критерії прийняття на перевірки, які можна виконати.
* **Внутрішнє харчування для собак ⇄ ПользовачіM SK1** довести, що це вирішує реальну проблему, не уявну

> Обновлюйте спецификацію після кожного циклу. журнал змін - *історія того, що ви вивчили*.

# Що робить хорошу характеристику

## Модель розв 'язання проблеми-

Найважливіший принцип для написання описів **Почнімо з проблеми, не з розв 'язаннямM SK1**

Ця модель проста:

1. **Проблема** - Що МSK1 насправді зламана МSK2 Яку болю переживають użytkownicy ? Яка можливість створить функцію мSK4
2. **Рішення** МSK0 Ось як ми запропонуємо його виправити / скористатися можливістю
3. **У масштабі** - Що ми робимо в цьому спектрі
4. **За межами спектру** - Те, що ми - МСК1 - явно не робимо МСК2 - однаково важливе МСК3 - вводить у майбутнє планування і зупиняє питання: СМСК4 - чому ми - МСК5 - не робили x

Я ' бачив безліч спеціацій, які стрибають прямо в МSK1 Пользователь натискає на кнопку X, яка називає API Y

Пам 'ятайте, що програмісти - це машини, що будують характеристики. Насправді. (код - це інструмент, що надає характеристики. *потрібно робити* NOT як це зробити. якщо у вас є людина UX, яка є відповідальною за UX-спек, то dev і вони повинні працювати разом *для користувача* що може змінитися, і будь-хто має можливість підтримувати зміну ( у спеціалізації МSK1 і мати цей процес перевірки, щоб перевірити ідею

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

## Прозорість призначення

Перед тим, як написати одне слово про впровадження, вам потрібно відповісти на одне запитанняM SK1 **Чому?**

Чому ми це створюємо?

Хороша спецификація починається з:

1. **Показ про проблему** - Що ' зламано чи не втрачено
2. **Вплив користувача** - Кому це цікаво і чому? МSK1 Якщо це можливо, то виміряти.
3. **Критерії успіху** МSK0 Як ми знаємо, що ми ' розв 'язали це ? Зробимо його вимірюваним МSK3
4. **Жодні цілі** - Що ми явно не робимо ? Це запобігає зануренню в поле зору та безкінечним дебатам МSK2

## Справжній рівень деталі

Це те місце, де більшість спеціаліз йдуть tits-upM SK1 Надто неяскраво і розробники залишають припущення; надто деталізовані, а ви ' займаєтеся мікроменеджментом вибору розробки, який розробці краще підготовані зробити

Трюк полягає в тому, щоб визначити **Чого** потрібно робити без рецепту **Як** це трапляється. Наприклад

**Хороша**МSK0 "Когда пользователь намагається надіслати бланк з неправильними даними МSK2 він повинен отримати безпосередній зворотній зв 'язок, що вказує на те, які поля потребують виправлення ."

**Погана**: " Під час подачі бланку МSK2 кнопка відправки МСК3s onClick обладнатель має викликатиvalidateForm М СК4, що повторюється за допомогою бланкаФілдери, перевіряючи кожен поле М סК5Werт проти йогоvalidaції М S К6регексова властивість і якщо щось не вийде, треба викликати showError М ็ С К7 з полем M С К8 ім 'я таvalidaція М Ш К 9 पैраметри повідомлень М В С К 10

Перше вказує мені, яким має бути інтерфейс користувача; Я можу застосувати це в ReactM SK1 Vue , Vanilla JavaScript, чи Carrier pigeon для всіх, що це значитьМSK4 Друге припускає деталі застосування, які можуть бути повністю неправильними для технічного стека або introduce unnecessary constraintsMSC5 Різні люди мають різні переваги часто людина, яка пише спецификацію не є МSK6 не технічна МСК7 не є\ МС К8 не той, хто пише код М С К9 Уявіть себе водієм таксі, і вам не говорять про кінцевий пункт, але кожна зміна гальмівки

<img src="https://media.tenor.com/la1K-_RBV0cAAAAi/chick-stab-chick.gif" />
## Використовуйте зображення / діаграми потокуM SK1 Перейдете до точки

Пам 'ятаєте, що ви? МСК0. Ви намагаєтесь переконати людей зрозуміти, що Ви? МSK1. Ви запропонуєте. МSK2. Деякі команди включають документи Фіґма. МSK3. Сюжетна дошка. \ / ux \ МSK5 \ Spec \') \ Або зображення інтерфейсу, який створив дизайнер. ♪ МSK7 \ Як і все інше, хоча це - МСК8. Допоки ми не спробуємо його. МСК9. Пропонування допоки вони не пройшли зворотній зв' язок. *впевнитись, що вас зрозуміють*. Використовуйте будь-які інструменти, які вам потрібні

[В вікі морська медуза .js діаграми жахливі для цьогоM SK1 ](https://www.mostlylucid.net/blog/category/Mermaid); пам 'ятайте, що штучний інтелект великий в генеруванні цих даних також, беручи до уваги текстуальний опис

Деякі люди можуть аналізувати написані описи, деякі потребують фотографій та фільмівM SK1

```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]
```

## Випадки на крайі і розв 'язання помилок

Якщо є одна річ, яку я зрозумів: **Ви знайдете способи зламати ваші речі, які ви ніколи не уявили.**

Хороша спецификація не лише описує щасливий шлях, але й розглядає

- Що відбувається, коли мережа не працює всередині
- Що робити, якщо użytkownik не має права?
- А як щодо одночасних модифікацій?
- Як ми справимося з частинними невдачами у розподіленій операційі?

Вам не потрібно розв 'язати всі ці проблеми у спецификації, але ви повинні визнати, що вони існують. МSK2 Ніщо не турбує розробників більше, ніж відкриття на половину шляху до втілення того, що ніхто не думав про те, що відбувається, коли зовнішній інтерфейс API зазнає краху.

Для MANY це ' ймовірно, що вони МSK1 не мають можливості для цього спектру МSK2 Ви можете мати мSK3 технічні характеристики ' які розповідають про деталі втілення та технічні рішення для M' технічних питань мSK6

## Увага до безпеки та ефективності

Ці речі не мають бути задумами, що їх приховують під час перегляду коду. МСК1. Якщо існують певні вимоги до безпеки. МСК2 рівні аутентифікації. , шифрування даних. МSK4 журналування аудиторії. ММК5 описати їх у штрих-коді.

Аналогічно,, якщо є важливі обмеження ефективності M SK1 Цей пошук потрібно завершити під 200 ms для наборів даних до МSK3 мільйона записів МSK4 помістити їх в спецификацію \ . Не дозволити розробникам пригадати не \ МSK7функціональні потреби \.

# Структура хорошого виду

Тут' це шаблон, який я використовую для спеціалізування

## 1. Обзор

Один або два абзаци, які підсумовують те, що ми будуємо і чому це важливо. Ваш директор повинен мати змогу прочитати лише цей розділ та зрозуміти цінність.

## 2. Фоннґлог МSK1Контекст

Яка є теперішня ситуація? What' what prompted this feature? What have users been asking for? What would help us make more money? ? This helps developers understand the problem space without having been in every product meeting?

Я зрозумів. **Історія користувачів** з в 'язаними людьми в ,, тож це не просто список перевірок, а жива карта того, як різні види користувачів взаємодіють з системою

---


## 3. Сказки користувачів МSK1з персонамиM SK2

Ці історії - це не просто коробка, **втілити справжніх людей** і їхніми цілями. Ви знаєте **вся суть створення цього лайна**.
Прикріпляючи кожну історію до особистості, ви змушуєте себе думати про реальні моделі використання.1 мотивації,2 обмеження.3 Формат простий, але потужний

Врешті-решт, люди - це чудовий спосіб визначити, яким чином ваше програмне забезпечення може служити різним видам користувачів. Можливо, Алексу потрібен панель приладів для перегляду проблем з безпекою у вашій функції, можливо, Морґону потрібні його обмежені права, щоб зупинити його руйнування речей і т.д.

**Як [особистість / тип користувачаM SK1 Я хочу [зробити щось] Так що [Я досягнув певної мети].**

І **“ тож МSK1** clause is the safeguard against building features nobody needs

---


### Наприклад, Personas

- **Алекс Адміністратор** МСК0 піклується про контроль МSK1 контроль , і ефективність.
- **Джеймі Зазвичайний** – цінує простоту і швидкі перемоги
- **Прия Паукер** – підштовхує систему до своїх меж , хоче розширеної налаштування
- **Морґан** – потребує інструкціїM SK1 посадку на борту, та гарантіїMSC3
- **Тейлор** – не користується системою щоденно, але потребує видимості в результатах

---


### До прикладу історії користувачів

МSK0 Персона | Історія МSK2 Чому це важливо |
|---------|-------|----------------|
МSK0 Алекс (AdministratorM SK2 | Як один **Адміністратор**, Я хочу надати роль та права **щоб** Я можу гарантувати безпеку та дотримання даних. M SK1 Захищає неавторизований доступ і робить систему надійною
| Джеймі МSK1Підзвичайний użytkownik ) МSK3 Як **Незвичайний користувач**, Я хочу просту панель **щоб** Я можу швидко побачити найважливішу інформацію, не переймаючись нею.
МSK0 Прия (Power User ) МSK3 Як **Пауэр-пользователь**, Я хочу створити custom workflows **щоб** Я можу автоматизувати повторювані завдання і економити час
МSK0 Morgan (Новый прихідM SK2 МSK3 Як **Новина**, Я хочу інструкції та вказівки **щоб** Я можу вивчати систему, не відчуваючи себе втраченим. M SK1 Поліпшує посадку та пам 'ятку на борту
МSK0 Тейлор ( Індикатор **Заinteresовані сторони**, Я хочу, щоб мені регулярно надсилали повідомлення **щоб** Я можу відслідковувати прогрес без входу в систему.

---


### Чому Personas + історії працюють разом

- **Персонали гуманізують абстрактні речі.** Замість 0 , 1 , ви 2 думаєте про Алекса, 3 , Jamie , Priya , Morgan , Taylor .
- **Історії пов 'язують характеристики з цілями** “ так, щоб clause ” змушувала бути чіткішою МSK2 кожна характеристика повинна служити певному цілі
- **Patterns emerge.** Коли ви налічуєте декілька історій, ви бачите перетинання, конфлікти, пріоритети між людьми.

## 4. детальні вимоги

Це ваше м 'ясо і картопля. Розіділіть його на відділи, які відповідають за функціюM SK1 Ліберально використовувати підголовки . Вміщувати макети чи дроти, якщо у вас є такі; зображення варте тисячі слів опису

Для кожного завдання, вказуватиM SK1

- Сподівана поведінка
- Будь-які обмеження або правила перевірки
- Побіжності в handlingі помилок
- Як він взаємодіє з існуючими характеристиками

## 5. Не МSK1Funkційні потреби

Цілі ефективності, вимоги до безпекиMSC1 стандарти доступностіMСК2 браузерМСК3 підтримка пристроївМ СК4 Не думайте, що це очевидноM СК6 Але в деяких командах це можуть бути WHOLE OTHER TEAMSMSК7 але не думайтеMсК8 не втратите фокусуМсК9 Якщо одна частина вашого циклу перетворюється на водоспад, тоді виMссК10 втратили гнучкість за визначеннямМссК11

## 6. За межами

Ця частина така ж важлива, як і те, що

Чому це важливо:

- **Prevents Scope Creep** - " Але не могли б ми просто МSK2 розмови швидко вмирають, коли ви можете навести секцію "" За межами спектру "".
- **Встановлює очікування** - Stakeholders know what **won't** доставити ( цього разуM SK1
- **Обладнає майбутню роботу** - Помітки тут можуть стати своїми власними характеристиками пізніше
- **Сфокусує команду** - Усі знають межі цієї роботи

Ось приклади речей, які не входять до переліку.

- "Мобильна підтримка ( буде адресована у окремому описі
- "Miграція існуючих даних МSK1поточна спецификація обробляє лише нові даніM SK2
- "Admin UI для конфігурації (початково використовуватиме konfigurаційні файли
- " Інтеграція з Системою X

Якщо хтось стверджує, що один із них не має бути застосований в програмі, то це - розмова, яка варта уваги до початку розробки, а не на половину шляху до її застосування.

## 7. Відкриті питання

Будьте чесними щодо того, чого ви не знаєте. МСК0 не знаємо. МSK1 Обележуйте їх чітко і переконайтесь, що вони будуть відповідані перед запуском розробки. . Ніщо гірше, ніж блокувати розвиток, бо ніхто не вирішував, чи ми робимо мягкі або жорсткі .

## 8. Залежності

Які інші системи/командиM SK1надібності це залежить від? Що потрібно бути готовим перед тим, як розробка може розпочатися ?

## 9. Критерії прийняття

Як QA перевірить це?? Ці дані мають бути конкретнимиМSK1 піддатними тесту文амиМСК2 Бонусні бали, якщо вониМ СК3 написані у форматі, який міг би стати автоматизованим тестом.

# Проблема बगів спектру

Тут щось таке, про що не говорять достатньо **Спекси можуть мати також баги.**

Інспективні помилки трапляються, коли сама спецификація є хибною.

## Як трапляються помилки в спектрі

1. **Невичерпне розуміння** - Той, хто писав опис, не зрозумів проблеми чи існуючої системи
2. **Конфліктні вимоги** - Різні зацікавлені сторони хочуть різних речей, і ніхто не розв 'язав конфлікту .
3. **Технічна неможливість** - Спек demands for something that can 't actually be done
4. **Зміна вимог** - Світ рухався далі, але спецификація не була розроблена

## Обладнання проблемами спектру

Коли ви знаходите конкретну помилку як програміст, у вас є декілька варіантів:

### Опція 1: негайно підняти

Це майже завжди правильне рішення.

Посилайте чітке повідомлення тому, хто є власником опису

- Що говорить спецификація
- Чому це проблематично?
- Що, на вашу думку, повинно статися замість цього? ( якщо у вас є пропозиція

Зробіть це pisemно. (emailM SK1 квитокМSK2 будь-що) так, що там МSK4 є запис .

### Опція 2: Втілити її в будь-який спосіб

Інколи вас спокусує просто будувати те, що виspecіфікували, навіть якщо ви знаєте це. **Зробіть це.**

Я бачив, як розробники впроваджували описи, які вони знали, що були хибними, тому що " це ' це те, що він сказав робити МSK3 і тоді поводилися здивовані, коли QA відкидає їх або користувачі скаржаться на них.

Винятком є те, якщо ви(МСК0) піднімаєте проблему(МSK1) і вам сказали (МСК2) йти далі,, і ви зрозуміли це написати(ММК3). Тоді все гаразд(М СК4), ви(МСК5) зробили свою due diligence(МКС6).

### Опція 3: Самотужки виправити

Якщо ви впевнені, що знаєте, що має казати спецификація, то можете спробувати виправити її самі. Це добре для очевидних помилок у шрифті або в форматуванні, але для важливих змін потрібно домовитися з zainteresowanyми сторонами.

Ніколи мовчки не змінюйте вимоги.

## Preventing Spec Bugs

Найкращий спосіб - запобігти конкретним помилкам в першу чергу:

1. **Учасно залучати розробників** - Отримайте технічну перевірку спецификацій перед тим, як вони будуть завершені ' МSK2 Ми МSK3 виявимо неможливі та крайні випадки, які люди можуть пропустити
2. **Учасно задіяти QA** - Якщо це не під силу ' не можна протестувати, то це не можливо МSK2 не можливо збудувати M SK3 ваша робота полягає в тому, щоб зробити щось, що стане доступним користувачам , QA тут є критичною
3. **Використовуйте приклади вільно** - Абстрактні описи легко неправильно інтерпретувати
4. **Вивірити проти існуючої системи** - Чи робить спецификація припущення про те, як працюють речі в даний момент?
5. **Ітерувати на штрихах** - Погляньте на опис як на живий документ . Так, як ви дізнаєтесь більше під час втілення МSK2 оновлюйте його M SK3 майбутні розробники будуть вам дякувати

# Найчастіше

## Novel-Length Spec

Деякі люди думають, що більше деталей завжди краще.

Якщо ваша спецификація перетворюється на Війна і мир ,

- Потрібно розділити його на багатофункціональні
- Вказують на деталі розробки, які мають залишитися розробникам
- Вони розв 'язують неправильну проблему і потребують кроку назад.

## Невизначна хвиля

Іншою проблемою є: МСК0 МСК1 Створити систему звітів. МСК2 Правильно. МSK3 Привітаємо за це. . Я ' просто щось підірву і ми ' подивимось, чи воно відповідає тому, що у вас в голові.

Якщо ваш опис може бути повністю зафіксований в одній реченні,

## Рішення-Перший спектр

" Ми потребуємо панелі дотиків " це не МSK2 не є обов 'язковою річчю ; це M SK4 це передбачуване рішення MSC5 Можливо, вам дійсно потрібна панель дотиков MST6 але можливо, вам потрібно щось зовсім іншеMST7 Почнемо з проблеми МST8 М ST9 Адміністратор системи може М st10 не бачити, коли є проблеми в системі швидко і легко M ST11

## Переміщення ціль

Требування, які змінюються щодня - це: МСК0; не обов 'язки; МСК1; вони; МSK2; хаос; .. Якщо речі змінюються так швидко, - МСК4; ви не розумієте проблеми, - '; ще недостатньо добре розумієте проблему; - МSK6; зупиняйтесь і робіть ще більше розкриттів перед написанням опису; - M SK7;

## Кухняний раковин

" Коли ми в МСК1, ми там є, МSK2 ми могли б також МSK3 Ні . Ні, ми не могли б Ми могли б 5 t мSK6 Кожна функція має певну ціну \ . \ Якщо ви хочете додати щось нове \ МSK8 \ напишете для неї окремий опис і упорядковуйте його якнайкраще

# Виліковування видів, схожих на вихідний код

Це зміна мислення, яка змінила те, як я пишу описи. **Погляньте на вашу точність так само, як і на вихідний код.**

## Kontrolа версії

Ваші описи мають бути в режимі контролю версії разом з вашим кодом. перевіряйте їх в. Переслідувати зміниM SK2 Написати змістовні коммітаційні повідомлення, коли ви їх оновлюєте . Це створює історію того, як еволюціонували вимоги.

У Microsoft, ми зберігали описи в тих самих reposіtoriaх, що й кодM SK1 Коли опис змінювався , він пройшов через той самий процес перегляду як код МSK3 Це не було МСК4 не бюрократія М СК5 це забезпечувало, щоб кожен розумів, що змінюється і чому M СК6 Навіть відстеження ремісії в Word краще, ніж ніщо. MСК7 ви можете мати MСК8ремісії МсК9 секцію, але не дозволять МСК10 дозволити цьому піти з-під контролю МSК11 Вже багато ремісій після запуску dev означає, що опис не був МСС12 не готовий, коли ви почали будувати ММСК13

## Переробка спеціаліз

Так само, як код потребує рефакторування, так і спектиM SK1 Як ви дізнаєтесь більше під час втілення , спект повинен розвиватися, щоб відобразити це навчання

Знайшов кращий спосіб розв 'язати проблему? Обновлюйте спецификацію, щоб відобразити новий підхід і пояснити, чому ви змінили напрямокM SK1 Открили маргинальний випадок, який ви не мали в роздумі' не обмірковували

Спектр після розробки повинен бути більш витончений, ніж опис перед розробкою.. Якщо це не так.

## Принцип живого документа

Спектр - це: МСК0, МСК1, МSK2, коли починається розробка. МСК3, ', тільки МСК5, готовий до цього етапу. МSK7, ММК8, зроблено, коли корабель працює і стає підсобним режимом догляду. .. До того часу МСК10, МКС11 - це живий документ, який еволюціонує з вашим розумінням проблеми

Це не значить, що шкала має змінюватися щодня. МSK1. Головні зміни в правилах потребують обговорення та прийняття. МСК2. Але прояснування. М СК3. Додатні приклади. M СК4. Нещодавно винайдені cases мають бути згортані назад до шкали, як ви їх знайдете.

Подумайте про це таким чином.

## Чому видам необхідно залишатися на зв 'язку

Тут МСК0 є чимось, про що "'" недостатньо обговорюють . **Ваша спецификація стає основою для всього, що прийде після.**

**Плани тесту**: QA пише тестові випадки на основі спецификаціїM SK1 Якщо ця спецификація застаріла , тести перевіряють неправильну річ МSK3 Ви отримуєте хибні позитивні знаки M SK4 тесті проходять, але функція зламана ) або хибne негативні знакi

**Документація**: Пацієнтська документація , API доки M SK2 системи допомоги , ваш фантастичний RAG AI спеціаліст з підтримки МSK4 вони всі починаються з опису спецификації MSC5 Якщо опис описує характеристики, які не існують MST6 не існують або пропускають характеристики, що їх роблять M ST7 ваші доки хибні з першого дня M st8

**Майбутнє розвиток**: Коли комусь потрібно розширити функцію через шість місяців, , вони МSK2 читають спецификацію, щоб зрозуміти, як вона працює \ . Якщо вона не співпадає з реальністю \ МSK5 \ вони \МSK6 \ починають з хибних припущень \. \

**На борту**: Нові члени команди вчаться у системі частково, читаючи описи . Застарілі описи показують їм хибну ментальну модель того, як функції працюють

Ось чому спецификація має залишатися актуальною.

У Microsoft , ми ставили до поновлення спецификацій такі ж важливі речі, як і до оновлення коду . Зміни в спецификаціях пройшли через перевірку МSK2 Вони були перероблені разом з кодом МSK3 Коли змінювалась функція \ , \ оновлювання спецификації не було \ МSK5 \ не було опційним \; \ це було частиною визначення \

Якщо ви зміните код, але не підготуєтесь до оновлення спеціаду, ви створили TECHNICAL DEBT. У майбутньому робота буде повільнішою, бо ніхто не знає, що насправді є теперішнім станом.

<img src="https://media1.tenor.com/m/3T1hzop89-kAAAAC/debt-credit-card.gif" height="250"/>
# Зв 'язок між схемою та її втіленням

Тут: МСК0 - це те, що молодші розробники часто не розуміють . **Це не джерело істини.**

Спект вказує вам, що ви намагаєтеся створити. МСК1 Код - це те, що насправді ви створили. МSK2 Ці дві речі повинні узгоджуватись. ММК3 але коли вони не узгоджені. ММСК4 не МСК5 код виграє. МСк6 Ви можете. MМСК7 ви не можете запустити спект. МПСК8 можна запустити код.

Це означає:

1. **Види мають розвиватися** - Коли ви відкриваєте речі під час втілення , оновлюєте спецификацію МSK2 Це МСК3 документація того, що ви М СК4 будуєте MСК5 не є священним текстом M СК6
2. **деталі розробки Don't належать до спектру** - Після того, як ви МSK1 почали реалізувати МSK2 сам код документує те, як ( в деяких місцях є \ ' технічна спеціза \ МSK5 але вони рідкісні і часто є продуктом жахливих | ' гнучких рамок \ МSK7 \- ненависті до домашніх тварин | МSK9 Виписання природньо адаптивної практики, як Агілл, змушує мене трохи стрибати |). Спеціза повинна документувати причину
3. **Випробовуємо, як подолати прогап** - Хороші тести перевіряють, чи застосування відповідає стандартам

# Вигадування спеціацій для різних аудиторій

Різні люди потребують різних речей від спецификацій:

**Працівники** - Хочете знати цінність бізнесу і загальний графік розвитку . Дайте їм огляд та критерії успіху

**Менеджери продуктів** - Потрібно зрозуміти, як це вписується у ширшу стратегію та дорожну карту продукту . Дайте їм історії користувачів і залежності МSK2

**Виробники** - Потрібно достатньо деталей, щоб реалізувати їх правильно, не кажучи їм, як робити свою роботу . Дайте їм необхідні речі M SK2 крайні cases , і не MSC4функціональні потреби MST5

**QA** - Потрібно знати, як перевірити, чи це працюєM SK1 Дайте їм критерії прийняття

**Дизайнери** - Потрібно знати, яким має бути інтерактивний досвід користувача . Дайте їм історії користувачів і потоки взаємодії МSK2 Ще краще, щоб вони розробляли розробку UX-специуму \ / \ сюжетних доріжок паралельно, працюючи з dev \ МSK4 \ розробка опису \; \ будь то ПМ \ МСК6 \ БАК і т.д | МSK7 \ Хто пише опис менш важливий, ніж те, що робить кінцеву функцію кращою

Хороша шкала слугує усім цим слухачам без забарвлення.. Використовуйте розділи та структуру, щоб люди могли читати те, що для них важливо.

# Випробовування вашої спеціалізації

Перед тим, як зателефонувати, скажу, що все зроблено.

1. **Чи міг програміст, який ніколи не бачив цієї характеристики, побудувати її з цієї спецификації?** Якщо ні, то ви не маєте таких деталей, як ' це працює так само, як і функція x в курсивній системі '. Перше, що МSK5 занепокоєна AF МSK6 друге М SK7 ця функція може змінюватися або бути важко зрозуміти крайні випадки
2. **QA могла б написати тестові випадки з цього спектру?** Якщо ні, ваші критерії прийняття не є
3. **Чи можете ви побудувати щось абсолютно непотрібне, що все ще співпадає з цими характеристиками?** Якщо так, то
4. **Чи описує ця спецификація, як її реалізувати або Чого досягнути?** Якщо це МСК 0 - це перше, ",", то Ви МСК 2 , Ми управляємо мікроменеджментом .

# Агільний підхід до спеціаліз

МSK0 Але ми ' гнучкі ! Ми не потребуємо мети МSK3 нам не потрібні деталі мSK4 Я багато чую про це мSK5 Це ' безглуздо

Гнучка методика не означає, що ' не має ніякого планування МSK2 чи МSK3 не містить жодної документації ." Це означає реагувати на зміни, аніж слідкувати за планом . **деталі є інструментами, а не контрактами .** Ви створюєте їх з достатньої дрібниці, щоб почати. , потім еволюціонуєте їх, як ви вчаєтеся. ♫ . ♫ Мій \ ' \ Гнучкий шлях \ МSK3 \ був ще більш екстремальний. ♪ ; \ коли ви стаєте супер добрими в деталях, навіть ті стають більш гнучкими. \, \ ви хочете адаптуватися і покращити, спираючись на те, чого хоче ваша команда. | / \ потреби \

## Як гнучкі види відрізняються від водоспаду

Основною різницею є: МСК0, формат чи довжина, МСК1, його мислення та процес, МSK2

**Вид водоспаду**:

- Все написано наперед перед будь-яким розвитком.
- Націлитися на довершеність з першого дня
- Зміни вимагають формальних процесів контролю змін
- Спек є "заблокованимM SK1, як тільки він підтверджується
- Припущення: ми можемо знати все, перш ніж почати
- Лінійні: Спек M SK1 Збудування → Тест МSK3 Розгортання

**Гнучкий вид**:

- Почнемо з мінімальних надійних деталей, щоб почати
- Очікувати незавершеність на початку ( і те, що
- Зміни очікувані і вітаються
- Спек еволюціонує постійно з функцією
- Уявімо, що ми вчимося, поки будуємо
- Циклічний: Проект M SK1 Збудувати → Дізнатись МSK3 Обновлювати спецификацію МSK4 Зробити більше မ်SK5 Дістись більше

Пристосування до водоспаду передбачає, що ви можете точно визначити все перед тим, як написати рядок коду. МСК0 ─ Це чудова фантазія. МSK2 ─ В дійсності, МСК3 ─ ви відкриваєте половину потреб, як тільки użytkownicy справді спробують цю функцію. ММК4 ─ Плануйте її. М СК5 ─ прийміть її. M СК6 ─ користувачі є найкращими тестувальниками. М АК7 ─ Вони можуть зламати все, чого ви не робили. МАК8 ─ навіть не знають, хто ви. МТК9 ─ зроблено з такою швидкістю, яка нібито порушує причинно-наслідковий зв 'язок.

<img src="https://media.tenor.com/RSp2ieJayNsAAAAM/panda-destroy.gif" height="250"/>
## Рупи зворотнього зв 'язку - це все

У гнучкому розрахунуванні шкали зворотнього зв 'язку є вашим найкращим другом

**Відмова від забудовника**: " Початковий підхід виграв' не працює через XM SK3 ЯMSC4 я запропонував Y натомістьМSK5 \→ Обновлюю спецификацію, щоб відобразити новий підхід і чому він змінився МSK7 Врешті-решт, ви ─ ' ─ Звісно є першими МСК9 користувачами МСК10 функцієюMСК11 Якщо він виглядає безглуздим М СК12 багом з сепком і сортує його. МСК13 навіть якщо ви зупиняєте будь-який спринт МSК14 пік і т.д. для того, щоб зробити цеМ СК15 робите \М С К16 не чекайте \ МС К17

**Відповідь користувача**: Попробуй цю функцію з реальними користувачами. **Півот** на основі того, що ви вивчили.

**Реакцію на застосування**: Коли ви будуєте ,, ви відкриваєте крайні випадки МSK2 технічні обмеження M SK3 або кращі підходи . MSC5 Згортайте ці вчення назад до спеціалізу

**Відповідь на питання**МSK0 " Спеціальність каже X, але не враховувалаM SK2 сценарій Y." \→ Додайте сценарій до спеціалізу .

Кожна з цих циклів зворотнього зв 'язку робить спектр кращим.

Ось чому описи водоспаду часто провалюються. МСК0, вони перехиляються від зворотнього зв 'язку. МSK1. Коли ви дізнаєтесь, що опис був неправильним, МSK2, ви, МСК3, збудували неправильну річ і МSK4, змінюючи опис, ", значить масове переробку

**Найважливіше - це зворотній зв 'язок так само швидко, як і можливий [ЛLMAPI](https://www.mostlylucid.net/blog/llmapi) це допомагає вам побудувати BIT, а потім використовувати фальшиві дані для отримання корисного зворотнього зв 'язку.**

## Прийміть недосконалість (На початкуM SK1

Це те, що нервує традиційних менеджерів **це' абсолютно непогано, якщо початкова спецификація має прогалини**

Якщо ви не знаєте, то позначіть розділи як "TBDM SK1

Це не МСК0 , а Несподібність . МСК1, це "'", чесність. МSK3 Ви не знаєте МСК4 , ви знаєте все з самого початку.

Почнемо з:

- Зрозумійте твердження про проблему ( ви повинні знати це )
- Пропонований підхід до розв 'язання проблеми (можлива змінаM SK1
- Прості критерії "працювали МSK1 Критерії "" МSK2 "" будуть досконалені
- Знані невідомі позначені як відкриті питання

Тоді заповніть прогалини, як ви дізнаєтесь.

## Індикція змінюватиме

Прийміть це зараз: **Ваша спецификація зміниться під час розробки.** Якщо це не так, то або вам неймовірно пощастило, або ви нічого не вивчаєте.

Зміни, яких варто очікувати:

- Технічний підхід змінюється, коли ви відкриваєте обмеження
- Налаштування діапазону, коли ви розумієте: МСК0 , що ви будуєте надто багато , "(", або надто мало .
- "Дайте МSK1 удосконалення критеріїв, так як ви краще розумієте проблему
- Нові випадки на кроці були виявлені під час розробки
- Кращі рішення можна знайти за допомогою експерименту

Кожна зміна має бути::

1. **Задокументоване** - Обновляйте спецификаціюM SK1 не ' не просто змінюйте код
2. **Спілкування** - Розкажіть зацікавленим, що змінилося і чому
3. **Зрозумілий** - Розкажіть, що ви дізналися, що спричинило зміни

Спеціальність' історія версії стає записом того, що ви вивчилиM SK1 Те, що' цінна документація для майбутніх можливостейMSC3

## Коли гнучка точність йде не так

Гнучкий підхід може провалитися, якщо ви забудете одну важливу річ: **МSK0 зміниться" не значитьM SK2 не означає**

Погана гнучка спецізація:

- Шпек змінюється щодня без чіткого причини
- Жодна визначення "doneM SK1 так що функція продовжує рости
- Зміни не передаються. МСК0 не передають інформацію. МSK1 очікують, що оновлення спеціаліз перестрибне прямо до мозку ваших колег.
- "Agile" використовували як виправдання для того, щоб не думати про все
- Stakeholders здивовані змінами zakresu, бо ніхто не сказав їм

Хороша гнучка спецізація:

- Зміни відбуваються з чітких причин, що базуються на навчанні
- "DoneM SK1 критерії є чіткими, навіть якщо інші деталі не є
- Зміни обговорюються МСК0 домовлені МSK1 і задокументовані
- Бути гнучким - це не означає бути сліпим
- Stakeholders є частиною зворотнього зв 'язку

Це живий документ, але це не хаос. Це еволюція, що базується на вчинні. Це не дурниці.

Агіле ніколи не робить того, чого хочеш, і не називає його агілем .

Це - динамічний процес, який має SOLE GOAL збудувати найкращі речі якомога швидше. [Маніфест гнучкості ](https://agilemanifesto.org/principles.html) каже: МСК0 - це перший принцип .

> " Наше найвище завдання - задовольнити покупця
> через ранню та постійну доставку
> цінної програми."

МСК0 - це не плутати код, тому що вам подобається відчуття .

## Просто достатньо деталей, щоб почати

Питання в тому, наскільки деталізованим має бути спецификація. МSK2 Це МSK3 МSK4 Що нам потрібно знати, щоб почати будувати надійно

Для деяких характеристик, які можуть бути::

- абзац, який описує проблему
- Три пулеметні точки, що намальовують рішення
- Ясна визначення того, як виглядає "doneM SK1

Для інших це може бути::

- деталізовані пользовачі потоки з макетами
- Требування щодо ефективності, підкріплені даними
- Інтеграції для багатьох систем

**Додайте деталі, де існує невизначеность.** Якщо всі погоджуються, як щось повинно працювати, то вам не потрібно записувати це в важких деталях.

Але врешті-решт, це: МСК0 , "'". Чи є достатньо деталей для початку зворотнього циклу?

<img src="https://media.tenor.com/5q0fppfYcLAAAAAM/push-loop-infinite.gif" height="250"/>
## Шаблони і AI: швидко починаються

Не перебільшуйте розрахунки про первинний варіант. На початку потрібно мати достатньо, щоб задовольнити ваші непогані потреби.

- Невеликий підрахунок ( навіть для SWAG - Шкіткий дикий МSK2 Поганий підрахунок МSK3 краще, ніж ніщо
- Введення для обговорення пріоритетів
- Просто достатньо для вас особисто, щоб почати програмувати

**Використовувати шаблони**: Уявіть основний шаблон з ключовими розділами (Problem, SolutionM SK3 В масштабі МSK4 За межами \, Завершені критерії \ ). Заповніть те, що знаєте \ МSK7 Залиште розділи пустими, якщо не знаєте

Простий шаблон може бути::

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

П 'ять хвилин наповнюєш, і ти МСК2 маєш достатньо для того, щоб почати обговорювати чи навіть будувати .

**Використовуючи штучний інтелект для створення спектрів**: Такі інструменти, як Claude чи ChatGPT, можуть бути чудовими для отримання першого проекту . Поділити його проблемою і певним контекстом

Але - і це критично - **Не дозволяйте штучний інтелект, його досконалості спонукати вас до того, щоб додати все**

штучний інтелект обожнює бути всеохопним МСК0 Він МSK1 дасть вам розділи про важливі питання безпеки МСК2 Требування ефективності М СК3 Доступність M СК4 Интернаціоналізація М SК5 Обладнання помилками М ็ СК6 Запису даних М М ্ СК7 Наслідування M ็ SК8 Стратегія розгортання М ס К9 Плани відвороту М с К10 і ще сімнадцять інших речей, які вам можуть знадобитися.

Витягніть більшість з них. Залиште те, що вам потрібно NOWM SK1 Решта можна додати пізніше, коли вам це дійсно потрібно.

Подумайте про штучний інтелект- генерований спектр як менюM SK1 Виберіть ті частинки, які мають значення для початку . ігноруйте решту M SK3 Ви завжди можете повернутися на секунду .

Метою є: МСК0 - це не повний спектр; МСК1 - це достатнього спектру, щоб почати роботу. МСК3 - це швидка оцінка. МSK5 - рішення про пріоритети. МКС6 - це просто ясність того, що ви будуєте для себе.

## Модель співпраці

Ось що міняється в гнучкому програмуванні **Ви не пишете опис і не відкидаєте його до розробників** Це спільний проект.

Найкращий підхід, який я бачив

1. **Продукт/PM замальовує проблему** - Що потребує розв 'язання і чому
2. **Виробники долучаються до технічного підходу** - Як ми можемо це розв 'язатиM SK1 Які обмеження
3. **Дизайнери долучаються до вимог UX** - Який має бути інтерфейс користувача
4. **QA додає сценаріїв тестування** - Долоні і підходи до перевірки

Кожен вкладає свій внесок у розробку. МСК0. Ніхто не володіє нею виключно. МSK1. Цей спільний підхід ловить проблеми рано, коли вони є недорогими, аніж пізно, коли є дорогими.

Ще важливіше, це означає, що спецификація відображає те, що насправді можливо, а не те, чого хтось хотів в ізоляції.

## Еволюція під час розвитку

Тут' там, де гнучкі характеристики відрізняються від традиційних **Funkція може розвиватися, як ви її будуєте.**

Ви дізнаєтесь, що ваш початковий підхід виграв' не працюєM SK1 Обновлюйте спецификацію, щоб відобразити новий підхід

Ви спробуєте цю функцію і усвідомлюєте, що вона не вирішує проблеми.

Реакція користувачів відкриває кращий спосіб розв 'язання проблеми? Втілити її в життя і пояснити її зміниM SK1

Ця еволюція є функцією, не вадою . Ви'реагуєте на нову інформаціюM SK3 Спектра має захоплювати те, що навчанняМSK4 не прикидається, що ви мали ідеальні знання з першого дня

Але це спричиняє проблему:, якщо функція може змінюватисяM SK1 як ви її оцінюєте ? Як ви знаєте, коли вам це вдасться

## Проблема оцінки

Це брудна таємниця гнучкої **підрахунки дуже складні, коли властиві риси можуть розвиватися**

Традиційна оцінка передбачає, що ви знаєте, що робите.

Гнучка оцінка стверджує, що ви не знаєте.

**Ви оцінюєте діапазони, не абсолютиM SK1** Замість "" МСК0 "", це займе "3" тижнів, а "" МСК2 "" - десь між "" СМС4 "" та "" SМС5 "", залежно від того, що ми знайдемо.

**Ви оцінюєте в ітераціях.** МSK0 Ми ' проведемо один спринт, досліджуючи це і повідомлятимемо, що ми дізналися . Тоді ми зможемо більш точно визначити решту МSK3

**У вас час-box замість масштабуM SK1boxing.** Ми проведемо на цьому 2 тижні МSK3 Наприкінці МSK4 тижні ми матимемо найкращу версію, яку зможемо збудувати в цей час

Але всі ці підходи мають один критичний обов 'язок: **Вам потрібно знати, що означає** Без чіткого визначення зроблено , як правило, функція може продовжувати метастазувати назавжди.

МСК0 є поширеною критикою гнучкості порівняно з водоспадовими підходами ' без конкретного опису не може бути хороших підрахунків '. Дюнно Я МSK3 радше мати підрахунки, які призводять до хорошої характеристики, ніж мертвий на одному для лайна

# Defining "Done" (Or How to Stop Feature MetastasisM SK3

Тут багато гнучких спеціаліз ламаються на шматки. МСК0. Усі. МSK1. захоплені гнучкістю та повторюваністю, МSK2. Але ніхто не хоче бути тим, хто каже: "" МSK3 "", "" правильно "". МSK4 "", що "'" - це воно.

Без чіткого визначення "" зроблено "". МСК0. Функції не завершуються. МСК1. Не закінчуються. ;. Вони метастазують. МSK3. Вони розповсюджуються... Вони зростають до інших частин системи.

## Проблема з невизначеною "DoneM SK1

I' я бачив описи з такими критеріями прийняття, як :

- "Users can comment on postsM SK1
- " Dashboard показує актуальну інформацію "
- "Поиск працює добреM SK1

Це не визначення "" зробленого "", а лише невизначні наміри. МSK3 Що означає "" важлива інформація "", МSK5 Що значить "" МSK6 "", ', МSK8, як працює? МSK9 Ви можете повторювати їх назавжди і ніколи не буде зроблено

Розробник повинен знати: **що саме , при втіленні, означає, що я можу припинити працювати над цією функцією**

## Критерії для написання бетону "DoneM SK1

Хороші критерії:

- **Випробовується** - Ви можете перевірити, чи meeting
- **Особисто** - Ніяких невизначних слів, таких як "goodM SK2 або МSK3relevant"
- **Обмежена** - Вони не означають ' не нескінченний простір

**Погана**МSK0 "Comments should be moderatedM SK2
**Хороша**: " Адмін-пользователи можуть підтвердитиM SK2 відкинути, або видалити коментарі з панелі адміністраціїMSC4 Неодобрені коментарі не помітні для звичайних користувачів

**Погана**МSK0 "Поиск повинен бути швидкимM SK2
**Хороша**МSK0 "Поиск повертає результати в межах МSK2 ms для 95 третього проценту запитів на основі сукупності даних мСК4 постів МСК5 Результати відсортовані по значущості мСК6повний М СК7сумок текстового пошуку ММСК8 з датою як зв 'язок МПСК9переломник МНСК10

**Погана**МSK0 "Башня показує корисні метрикиM SK2
**Хороша**МSK0 "Добівізори на дошціM SK2 загальна кількість переглядів сторінки МSK3 остання 30 дні М SK5 унікальні відвідувачі Ми 6 останню Мі 7 дні

Зверніть увагу на різницю? Хороші приклади свідчать вам точно, що потрібно існувати і коли можна припинити додавати речі

## Секция За межами можливостей - це ваш друг

Пам 'ятаєте раніше, коли я сказав, що розділ За межами можливостей настільки ж важливий, як і те, що МСК0 в межах можливостей . Ось чому

Для кожної характеристики, МСК0, є десятки речей, які можна додати. МСК1. Секция "" За межами спектру "" чітко називає те, що ви не робите. МSK2. Це запобігає розмовам, які спричиняють метастазу

**У масштабі**: Nested comments МSK1one level of repliesM SK2
**За межами спектру**: Нескінченне об 'єднання коментарівM SK1 голосування за коментар, об' єднання коментарів~, найкраще сортування коментарів , permalinks МSK5 вони можуть прийти пізніше як окремі характеристикиMSC6

Тепер, коли хтось запропонує: "мусить 'доповісти, що коментарі мають підрахунки МSK2, ви можете звернути увагу на спецификацію і сказати: \""\", що \ "'\" не підходить для цієї ітерації \ '.\' Дозвольте \' '\' обговорити це як окрему функцію, як тільки базові коментарі будуть працювати \`."\'

О, і наступна спецізація? Ну, у вас є купа непотрібних хороших ідей, які вже були зафіксовані

## Time-Boxing as a Last Resort

Іноді ви дійсно не знаєте, як це виглядає.

Ми проведемо 2 тижні, ( або допоки закінчиться тестування на прототипі алгоритму рекомендації.

Але зверніть увагу, що ви все ще маєте бетонний стан "сконструйований МSK2 умову МSK3 тижнів , потім перевіряєте мSK5 Ви M' не просто будуєте на нескінченний час МСК7 Ці дослідження часто робляться в контексті, як MSК8Сプリント у SCRUM, який називається \'\Spike \МSK10\

### Spikes & SprintsM SK1

Спайк - один із них. ' треба розігратись і з 'ясувати цю технологію.

Сподівається, що в кінці Шпринта будуть доступні дані. ( щось, що хтось інший, ніж людина, яка бере участь у ньому, зможе перевірити замкнутість ланцюга . ). Шпик може мати, але, ймовірно, єдине, що може бути доступним - це знання для команди.

Вони також весело для спеціалістів і допомагають команді Я часто колекціоную ідеї Spike під час проекту, а коли там є "'", я дозволяю спеціалістам вибрати один, щоб дослідити його.

## Preventing Scope Creep During Development

Навіть з чіткими критеріями: "doneM SK1 criteria ,scope can creepMSC3 You discover edge cases. You realise users need something you hadnMska5t consideredMска6 How do you handle this without breaking your definition of doneM Ska7

**Документувати це, не робити** Коли ви знаходите щось нове, що має бути додано, оновлюйте спеціалізу . зрозумійте, що сфера застосування змінилася

Це працює для двох цілей.

1. **Прозорість** - Усі знають, що масштаб змінився і чому
2. **Усвідомлення вартості** - Дослідники вважають, що доdanie речей впливає на часовий графік

Якщо ваші характеристики продовжують рости, то це сигнал. МСК1 або ви, МСК3, будуєте неправильну річ, і вам потрібно відступити та переосмислити. МSK5 або це має бути багатофункціональність, МSK6 або вам потрібно скоротити масштаб, щоб відправити щось корисние раніше. .

## Коли це зробити

В якийсь момент, вам потрібно відправити. Funkція не маєM SK2 не повинна бути ідеальним ; вона повинна бути корисною

Хороший тест: **Чи можуть користувачі отримувати цінність від цієї функції так, як вона є зараз?**

Якщо так, то , відправити його МSK1 Ви завжди можете повторювати це в наступній версії МSK2 Завершений не значить ' означає, що МСК4 ніколи не покращиться М СК5 Це означає, M СК6 вирішує проблему досить добре, щоб користувачі отримували користь і ми могли перейти до іншої роботи М S К7

Якщо ні, виM SK1 ще не закінчили , незалежно від того, що говорить ваша спецификація

Найскладніша частина гнучкості - це: "" МСК0 "", "" Не починати роботу "". ";".

Але пам ’ ятайте, що ви маєте поміркувати, чи розповсюджувати її всім , мати близьку групу для A/B M SK2 UAT МSK3 тестування прийняття користувачів ). що M SK5 часто є бізнес-рішучою стосовно ризику MSC6 Інколи громадськість Глупиться і бачить частково завершену функцію перед переглядом, як GOSPEL FOR YOUR SYSTEM QUALITY MSKI7 Якщо це проблема, контрольована група є безпечнішою Mski9

<img src="https://media1.tenor.com/m/hl4H1KOXEMcAAAAC/bongo-cat-keyboard-smash.gif" height="300"/>
# Процес перевірки спектру

Спектр не завершується, коли ти закінчуєш його написати. Спект завершиться, коли його переглянуть люди, які його будуть використовувати.

## Виправляйте відгуками на спеціалізацію, як відгуки на код

Найкраща практика, яку я вивчив у Microsoft: **Спеціалізовані відгуки працюють точно так само, як кодові відгуки.** Вони "'" - співпрацьовні, МSK1 , - не суперечливі, (", хоча клуб хлопців Microsoft "'", МSK4 часто робив рецензії на характеристики схожими на гладіаторські бои, якщо хтось був дурнем. (Сміх)

Коли переглядаємо характеристики:

- **Поставити запитання** МSK0 " Що станеться, якщо з 'явиться X МSK2 це не МSK3 не критика ; це МSK5 виявлення прогалини
- **Запропонуйте альтернативи** МSK0 "Чи ви вважали підхід Y? МSK2 відкриває дискусію
- **Зверніть увагу на пропущені випадки** МSK0 " Це не означає МSK2 не закриває сценарії Z " допомагає завершити картину
- **Припущення про виклик** МSK0 " Чому ми розв 'язуємо це таким чином? ?" може виявити кращі підходи

Коли ваш опис переглядається:

- **Питання - це можливості** МСК0 Вони показують, що нерозбірливо в МСК1 і що ви пропустили в МSK2.
- **Запропонування покращують спеціальність** - Розгляньте їх серйозно, навіть якщо ви їх не приймаєте
- **Це не особисте** - Як огляд кодуM SK1 це ' про те, щоб зробити роботу кращою
- **Рецензент може помилятися** - Розкажіть, чому ваш підхід має сенс

Найкращі відгуки на характеристики - це розмови. Ти йдеш туди-сюдиM SK1 Ти вчишся один від одного. Спектр, який виникає, кращий за те, що хтось міг би написати самMSC3

## Хто повинен переглянути

Отримайте відгуки з усіх важливих точок зору:

**Рецензія забудовника** - Чи це спрацює? МSK1 Чи є якісь технічні обмеження, які ми не враховували? \ ' \ МSK3 \ Чи є достатньо деталей, щоб їх реалізувати?

**Рецензія на товар** - Чи це вирішує правильну проблему ? Чи вона співпадає з технологічною стратегією МSK2 Що в МСК3 бракує МСК4 Чи критерії МSK5працювали ММК6 насправді показують цінність користувачам МСК7

**Обзор дизайну** - Чи має сенс інтерактивний досвід? ? Чи ми вважали доступність? МSK2 А як щодо мобільного?

**ПроаналізуванняQA** - Чи можемо ми перевірити це? ? Чи є критерії прийняття достатньо чіткими?

Ви не маєте' не потребуєте офіційного знакуM SK1 від усіх. Вам потрібен їхній внесок, щоб покращити спецификацію

## Об 'єктивні питання

Хороші рецензенти задають питання, які покращують характеристики

- " Що станеться, якщо пользователь зробить XM SK1 (Edge cases)
- " Як це пов 'язано з існуючою функцією YM SK1 ( інтеграція МSK3
- " Що ' є нашим падінням, якщо залежність Z не є
- " Чи можемо ми спростити це, використовуючи W замість
- " Як ми знатимемо, чи це спрацювало?
- " Що ми не робимо

Ніхто з них не звичайний. Це справжні запитання, які допомагають зрозуміти суть спеціалізації.

## Включення зворотнього зв 'язку

Ви виграєте' не приймаєте будь-яку пропозицію . Таке МSK2 непогано M SK3 Але для кожного шматка зворотнього зв 'язку

1. **Розгляньмо це чесно.** МSK0 Я не відкидаю його, тому що " вони не розуміють
2. **Якщо ви це погодите,** - Обновлюйте спецификаціюM SK1 дякую рецензенту
3. **Якщо ви не приймаєте це,** - поясни, чому МSK1 можливо вони МSK2 не мають контексту
4. **Якщо це - МСК0 - поза межами** - Dodaj його до розділу МSK1За межами ক ’ านів МSK2 або "Будучі покращення мSK4

Спектр має покращуватись з кожним раундом перегляду.

Отримайте відгуки з усіх цих точок зору перед тим, як почати реалізувати проект.

# Конкретний приклад: Markdown Translation Service

Для того, щоб зробити все менше абстрактним, ось як може виглядати спецификація для автоматизованого перекладу позначки, яку я створив для цього блогу. Це демонструє принципи, які ми обговорювали

## Заявлення про проблему

Блоги, написані англійською мовою, виключають лише неіншої-Люди, які розмовляють англійськоюМSK1 Ручне перекладання кожного посту на різні мови - це часM SK2затрачає часу і затримує видавлення. Нам потрібне автоматизоване рішення, яке перекладає позначені блогові статті на різні цільові мови, не потребуючи ручного втручання для кожного постаMSC4

## Рішення

Втілити базуову службу, яка автоматично перекладає файли відмітки на задані мови, використовуючи систему машинного перекладу EasyNMT.

- Наблюдайте за файлами, які відмітили зміни
- Витягувати перекладаний текст, зберігаючи структуру позначки та кодові блоки
- Batch translation requests for efficiency
- Створити перекладені файли позначки з відповідними заголовками мови

## Критерии успіху (Що МSK1Дало МSK2 Як виглядає )

Ці критерії точно показують, коли ми можемо припинити працювати над цією функцією:

- Нові блогові статті автоматично перекладаються на всі конфігуровані мови: (initially: HiszpańskiM SK2 Французький , НемецкийMSC4 ІтальянскийMSL5 ПортугальськийMST6 КитайськийМSK7 Арабський МSK8 ІндійскийMСК9 Японський MСК10 КорейнийМСК11 Голландський
- Переведені файли зберігають однакову структуру відмітки до оригінальних
- Блоки коду, URL зображенняM SK1 і форматування залишаються незмінними
- Перетворення завершується за 15 хвилини для типового блогового посту.
- Система переводить тільки ті файли, які змінилися. ( перевірено за допомогою хешового порівняння
- Услуга запускається успішно, навіть якщо інтерфейс інтерфейсу перекладу є тимчасово недоступним
- Були запущені помилки під час перекладу, але програма не зруйнована

Зверніть увагу, що вони є специфічними і перевіряними. Ми можемо перевірити кожен з нихM SK1 Коли всі зізнаютьсяMSC2 ми' закінчили . Ми не продовжуємо додавати таких funkcji, як МSK6оцінка якості перекладу МSK7 або MST8 редагування устного перекладу MST9 допоки ми не розширюємо діапазонуMСК10

## У масштабі

- Справжня служба для обробки файлів відмітки
- Інтеграція з API перекладу EasyNMT
- Hash-на основі виявлення змін, щоб уникнути необов 'язкового перетворення
- Batch processing to handle EasyNMT's word limit
- Раундове збалансування навантаження робіна на різних інстанціях EasyNMT
- Утримка синтаксису знижування , ",", кодових блоків, МSK1 , і образів під час перекладу

## За межами спектру

- Вказівник інтерфейсу для ручного редагування перекладу (надалі покращенняM SK1
- Translation memory or glossary management (may add if quality issues arise
- Реальний-tydовий переклад M SK1залежне оброблення прийметься)
- Перетворення кодових коментарів в кодових блоках (намірно виключеноM SK1
- Автоматичний аналіз якості перекладів (першу необхідна ручна перевіркаM SK1

## Технологічні обмеження

- EasyNMT має ~500 межу слова для кожного запиту [найбільш зрозуміле-nmt](/blog/mostlylucid-nmt-complete-guide) які можуть взяти цілу книгу. МSK0 ; мають бути по-різному перероблені
- Услуга перекладу може бути повільною. (~15 секундний відстанок на одну партію.
- Множество EasyNMT інстанцій, необхідних для розумної продуктивності (небагато майже зрозумілих -nmt МSK2
- Файлова система I/O не повинна блокувати головну програму

## Відкрийте питання в особливий час

- ~~Чи ми повинні ховати tłumaczenia, щоб уникнути перетворення **Решено: ТакM SK1 за допомогою файлового хеш-порівняння**
- ~~ Як ми справимося з проблемами serwisу EasyNMTM SK1 **Вирішено: Ошибка в журналі і перекидання файлуM SK1 повторює спробу на наступному запускі сервісу / поломник схеми МSK3 може бути крапка**
- Які проблеми з рівнем якості можна побачити у технічному змісті? **Вирішення: Судно і оцінкиМSK1 ручної перевірки проблем половів**

## Що ми дізналися під час розробки

Під час розробки з 'явилось кілька речей, які покращили спектр

**Підготування розміру батареї**: Почато з МSK1лінних пакетівM SK2, але знаходилось, що МSK3 лінії більш надійні для того, щоб залишатися під EasyNMT 'с формулярним обмеженням, в той час як зберігає контекст

**Викриття зображення**: СпочаткуM SK1 ім 'я файлів з зображенням відміткою надсилалися до службу перекладу , розшифровування речень M SK3 Добавлено виявлення розширення файлів для перехитриння шляхів зображення .

**Доступність послуг**: EasyNMT може бути темпераментним на старті . Добавлена перевірка здоров 'я, яка запитує `/model_name` кінцевий пункт перед спробою перекладу.

**Хэшування**: Початково планувалося зберігання баз даних для файлових хашів , але базується на файловій системі МSK2 `.hash` файли виявилися простішими і уникнути залежності від бази даних для цього сервісу.

Ці вчення були згорнуті назад у документацію і пізніше інформували про подібні характеристики.

## Чому цей вид працює?

Ця спецификація була заснована на обговорених принципах:

- **Проблема-перша**: Почато з справжньої проблеми МSK1ручний переклад повільний МSK2 не рішення
- **Чистий простір**: Ясна відповідь на те, що ми не робимо
- **Справа частина деталей**: Визначили, що потрібно зробити МSK1захищати структуру відмітки МSK2 без опису точного застосування
- **Живий документ**: Відкриті питання були вирішені, а рішення - задокументовані в міру прогресу розробки
- **Співпраця**: Підозрювалися під час розв 'язання проблем з втіленням ( подібне до об' єднання ім 'я файла зображення МSK2 обговорювали та розв 'язали

Результатом було те, що МСК0 - функція, яка працює в розробці вже місяцями. МСК2 - автоматичний переклад кожного блогового поста з мінімальним втручанням. МSK3

# Поширені питання про гнучкі види

На основі того, що ми застосували, ось питання, які часто з 'являються

## " Мені дійсно потрібна спецификація для маленької характеристикиM SK1

Це залежить від того, чи

- Вирахуйте, скільки часу це займе
- Зробити угоду з zainteresowanyми сторонами
- Упевнитись, що QA знає, що перевіряти
- Задокументувати те, що ви створили для майбутніх відміток

Тоді так, навіть швидка шкала допоможеM SK1 Це не обов 'язково ' не обов' язково бути формальною МSK3 Кілька пультових точок в клітці, яка покрыває проблему

Якщо ви не в змозі пояснити, як виглядає тест в двох реченнях

## " Як я ставлюся до зацікавлених сторін, які хочуть мати все в рамках

Розкажіть, що

1. **Додання більшого збільшення часової лінії** - Чи хочуть вони функцію А в МSK1 тижнів, чи функцію AM SK2 Б МSK3 C , і D в \3 місяцях
2. **Ми можемо зробити це далі** МСК0 " Це МСК2 - чудова ідея, МСК3 Давайте, М СК4, спочатку зробимо ядро робочим, М АК5, а потім застосуємо це як окремий спектр
3. **Time-box визначає пріоритети** МSK0 " У нас є МSK2 тижні . Яка з них найважливіша?

Якщо вони наполягають на тому, що все є настільки ж вирішальним, то запропонують їм обрати іншу роботу, яку відкласти.

## " Що, якщо спецификація змінюється так сильно, що ' невідоме з самого початку МSK2

Це МСК0 - штраф МСК1 , доки ":".

- Зміни задокументовані. (Aktualізувати спеціалізаціюM SK1 не змінювати коду '
- Зміни передаються ( зацікавлені знають, що змінилося і чому
- Ви зрозуміли щось. ( зміни відображають навчання.

Якщо спецификація невідома, тому що ви спочатку повністю неправильно зрозуміли проблему, щоM SK1 це знак зробити більше відкриття перед тим, як почати наступного разу. Але повторення і навчання є очікуванимиMSC3

Історія версії仕様а should tell the story of what you learned.

В Startups це називається 'Pivot', де ви починаєте будувати гру і врешті-решт створюєте дивовижну систему повідомлень, замість неї. .. ви не чули про Мобильну гру Glitch МSK4 ви, скоріш за все, чули і про бит повідомлень.

<img src="https://media1.tenor.com/m/8DRynH5nEE8AAAAC/if-you.gif" height="200px" />
Не замкнутися надто сильно на МСК1. Якщо є можливості для МСК2, перевернувши їх,

## "Чи треба написати описи для виправлення помилокM SK1

Для критичних помилок: ні , просто виправіть їхM SK2

Для складних багів, які мають вплив на різні системи або потребують змін в архітектуру: так . поводитися з ними як з функцієюM SK2 Що' зламана MSC4проблемаМSK5 як виMST6 виправите його МST7 розв 'язокМСК8 як вам це знатиMСК9 дізнатись про ньогоМСП10 виправити МСК11 застосувати критеріїМ СК12 що виМ סК13 не змінюєте MSК14 поза межами МСК15

Для всього, що знаходиться між ними: використовуйте власний розсудM SK1 Якщо виправлення не очевидне ' або може мати побічні ефекти

Це особливо стосується системних помилок. . Вам потрібно знати, що ви виправляєте і як ви перевіряєте його.

## " Якою формальною повинна бути спецификація

Такою формальною, як потрібна ваша команда. Деякі команди добре справляються з деталізованими билетами JIRAM SK1 Інші хочуть правильних документів у контрольі версії.

Формальність має менше значення, ніж зміст

- Відкрийте твердження про проблему
- Запропоноване рішення
- Визначення зробленого
- Зворушіть межі масштабу

Ви можете написати це в Markdown, Confluence , WordM SK2 or scrawled on a napkin

Це часто не згаданий ключ до гнучкої розробки; і чому я ненавиджу гнучкі фреймворки ( та SCRUM). Головним моментом є те, що, як і гнучка спецификація, ваш процес також має бути адаптивнимM SK3 Якщо маленьке написання не працює для однієї команди, але дуже багато – для однієї.
Якщо 5 денні цикли працюють для однієї команди, а 2 тиждень - для іншої,
Уся ідея полягає в тому, щоб зробити найкращий продукт; ваша команда - це машина, яка робить цей продукт . Робіть так, щоб машина працювала якомога плавніше

Як менеджер, погляньте на ваші вихідні дані:; якщо до дошки потрібен сгорнутий графік, то як ви можете використати поточні дані для створення такого графіку?

Врешті-решт, ви отримуєте в команді характеристики і те, чого потребують зацікавлені сторони. Якщо ви можете зменшити вплив на команду, тоді це

## " Що, якби я МSK1 був єдиним програмістом у проекті

Ви все ще потребуєте описів, можливо, навіть більше. Через шість місяців, коли вам потрібно розширити цю функціюM SK2 ви виграєте ' не пам ’ ятаєтесь, чому ви прийняли певні рішення МSK4 опис - це ваше минуле я, що розмовляє з вашим майбутнім я .

До того ж, вам все ще потрібно

- Вирахуйте роботу для того, хто заплатить вам
- Визначати, що "doneM SK1 означає, щоб ви могли закінчити
- Задокументуйте те, що ви створили для інших, які могли б приєднатися пізніше

Письмо описів для себе схоже на написання тестів на одиниці: це відчувається повільніше зараз, але заощаджує час пізніше M SK1 так само як і я , Я МSK3 я в своєму МСК4sМСК5 Я Взагадаю халепи в наші дні М СК6 записуйте їх так, щоб це було зроблено M СК7 навіть якщо це MСК8 це лише список проблем з githubом

## " Як мені справлятися з прихвильками, замаскованими як 'яслення про вимоги МSK2

Вигукніть: "" МСК0 "". Коли хтось каже: МСК1 "", "" О, МСК2 "", я забув згадати, що це також має робити X, ," "", що "'" - це не прояснение, МSK5 "", а "" МСК6 "", - це новий простір.

ВідповідьМСК0 МSK1 Те, що МСК2 це хороша вимога МСК3 але це не те, про що ми домовились у спеціалізації МSK5 Дозвольте' додавати її до розділу "" За межами можливостей "" зараз і обговорити, чи включити її, чи зберегти її для версії 2."

Якщо це дійсно обов 'язок, то це не гарний обов' язок.

1. Обновлюйте спецификацію, щоб включити її
2. Обновлюйте підрахунки
3. Зробіть угоду про нову шкалу часу або те, що треба зменшити, щоб вписуватися в шкали часу.

Ніколи мовчазно не поглинайте космічний гребень. Це зруйнує ваші підрахунки та довіру.

## "Чи можу я почати програмувати до того, як закінчиться опис

ТакМСК0 якщо виМSK1будуєте прототип, щоб відповісти на відкриті питанняМСК2 НіМ СК3 якщо ВиМ סК4 будуєте для виробництваМ S К5

Прототипування для навчання - це добре : " У нас є три підходи МSK2 Дозвольте мені поглянути на кожну з них, щоб побачити, яка працює найкраще M SK3 Це вказує на спеціальність .

Збудувати код виробництва перед тим, як спеціалізація готова, означає, що ви МСК0 вигадуєте за потреби . "." Ви МСК2 , можливо, збудуєте неправильну річ.

Виняток: якщо виM SK1 є власником продукту та програмістом ( соло-проект ), ви можете одночасно записати і кодувати МSK4 але все ж документувати свої рішення, поки ви йдете

' доки не буде готовий опис МSK1 це великий спосіб зарядити працівників до початку МSK2 Оцінювання технологічних підходів , написання спільної плити котла і т.д.

## " Що робити, якщо моя команда не читає

Дізнайтеся чому:

- **Надто довга** Робіть їх коротшими, більш сканованими
- **Надто формальне?** Використовуйте легший формат
- **Не важливо?** Упевниться, що вони насправді потребують деталей, які ви пропонуєте
- **Поганий звичка?** Почати вимагати перевірки спеціалізування перед запуском розробки

Якщо люди перекидають відгуки на спецификацію і потім будують неправильну річ, то біль стане помітним. МСК1 МСК2 Це не було в спецификації МСК3 , тому ми мусимо її переробити. МSK6 це урок, отриманий

Також: роблять описи легкими для пошуку. Якщо вониM SK2 закопані в якійсь невідомой вікі , ніхто їх не прочитає

## " Скільки часу я повинен витратити на розрахунки

Правило пальців: M SK1 часу розвитку.

Для 2-тижневої характеристикиM SK1 1-2 днів на спектрі.
За функцію 1-тижневу МSK1 півдня на спектрі МSK2
За функцію дня 2- : час або два на штрих-котері МSK2

Але не думайте про це релігійно. Деякі риси потребують більшого підходу.

Якщо ви' витрачаєте більше часу на спецификацію, ніж на її застосовуванняМSK1 виМСК2 перебільшуєте їїМ СК3 пам ’ ятайтеMСК4 спецификації - це інструменти, які допомагають вам працювати

## МSK0 Чому підрахунки завжди неправильні?"

Тому що обчислення програмного забезпечення є фундаментально складним. **підрахунки спрацюють лише тоді, коли ви**

Що майже ніколи не трапляється.

Кожного разу, коли ви оцінюєте

- **Невідома невідома** - Проблеми, про які ви не знаєте
- **Невідоме** - Проблеми, про які ви знаєте, що існують, але не маєте уявлення, як їх розв 'язати
- **Зміна вимог** - Спектр еволюціонує, коли ви створюєте  директор має божевільну ідею в душеві МSK2 це трапляється МSK3 Одного разу я отримав дзвінок від мого клієнта HUGELY DRUNK у душеві з дурним ідом
- **Різниця в середовищі** - Ця бібліотека працювала у вашому попередньому проекті , але цей має інші відданості M SK2 Ви ' все це запустили в IIS, але цей повинен працювати на Linux
- **Проблеми з інструментами** - Будівлювальна система
- **Інтеграційні сюрпризи** - Те API, яке ви зв 'язуєте з ', не працює як задокументоване
- **Людські фактори** МСК0 Ви МSK1 перервані , хворі, чи займаєтесь проблемами виробництва
- **Фінанси** - інколи потрібна менша версія раніше, тому що *інакше ми не матимемо грошей. МСК1, що МСК2 є COMMON у стартапах. МSK3, МSK4, Я, МСК5 - ми будемо читати статтю про ', Стартаповий dev, ' і як він відрізняється від МSK8, звичайного dev, МСК9 в майбутньому.

Ось чому

- **Оцінки відбитків розмахів** МSK0 "2-5 дні МSK2 свідчить про невизначеность
- **Спики допомагають** - Проведіть день досліджуючи, перш ніж підраховувати повну роботу ; ця технологія важче чи легше, ніж я підрахував M SK2 де вона може заощадити час і т.д.
- **Час-роботи боксу** Ми проведемо три тижні і побачимо, що отримаємо
- **Справа з історичними даними** - Прослідкувати, скільки часу тривали такі ж завдання
- **Нагодування - чесно** МSK0 Якщо ви думаєте, що 3 дні , скажуть: МSK3 Ви МСК4 будете правильні частіше М СК5 Погляньте на підхід M СК6 Скотти MСК7

<img src="https://media1.tenor.com/m/vrpp1cfR6XgAAAAd/star-trek-star-trek-tos.gif" height="300" />
Що новітніша робота, то гірша ваша оцінка. Збудувати ту ж саму форму CRUD, яку ви збудувалиM SK2 ви зробили 50 разів ? Ви МSK5 будете близькі МSK6 Об 'єднатися з новою послугою, використовуючи незнайомий протоколMSC7 Ваша оцінка - це надія, загорнута наді мною

Ось чому спецификації потребують чітких критеріїв: "doneM SK1 criteria . Ви можетеMSC3 не підраховувати точно, але ви можете визначити, коли зупинитиMST5 Те, що

## " Як щодо спецификацій для досліджень або дослідницьких завданьM SK1

Вони потребують різних критеріїв: "doneMSC1 criteria. Замість "feature X worksM SK4 itMska5s МSK6weMski7ve answered question YMske8

До прикладу, для дослідження:

- **Проблема**: Ми не знаємоM SK1, чи підхід A або підхід B краще підходить для рекомендації
- **Рішення**: Потрапити 1 тиждень на створення прототипу обох підходів
- **Виконені критерії**: Ми маємо працюючі прототипи кожного , показника ефективності для обох МSK2 і рекомендацію, яку слідкувати за
- **За межами можливостей**: Реализация виробництва ( приходить після прийняття рішення

Час-боксинг є вирішальним для дослідженняМSK1 Без ньогоM SK2 дослідні завдання ніколи не закінчуються.

## " Як я пишу описи на функції, які я не знаю

Почати з того, що ви знаєте:

- Показ про проблему ( ви повинні знати це )
- Пропонований підхід (найкращий підрахунокM SK1
- Відкрийте питання (все, що ви не знаєтеM SK1не знаєте
- Досліджені критерії ( Навіть якщо невеликий МSK1

Помітити розділи як "TBD." Будь чесним щодо непевностіM SK2

Тоді використовуйте процес перевірки, щоб заповнити прогалини. Переговори під час перевірки часто пояснюють те, що ви не зрозуміли

Пам 'ятайте: МСК0 , Неповний . "-", але МСК2 .

## "Kan GitHub issues/JIRA tickets be the specM SK2

Абсолютно . Спеціальність не має ' не обов 'язково бути окремою документом

Що важливо - це зміст. МСК0, а не контейнер. МSK1. Хороша проблема.

- **Відкрийте твердження про проблему** - Що ми розв 'язуємо і чому
- **Запропоноване рішення** МSK0 Як ми ' підійдемо до цього
- **Виконені критерії** - Спеціальні МSK1 тестовані критерії прийняття
- **Обриси простору** - Що в МСК1 і що поза МСК2 використати ярлики, такі як МSK3в МСК4з МСК5за МСК6 для речей, які ви не робите
- **Відкрите запитання** - позначити їх на ярлику "questionM SK2 або щось подібне

Привілеї використання issues:

- **Все в одному місці** - Код , спеціалізація M SK2 обговорення , і відстеження завдання разом
- **Прості зв 'язки** - Зсувні питанняМSK1 PRsM SK2 зобов 'язання
- **Вбудовано- в версії** - Історія редагування issues показує, як еволюціонували вимоги
- **Уявний робочий процес** - Команда вже знає, як його використовувати

Совети для використання проблем як спеціацій:

- Використовуйте опис проблеми для спеціаду, не закопаний у komentarzах M SK1 люди читають опис)
- Обновлюйте опис, як еволюціонує спецификація ( додайте " редагуватиM SK2 розділи, щоб показати зміни
- Використовуйте ярлики, щоб визначити стан:
- Pin важливі деталі обговорення, щоб вони не "'", щоб не загубитися в МSK1 коментарі
- Ссылка на підтримуючі документи ( діаграми , макетиM SK2 якщо необхідно

Тест: хтось зможе прочитати це питання і знати, що збудувати , що M SK2 зробити МSK3 що значить M SK4 і що ' не в zasięgі MSC6 Якщо так, то , це МSK8 хороша спецификація, незалежно від формату

## " Як щодо specyfikацій у регульованих галузях ?"

Якщо ви' працюєте в галузі охорони здоров 'я(M SK1), фінансів ,, аерокосмічного простору (M SK3) чи інших регулюванних галузей (МSK4), вам можуть знадобитися більш офіційні деталі для मानності(МSK5). Принципи досі діють

- Почнемо з проблеми
- Визначати, що все зроблено чітко
- Поширюватись так, як навчаєшся
- Утримуйте точність

Але вам також потрібно

- По following your industry's documentation standards
- Уміщувати необхідні розділи (аналіз безпекиМSK1регуляційне дотриманняM SK2відстеження auditу)
- Зробіть офіційний знак МСК0 , якщо це необхідно
- Утримуйте більш детальну історію версії
- Залиште деталі після закінчення проекту ( для аудитуM SK1

Навіть у регулятивному середовищі

# На завершення

Пишувати хороші характеристики в гнучкому середовищі - це вміння, яке покращується з практикою.. Метою є не писати ідеальні описи наперед.

Головні принципи:

- **Спекти - це інструменти, а не контракти** - Додайте деталі, де вам потрібні
- **Почнемо з проблеми, не рішення** - Implementation flows from understanding the problem
- **Співпрацювати** - Кожен робить свій внесок у покращення спектру
- **Визначати "doneM SK1 чітко** - Захищати метастазу властивостей бетоном МSK1 критерії, які можна перевірити
- **Нерозвинені питання** - Те, що ви не робите, не настільки важливе, як те, чим ви є
- **Сподіватись еволюції** - Функції змінюються, коли ви їх створюєте ; захоплюють це навчання
- **Утримуйте точність** - Вони стають основою для тестування , Docs M SK2 і майбутнього розвитку

Найважче те, що МСК0 не пише початковий опис, МСК1, МSK2 знає, коли припинити працювати над функцією, МКС3 Без чіткого визначення, МСК4, зроблено, МСК5, критеріїв, МСС6, характеристики ростуть назавжди і ніколи не відправляються

Ось чому так складно підраховувати гнучкість задач. ВиМSK1 не тільки підраховуєте час застосуванняM SK2 виМСК3 підрахуєте час навчанняМ СК4 Скільки часу знадобиться, щоб відкрити, що насправді вирішує проблемуM СК5 Ніхто не знаєMСК6 тому що ви ще не зрозумілиМ SК7 поки що не зрозміли цеM SК8

Найкраще, що ви можете зробити: мати чітке уявлення про те, що M SK1 зробити " означати МSK3 час M SK4box невизначність , і оновлювати спецификацію, як ви вивчаєте MSC6 ставитися до неї як до коду

Хороша спецификація дає розробникам змогу розв 'язувати проблеми розумно, знаючи точно, коли вони можуть зупинитися.

І якщо ви - програміст, який читає спецификацію, яка не має сенсу чи якої немає чіткого значення.