Produktno razmišljanje: Zašto rješavanje pitanja „zašto” svaki put nadmašuje pitanje „što”
Većina neuspjeha proizvoda ne počinje lošim kodom. Počinju time što sasvim razuman tim odgovara na pogrešno pitanje.
„Možemo li dodati ovaj gumb?” „Možemo li integrirati taj alat?” „Možemo li isporučiti nadzornu ploču do petka?” To su pitanja o tome što izgraditi. Korisna su, ali nepotpuna. Snažnije pitanje glasi: zašto ovaj problem zaslužuje rješenje i koji bi ishod to rješenje učinio vrijednim?
Produktno razmišljanje disciplina je koja počinje od toga. Ne pretvara svakog programera u produktnog menadžera niti zahtijeva dug strateški sastanak prije svakog pull requesta. Ono znači povezati tehnički rad sa stvarnom potrebom korisnika, poslovnim ograničenjem i mjerljivom promjenom ponašanja. Za tehničke lidere ta je povezanost često razlika između zauzetog i vrijednog tima.
„Što” je vidljivo; „zašto” obavlja pravi posao
Zahtjev za funkcionalnošću obično je predloženo rješenje prerušeno u opis problema. „Trebamo izvoz u CSV” možda zvuči konkretno, ali ostavlja važna pitanja bez odgovora. Kome je potreban izvoz? Koju odluku danas ne mogu donijeti? Je li proračunska tablica doista odredište ili je dublji problem to što je izvještaje teško dijeliti?
Ako tim prihvati zahtjev zdravo za gotovo, može izgraditi uglađen tijek izvoza, obraditi velike datoteke, dodati provjere dozvola i dokumentirati funkcionalnost. Sve to može biti dobro inženjerstvo. Ipak, izvorni podnositelj zahtjeva možda će se i dalje mučiti jer je stvarna potreba bila zakazano izvještavanje za kolege koji se nikad ne prijavljuju.
„Što” timu govori odakle početi. „Zašto” mu govori vrijedi li taj početak slijediti.
To je važno jer je softver skup na načine koje procjene često podcjenjuju. Svaka funkcionalnost dodaje pitanja za podršku, testne slučajeve, dokumentaciju, rubne slučajeve, sigurnosne aspekte, potrebe za nadzorom i budući posao migracije. Prvo izdanje rijetko je najveći trošak. To je vlasništvo nakon izdanja.
Produktno razmišljanje navika je vlasništva
Vlasništvo se ponekad svodi na pouzdanost: riješite incidente, odgovorite na upozorenja i održavajte usluge zdravima. To je ključno, ali samo je jedan sloj. Produktno vlasništvo pita proizvodi li usluga, radni tijek ili funkcionalnost vrijednost koju je trebala proizvesti.
Programer koji primjenjuje produktno razmišljanje mogao bi pitati:
- Koje ponašanje korisnika ili kupca pokušavamo omogućiti ili promijeniti?
- Što se danas događa kada korisnik ne može dovršiti ovaj zadatak?
- Koja je najmanja korisna verzija koju možemo potvrditi?
- Koja su ograničenja stvarna: usklađenost, performanse, trošak, vrijeme ili operativni rizik?
- Kako ćemo znati je li promjena pomogla?
Ta pitanja nisu izazov za dionike. Ona su način da njihov zahtjev vjerojatnije uspije. Dobar tehnički lider za njih stvara prostor rano, prije nego što ticket postane obveza i prije nego što arhitekturu postane teško promijeniti.
Razmotrite zahtjev da se „aplikacija učini bržom”. To može dovesti do nefokusiranog projekta poboljšanja performansi. Produktno usmjeren odgovor sužava problem: Koje korisničko putovanje djeluje sporo? Je li kašnjenje pri početnom učitavanju, pretraživanju, naplati ili pozadinskom izvještaju? Utječe li na sve korisnike ili na određenu veličinu računa? Je li problem latencija, zbunjujuća povratna informacija ili zadatak koji jednostavno ima previše koraka?
Rezultirajuće rješenje može biti predmemoriranje ili prilagodba upita. Umjesto toga, može biti povratna informacija o napretku, bolji zadani filtar ili asinkroni radni tijek. Implementacija se mijenja jer je problem postao jasan.
Koristite ishode kako biste kompromise učinili eksplicitnima
Tehnički timovi neprekidno rade kompromise, bez obzira na to imenuju li ih ili ne. Rok može dati prednost užem opsegu. Sigurnosni zahtjev može isključiti praktičnu integraciju. Udaljeni tim može odabrati jednostavnije operativne obrasce jer manje primopredaja smanjuje rizik.
„Zašto” tim kompromisima daje zajedničku osnovu. Bez toga rasprave postaju pozicijske: jedna osoba želi mikroservis, druga promjenu monolita; jedna želi sveobuhvatan redizajn, druga malu zakrpu. Uz dogovoren ishod razgovor postaje korisniji: koja opcija najsigurnije pomaže korisnicima da dovrše namjeravani posao?
Praktičan pristup jest napisati kratku izjavu o ishodu prije implementacije:
Omogućiti osoblju podrške rješavanje zahtjeva za pristup računima bez uključivanja inženjera, uz očuvanje mogućnosti revizije i sprječavanje neovlaštenih promjena.
Ta izjava ne propisuje zaslon, API ni model podataka. Ipak, postavlja granice. Administratorski alat za samostalno korištenje, strogo kontrolirani interni radni tijek i bolja automatizacija podrške mogu svi biti kandidati. Tim ih može usporediti s istim ciljem.
Odredite točku zaustavljanja
Razmišljanje o ishodima također štiti održivu isporuku. Timovi često nastavljaju dodavati mogućnosti jer je tražena funkcionalnost tehnički neograničena. Bolji je pristup definirati prvo uspješno stanje: koji korisnici mogu obaviti koji zadatak, pod kojim uvjetima i uz koje prihvatljivo ograničenje?
Na primjer, početni prikaz revizije može podržavati ograničen raspon datuma i samo najvažnije vrste događaja. To može biti odgovorna kontrola opsega ako namjeravanim korisnicima pomaže da sada istraže uobičajene slučajeve. Ključno je jasno imenovati ograničenje, umjesto da se nepotpuna prva verzija potajno smatra dovršenom strategijom.
Udaljeni timovi trebaju zapisano „zašto”
U timu koji radi na istoj lokaciji kontekst se može širiti razgovorima koji nikad ne završe u ticketu. Udaljeni timovi ne mogu se oslanjati na taj neformalni prijenos, a ne bi se trebale ni distribuirane organizacije. Odluke trebaju trajan kontekst.
Često je dovoljan sažet pisani brief. Prije nego što počne smislen dio posla, zabilježite problem, namjeravane korisnike, željeni ishod, ograničenja, što nije cilj i signal koji će pokazati uspjeh. Neka bude dovoljno lagan za korištenje, ali dovoljno konkretan da netko tko se kasnije pridruži može razumjeti zašto je odluka donesena.
To je osobito korisno kada inženjerski, dizajnerski, timovi podrške i komercijalni timovi rade kroz vremenske zone. Dokument nije birokracija; on smanjuje potrebu za ponavljanim objašnjenjima i slučajnim ponavljanjem rada. Inženjerima također daje dopuštenje da istaknu nesklade između predloženog rješenja i navedenog cilja.
Programerima nisu potrebne savršene informacije da bi razmišljali kao vlasnici proizvoda
Postoji čest strah da pitanje „zašto” usporava isporuku. U praksi su neodgovorena pitanja ono što kasnije stvara skupa kašnjenja. Produktno razmišljanje ne zahtijeva sigurnost. Zahtijeva da se pretpostavke tretiraju kao pretpostavke i odabere razuman način njihova testiranja.
Ako je dokaz ograničen, neka sljedeći korak bude malen i uočljiv. Objavite ograničeni radni tijek relevantnoj skupini. Instrumentirajte kritični put. Pregledajte povratne informacije podrške. Pratite ponašanje koje je funkcionalnost trebala omogućiti. Zatim odlučite hoćete li proširiti, prilagoditi ili zaustaviti.
Ovaj je pristup posebno vrijedan u programerskim karijerama. Inženjeri koji razumiju korisnike i ishode postaju bolji u arhitekturi jer mogu razlikovati trajne zahtjeve od privremenih preferencija. Jasnije komuniciraju rizik, procjenjuju s boljim kontekstom i odupiru se i prekomjernom inženjerstvu i krhkim prečacima.
Započnite sljedeći razgovor drukčije
Sljedeći put kad stigne zahtjev, nemojte početi raspravom o implementaciji. Počnite pronalaskom nezadovoljene potrebe ispod njega. Pitajte što je danas teško, tko doživljava tu poteškoću i što bi bilo drukčije kada bi rad uspio.
„Što” će i dalje biti važno. Netko mora dizajnirati sučelje, napisati kod, upravljati sustavom i održavati ga kad se prioriteti promijene. No te odluke postaju oštrije kada služe svrsi koju svi mogu imenovati.
Korisni proizvodi nisu definirani brojem isporučenih funkcionalnosti. Definirani su problemima koje uklanjaju, odlukama koje poboljšavaju i vremenom koje vraćaju ljudima. Prvo rješavanje pitanja „zašto” način je na koji tim osigurava da je njegov najbolji tehnički rad usmjeren na nešto vrijedno izgradnje.