Який ефективний спосіб фіксувати обґрунтування рішень щодо дизайну виробів?


30

У нашій компанії ми не використовуємо жодної документації на дизайн товару. Всього у нас є три працівники, тому все обговорення дизайну продукту відбувається особисто або на Slack. (Ми також знаходимося на базовому пакеті Slack, який дозволяє переглядати лише останні повідомлення.)

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

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

Як ми можемо ефективно фіксувати обґрунтування дизайнерських рішень?

Наш робочий процес базується на Pivotal Tracker. Одне з моїх рішень - це записувати обґрунтування всіх відповідних дизайнерських рішень як коментарі до самої історії користувача, але це здається ненадійним.

Щоб бути на 100% зрозумілим: я не кажу про розробку коду. Я говорю про дизайн продукту, який реалізується кодом. Іншими словами, я не говорю про рішення типу: "чи слід структурувати цей клас, використовуючи склад, а не багаторазове успадкування?"; Я говорю про такі рішення, як "чи потрібно вимагати від користувача підтвердження своєї адреси електронної пошти, перш ніж мати можливість увійти?".

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


13
Якщо вам здається, що вам потрібна форма дизайнерського документа, то чому б просто не створити дизайн-документ?
MetaFight

Я гадаю, що обґрунтування будуть записані як проза, написана проза на перший погляд. Хто призначений для них читач?
Лоран LA RIZZA

Чому ви кажете, що записувати це на історіях користувачів на Pivotal здається недостовірним? Я ніколи не використовував це програмне забезпечення, але зазвичай квиток є хорошим місцем для запису мотивації підняття квитка. Не вводьте "Вимагати від користувача підтвердження адреси електронної пошти", введіть "Вимагати від користувача підтвердження адреси електронної пошти. Це допомагає тому, що ..." Ви говорите, що це ненадійно, тому що ви, можливо, не заважаєте робити це (тобто ви хочете, щоб процес, який примушує ви зробите правильно), або ненадійні, оскільки старі істотні історії зникають у чорну діру, і ви їх не знайдете, чи є якась інша проблема?
Стів Джессоп

Хто такі автори та хто споживачі цієї документації? Мені здається, що "бізнес" є автором, і всі його читачі? Це було б правильно? (Я розумію, що ти зараз маленький, але якби ти вирощував, що б відповідати?)
mlk

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

Відповіді:


26

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

Саме це стосується коментарів - для запису чому конкретний фрагмент коду чи структури виглядає так, як це відбувається (і я не говорю виключно про коментарі до коду). Якщо предметом вашого дизайну є функція, зробіть вступний коментар до функції. Якщо це клас, зробіть коментар на початку заняття про обґрунтування. Якщо у вас є купа класів, які повинні відповідати одній структурі, додайте до пакету, що містить ці класи, окремий проектний документ (наприклад, файл "readme"). Якщо предметом вашої конструкції є діаграма UML, додайте коментарі до розділу описів діаграми.

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

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


Щодо коментарів: ви б не сказали, що метою коментарів є опис коду? Оскільки проблема, про яку я говорю, - це такі питання дизайну, як: чи повинен користувач мати X дозволи, задані налаштуваннями облікового запису Y? Мета коду - ввімкнути дизайн, тому я не думаю, що в коді є відповідне місце для обговорення дизайну.
henrebotha

5
@henrebotha: Ви, здається, маєте інше, ніж я, про те, що таке дизайн, може бути чи повинен бути. Код - це дизайн. Структура коду - це дизайн. Структура інтерфейсів користувача - це дизайн. Мета структури коду або класів - це дизайн. Питання на кшталт "якщо користувач має дозволи X, задані налаштуваннями облікового запису Y", мені здається, як щось, чого ви не хочете вбудовувати в будь-яке місце у вашому програмному забезпеченні - звучить більше як налаштованість. Як ви реалізуєте цю вимогу в коді, можливо, дизайнерське рішення, тож ви можете прокоментувати її десь у своєму коді.
Док Браун

2
@henrebotha: якщо ви встановите права доступу X на налаштування облікового запису Y, це рішення вплине на код. Деякий код, який керує дозволами, якийсь код, який керує налаштуваннями облікового запису, якийсь код UI, якийсь код контролера. Тому в коді має бути коментар у всіх цих місцях. Звичайно, щоб уникнути повторів, усі коментарі можуть посилатися на окремий проектний документ, якщо за ним є одне обґрунтування, яке впливає на багато різних місць (як я сказав у своїй відповіді) ..
Doc Brown

1
Я не заперечую, що дизайнерські рішення впливають на код. Звичайно, дизайнерські рішення впливають на код. Це все ще не означає, що коментарі - це правильне місце для запису рішень щодо дизайну продукції.
henrebotha

1
@henrebotha: це залежить від того, що ви маєте на увазі під "Рішеннями щодо дизайну продукту". Дизайнерські рішення "на весь продукт" можуть належати до документа на "верхньому рівні" документації на ваш товар. Якщо ви маєте на увазі будь-які «дизайнерські рішення всередині вашого продукту», деякі з них належать до коментарів до коду, інші - ні. Але я не просто кажу про кодові коментарі, дивіться мою редагування. Я говорю про будь-яку форму коментарів (всередині коду чи в окремих документах), які ви вносите в свою кодову базу.
Doc Brown

8

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

Давайте підійдемо до проблеми з цілісної точки зору. Ви, хлопці, обґрунтуєте своє рішення. Зараз вони потрапили в пастку посуду, мізки команди. Незважаючи на кількість отриманої кредитної документації, зберігання обґрунтування у програмі sqishyware не все так погано. Ми насправді дуже хороші, як вид, пам’ятаючи важливі речі. Тому кожна велика корпорація має "племінні знання", навіть коли ці корпорації прагнуть документувати все те племінне знання.

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

Отже, у вас є процес у два етапи. Потрібно отримати обґрунтування з екіпажу та в документації. Тоді вам потрібно переконатися, що документація організована достатньо добре, щоб повернути раціонального в екіпіровку, коли вам це потрібно! Тепер я думаю, що у нас достатньо проблемної постановки, щоб зрозуміти, куди викличуться проблеми. Коли ви документуєте, ти зазвичай не знаєш, хто буде його шукати пізніше, або що вони шукають. Крім того, коли ви озираєтесь на документацію, ви зазвичай не знаєте, що шукаєте (у кращому випадку ви можете знати, коли).

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

Час просунутися.

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

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

  • Прийміть ненадійні формати документації. Нічого не буде правильно з першого разу. Краще дістати дані та з’ясувати, як зробити їх надійними пізніше. Наприклад, ви можете задокументувати свої обгрунтування в блоці <rationale> </rationale> або щось подібне, що полегшить збирання даних згодом. Збереження обгрунтування в історії користувача поки що просто чудово!
  • Ніколи не забувайте про цінність організації. Дізнайтеся, як ви, як команда, любите шукати обґрунтування в документації, і намагайтеся документувати це. У кожної команди буде інший процес. В одній з моїх команд ми ніколи не змогли знайти квиток, який мав би обґрунтування. Що ми могли б зробити - це знайти рядок коду, який мав значення, зробимо, svn blameщоб з’ясувати, коли він змінився і чому, а потім перегляньте квитки. Після того, як ми були там, ми, як правило, виставляли всі необхідні обгрунтування в квитку. Що тільки працювало на нас, з’ясуйте, що для вас працює.
  • Органічна документація може зростати з часом. Розробники нечасто знають, які обґрунтування є найважливішими в день, коли їм потрібно було написати. Зазвичай ми з'ясовуємо, які з них були важливими пізніше. Якщо у вас є процес догляду за документацією, яка дозволяє розробникам керувати власним маленьким садом обгрунтування, важливі з них піднімуться на поверхню. Ще важливіше, обгрунтування може змінитися. Ви можете усвідомити, що дві різні зміни, з двома різними обґрунтуваннями, справді найкраще описувались одним обґрунтуванням, яке працює для обох. Зараз між вами та рішеннями менше вмісту!

0

Я б запропонував налаштувати приватний примірник MediaWiki або якогось подібного програмного забезпечення для wiki. Організувати та переорганізувати вміст там дуже просто, і ви можете скопіювати та вставити нові дискусії безпосередньо на вкладку обговорень відповідної статті вікі. Ми використовували MediaWiki на моїй останній роботі для всіх наших документів з архітектури та API, і це було рятівником.


2
Архітектура та рішення високого рівня - це може бути нормально. Документи API - НІ! Деякі люди в нашій організації пробували це раніше, але це завжди те саме - документи низького рівня виходять із синхронізації з кодом. Вікі не дуже взаємодіють з VCS, люди забувають або не витрачають часу на її оновлення тощо. Документи API належать до коду перед функціями, які вони описують. Якщо вам здається, що вони потрібні у вашій інтрамережі, використовуйте HTML-генератор, як доксиген, щоб витягнути їх звідти. Але зробіть собі прихильність і не підтримуйте їх окремо, вручну, у Вікі.
Док Браун

3
Я твердо вірю, що всі обґрунтування дизайну повинні бути записані у сховищі вихідного коду. Будь-яке інше місце, і вони не лише виходять із синхронізації, але й не пам’ятатимуть свою історію.
cmaster

Ухиляючись від рішення, яке працює ... Нічого собі. Добре тоді.
нульова ширина

0

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

Якщо ви додасте це правило бізнесу як автоматизований тест, то зміни будуть внесені, А потім ви отримаєте від невдалого тесту суперечливу вимогу (і, сподіваємось, ви захопите особу, пов’язану з оригінальною вимогою, та їх причину для її уточнення).

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

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


0

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

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

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.