Надминување на проширувањето на функциите: Архитектура на производи изградени да траат
Проширувањето на функционалностите ретко започнува со лоша идеја. Започнува со разумно барање: уште една опција за извоз, посебен пат за одобрување за вреден клиент, графичка контрола на контролна табла што „би требало да биде брза“. Секое барање може да има смисла само по себе. Проблемот се појавува кога производот станува збир од локални одлуки без трајна форма.
Производите создадени да траат не се оние што одбиваат промени. Тие се оние што можат да прифатат промени без да ја изгубат јасноста, доверливоста или способноста на тимот да се движи напред. Тоа бара техничкото лидерство да ја третира архитектурата како грижа за производот, а не како приватна инженерска активност.
Почнете од границата на проблемот, а не од списокот на функционалности
Патоказот често ги опишува излезните резултати: екрани, интеграции, извештаи и поставки. На трајниот производ му треба попрецизен опис на работата што ја извршува и на границите околу таа работа.
Разгледајте тим што создава софтвер за интерни барања за набавка. „Додадете изработувач на приспособени работни текови“ може да звучи како очигледна следна функционалност. Но, пред да го дизајнира, тимот треба да праша што мора да остане доследно: кој може да троши пари, какви докази се потребни, како се ревидираат одобрувањата и каде припаѓаат исклучоците. Тие одговори може да откријат дека на производот му треба мал сет приспособливи политики, а не неограничен механизам за работни текови.
Оваа разлика е важна затоа што флексибилноста има цена. Секоја приспособлива гранка ги проширува тестирањето, поддршката, воведувањето, аналитиката и идните миграции. Функционалноста не е завршена кога работи за едно барање; завршена е кога производот може да ја објасни, да работи со неа и да ја развива.
Користете принципи како филтри за одлуки
Неколку експлицитни принципи за производот спречуваат дебатите да почнуваат одново со секое ново барање. Тие треба да бидат доволно конкретни за да исклучуваат одредени работи. На пример:
- Претпочитајте разбирливи стандардни поставки наместо бесконечна конфигурација. Повеќето корисници треба да успеат без да станат администратори.
- Одржувајте ги критичните записи следливи. Важните одлуки имаат потреба од јасна историја и стабилен сопственик.
- Направете ја вообичаената работа брза; направете ја исклучителната работа намерна. Исклучоците не треба да ја изобличуваат главната патека.
- Создавајте точки за проширување само кога постои вистински образец. Две слични барања може да се случајност; повторени, добро разбрани потреби може да оправдаат способност на платформата.
Овие принципи им даваат на менаџерите на производи, дизајнерите, развивачите и тимовите што работат со клиенти заеднички јазик. Кажувањето не станува помалку лично: барањето може да биде вредно, но е во судир со избраната форма на производот.
Направете ја сопственоста видлива
Проширувањето на функционалностите напредува во нејаснотии. Ако никој не го поседува животниот циклус на некоја способност, додатоците се натрупуваат додека отстранувањата, поедноставувањата, документацијата и оперативните последици се игнорираат.
Сопственоста е повеќе од назначување некого да имплементира тикет. За секоја значајна област на производот, некој треба да одговара за нејзината цел, ограничувања, состојба и план за повлекување. Таа личност не мора сама да ја донесе секоја одлука. Но, мора да обезбеди дека одлуките се поврзани.
Корисна проверка поставува четири прашања:
- Кој кориснички проблем го решава ова и за кого?
- Кое постојно однесување, податоци или работен тек го усложнува?
- Како ќе знаеме дали е корисно по објавувањето?
- Кој ќе го одржува, поддржува и на крај ќе го поедностави?
Четвртото прашање е особено откривачко. Ако предложената функционалност нема веродостоен сопственик по пуштањето во употреба, веројатно сè уште не е подготвена. Одржливата испорака значи планирање за негламурозната работа: дозволи, следење, насоки за поддршка, миграции, пристапност, перформанси и бришење.
Дизајнирајте за промени без да ја обожувате апстракцијата
Техничките тимови понекогаш одговараат на притисокот за функционалности со создавање сложени рамки во очекување на секоја идна потреба. Тоа може да биде проширување на функционалностите во архитектонска форма. Системот полн со генерички слоеви не е автоматски приспособлив; можеби едноставно е потежок за разбирање.
Добрата архитектура создава опции таму каде што промената е веројатна и скапа, додека обичниот код го одржува директен. Одделете давател на услуги за наплата зад фокусиран интерфејс, бидејќи добавувачите, правилата за цени и барањата за усогласеност може да се променат. Едноставно правило за валидација држете го блиску до формуларот или доменскиот модел, сè додека нема доказ дека треба да се споделува или конфигурира.
Практичната цел е обратливоста. Кога носите одлука, утврдете што би било тешко да се поништи: јавните API, форматите на зачувани податоци, моделите за авторизација и зависностите меѓу тимови заслужуваат поголемо внимание од внатрешна помошна функција. За одлуки со висока цена, запишете ги претпоставките и изберете точки на раздвојување што овозможуваат идна миграција.
На пример, ако апликацијата денес испраќа известувања преку е-пошта, избегнувајте да распрснувате повици специфични за добавувачот низ деловната логика. Мала граница за известувања може да ја зачува намерата на доменот:
await notifications.send({
recipient: requester.email,
template: "request-approved",
data: { requestId: request.id }
});
Ова не го предвидува секој систем за канали или шаблони. Едноставно спречува работниот тек за одобрување да стане споен со еден механизам за испорака.
На оддалечените тимови им треба пишана меморија за производот
Во распределени тимови, одлуките брзо исчезнуваат кога живеат само на состаноци, во нишки за разговор или во меморијата на искусна личност. Резултатот е повторувана дискусија, недоследна имплементација и функционалности што тивко си противречат една на друга.
Пишаните записи за одлуки не мора да бидат формални или долги. Краток документ може да ги опфати контекстот, разгледаните опции, одлуката, последиците и условот што би го натерал тимот повторно да ја разгледа. Вредноста не е бирократијата. Таа е во намалувањето на повторното откривање.
Соработката на далечина исто така има корист од раздвојување на истражувањето од обврзувањето. Раната дискусија може да биде широка и асинхрона. Откако ќе се избере насока, сумирајте ја на место што целиот тим може да го најде. Потоа преточете ја во критериуми за прифаќање, техничка работа и оперативни очекувања. Одлуката што не може да се објасни писмено често сè уште не е доволно јасна за безбедно да се имплементира.
Мерете ја корисноста, па отстранете го она што повеќе не го заслужува своето место
Испораката е важна пресвртница, а не доказ за вредноста на производот. Тимовите треба да дефинираат лесно следење пред објавувањето: кое однесување треба да се промени, како ќе се собираат повратни информации и кога тимот ќе го разгледа резултатот.
Корисните сигнали често се квалитативни, како и квантитативни. Разговорите со поддршката можат да откријат збунетост што следењето на настани ја пропушта. Барањата од продажбата може да откријат незадоволен работен тек, но и еднократна договорна потреба што треба да остане надвор од основниот производ. Развивачите можат да утврдат дали некоја функционалност ја зголемила цената на рутинските промени.
Најважно, дајте му на отстранувањето иста легитимност како и на додавањето. Повлекувањето од употреба на неискористена поставка, спојувањето на преклопувачки текови или стеснувањето на збунувачка опција може да го подобри производот повеќе од големо ново издание. Отстранувањето не е признание дека претходната одлука била неразумна. Тоа е доказ дека тимот учи.
Создадете производ што може да ги исполни своите ветувања
Трајните производи не се дефинирани со помалку функционалности. Тие се дефинирани со кохерентно ветување: корисниците разбираат за што служи производот, тимовите знаат како се однесува и идните промени имаат разумно место каде да одат.
Таа кохерентност се создава преку мали дисциплини што се повторуваат со текот на времето: јасни граници, именувани сопственици, обратливи одлуки, пишан контекст и храброст за поедноставување. Проширувањето на функционалностите не се победува со еден состанок за патоказ. Се спречува кога секоја нова идеја мора да го заслужи своето место во производ дизајниран да остане корисен долго откако ќе помине возбудата од денот на објавување.