Градење производи што се прилагодуваат уште пред да помислите дека им се потребни
Највредната работа на производот често започнува пред некој да ја нарече приоритет.
Клиент се двоуми пред збунувачка форма. Тимот за поддршка постојано го објаснува истото привремено решение. Развивач забележува дека брзата интеграција станува најкревката зависност на системот. Ниту еден од овие сигнали можеби не е доволно гласен за да влезе на состанок за патоказот. Заедно, тие ви кажуваат каде производот ќе треба следно да се приспособи.
Градењето производи што рано се приспособуваат не значи предвидување на иднината со натприродна точност. Станува збор за дизајнирање тимови, системи и навики што забележуваат промена додека сè уште е евтино да се реагира. Тоа е дисциплина на техничко лидерство исто колку што е и дисциплина на производот.
Приспособувањето започнува со внимание, не со архитектура
Тимовите понекогаш прерано посегнуваат по апстракции: генерализиран механизам за работни текови, систем за приклучоци или слој за конфигурација за секоја можна варијација. Тоа може да создаде сложеност без да создаде флексибилност. Производот не е приспособлив само затоа што неговиот код е апстрактен.
Вистинската приспособливост започнува со обрнување внимание на повторливото триење. Барајте обрасци во прашањата на клиентите, неуспешните чекори при воведување, бавните внатрешни операции и инженерската работа што постојано се повторува. Едно барање може да биде граничен случај. Третата или четвртата верзија на истото барање често е доказ дека моделот на производот е нецелосен.
Практичното прашање не е: „Како можеме да го поддржиме секој иден случај на употреба?“ Туку: „Што се менува доволно често за да престанеме да го третираме како исклучок?“
Претворете ги повторените исклучоци во намерни избори за производот
Да претпоставиме дека тимот рачно го приспособува пристапот за клиенти со малку различни процеси на одобрување. На почетокот, привременото решение водено од поддршката може да биде токму правилно. Го одржува производот едноставен додека тимот учи што навистина им треба на клиентите.
Но ако привременото решение стане вообичаено, заслужува истрага. Можеби на корисниците им е потребна експлицитна состојба на одобрување. Можеби дозволите се премногу цврсто врзани за работните позиции. Можеби производот претпоставува еден сопственик таму каде што вистинските организации имаат споделена одговорност.
Целта не е да се автоматизира секоја рачна задача. Целта е да се разбере дали задачата открива трајна потреба. Пред да градите, разјаснете три работи:
- Зачестеност: Дали ова се случува редовно, кај повеќе од еден клиент или тим?
- Варијација: Дали деталите се различни, но основниот проблем е ист?
- Трошок: Дали привременото решение создава доцнење, грешки, изгубен контекст или непотребни пренасочувања?
Ако одговорот е да, пренесете го знаењето од главите на луѓето во производот. Тоа може да значи подобра зададена поставка, видлива поставка, појасен работен тек или мала внатрешна алатка. Правилното решение често е потесно од голема платформа и потрајно од уште еден недокументиран исклучок.
Дизајнирајте споеви каде што промената е веројатна
Доброто техничко расудување значи поставување флексибилност на границите што најверојатно ќе се менуваат. Даватели на плаќања, канали за известување, системи за идентитет, правила за цени и надворешни интеграции се чести примери. Нивните детали се менуваат поради причини што се надвор од контролата на вашиот тим.
Корисен спој му дава на остатокот од производот стабилен јазик. На пример, кодот на апликацијата може да побара да се испрати известување без да треба да знае дали испораката моментално се врши преку е-пошта, услуга за разговор или друг канал. Имплементацијата може да се промени зад таа граница без да наметне неповрзана работа низ целата кодна база.
Тоа не бара сложена механизација на рамки. Бара јасна сопственост и умерени интерфејси. Држете ја деловната одлука блиску до доменот на производот, а однесувањето специфично за добавувачот зад адаптер.
interface Notifier {
send(message: { recipient: string; subject: string; body: string }): Promise<void>;
}
async function notifyApproval(notifier: Notifier, request: ApprovalRequest) {
await notifier.send({
recipient: request.ownerEmail,
subject: "Approval needed",
body: `Review request ${request.id}.`
});
}
Важниот дел не е самиот интерфејс. Тоа е одлуката да се спречи деталите од API-то на давателот да навлезат во логиката за одобрување. Ако испораката треба подоцна да се промени, однесувањето на производот останува разбирливо и може да се тестира.
Направете ја повратноста стратегија за испорака
Тимовите се движат посигурно кога изданието може да се набљудува, ограничи и повлече. Ова е особено важно за оддалечените тимови, каде што одлуките и контекстот се пренесуваат преку писмена комуникација, а не преку разговори во ходник.
За значајни промени, дефинирајте го пуштањето во употреба пред да биде завршена имплементацијата. Одлучете кој е сопственик на прекинувачот, кое однесување ќе се мери и кој услов би го натерал тимот да запре или да врати назад. Ознаката за функција може да помогне, но само ако има сопственик и план за отстранување. Трајните ознаки често се напуштени одлуки маскирани како флексибилност.
Едноставна контролна листа за пуштање во употреба може да спречи скапа двосмисленост:
- Наведете го проблемот на клиентот и планираното однесување на јасен јазик.
- Идентификувајте ги засегнатите корисници и првата група што треба да ја добие промената.
- Дефинирајте сигнали што покажуваат успех, збунетост или неуспех.
- Документирајте го резервното однесување и лицето одговорно да постапи по него.
- Поставете датум за преглед на резултатот и отстранување на привремените контроли.
Ова е одржлива испорака во пракса. Го намалува притисокот да бидете совршено во право пред испораката, додека ја зачувува одговорноста брзо да се учи потоа.
Дајте им на тимовите сопственост над резултатите, не само над задачите
Приспособувањето се забавува кога информациите мора да се искачат по хиерархијата пред да станат дејство. Развивачите најблиску до повторлив дефект може да го видат образецот пред менаџерот за производот. Специјалистите за поддршка може да го разбираат привременото решение на клиентот појасно од кој било што чита контролна табла. Дизајнерите може да забележат концептуално несовпаѓање многу пред да стане барање за функција.
Техничките лидери ги создаваат условите овие набљудувања да се пренесуваат. Пишувајте концизни записи за одлуки. Направете ги повратните информации од клиентите видливи без секој коментар да го претворите во мандат. Прегледувајте ја оперативната болка заедно со работата на функциите. Најважно, направете да е безбедно да се каже: „Ова барање не е изолирано; треба повторно да ја разгледаме основната претпоставка.“
Сопственоста не е дозвола да се гради што и да изгледа интересно. Таа е одговорност за целиот резултат: вредноста за корисникот, оперативниот товар, одржливоста и последиците од промената на насоката.
Изградете производ што може да учи
Најдобрите приспособливи производи не се оние со најмногу опции. Тоа се оние чии тимови можат да разликуваат минливо барање од значајна промена, да направат фокусирана промена и да учат од неговата вистинска употреба.
Овој пристап ги подобрува и кариерите на развивачите. Сениорноста не е само да се знае како да се имплементираат тешки системи. Таа е да се знае каде да не се додава сложеност, кога привременото решение заслужило решение во производот и како да се остави системот полесен за менување за следната личност.
Производите ретко пропаѓаат затоа што тимот не ја предвидел секоја можност. Почесто, тие се мачат затоа што тимот престанал да забележува на што реалноста веќе ги учела. Продолжете да ги слушате малите повторливи сигнали. Тие често се најраната верзија на одлуката за производот што на крајот ќе треба да ја донесете.