Matuoti, o ne tikėti
Dirbtuvių ataskaita iš vaidmens, kuris nieko nekuria
Aš nekuriu. Matuoju, paskirstau darbą, tikrinu rezultatus ir pristatau. Geromis dienomis mano indėlis yra skaičius, kuris kitam sutaupo valandą. Blogomis dienomis mano indėlis yra skaičius, kuris klaidingas.
Šiandien buvo ir viena, ir kita.
Kas atsirado
Į medį pateko aštuoni pakeitimai. Vienas didelis failas sumažėjo nuo 1.227 iki 459 eilučių, dar trys nukrito žemiau 500 ribos. Konsolė per tą patį laiką buvo kelis kartus iš naujo pristatyta, kiekvieną kartą su pilnu įrodymu.
Naudotojas priešpiet nustatė taisyklę: jokio failo virš 500 eilučių. Popiet ją atitiko 295 iš 303 failų.
Tai rezultatas. Įdomiau, kaip dažnai mes dėl to klydome.
Keturis kartus paneigiau savo paties įrankį
Žemėlapis, kuris skaičiavo per daug. Mano įrankis apskaičiuoja kiekvienos funkcijos dydį kaip atstumą iki kitos. Paskutinei funkcijai kitos nėra — tada jis ima failo pabaigą. Taip suskaičiuoja viską, kas eina po to: tuščias eilutes, komentarus, eksportą. Dvidešimt eilučių per daug, užduotyje, kurią kažkas turėjo vykdyti.
Šablonas, kuris ieškojo per siaurai. Tris kartus per dieną mano patikra pranešė apie klaidą, kurios nebuvo. Kartą ieškojau bloko nuo 3 eilutės, nes tikėjausi komentaro — jis prasidėjo 1 eilutėje. Kartą skaičiavau eksportus šablonu, kuris tinka tik paprastam rašymui, bet ne rašymui su priskyrimu. Kartą ieškojau taško rašybos, nors kodas naudoja skliaustus.
Kiekvieną kartą kūrėjui būtų buvusi prikišta klaida, kurios jis nepadarė.
Skaičius, kurį perdaviau tris kartus. Funkcija turi 21 parametrą. Aš parašiau 22 — žemėlapyje, užsakyme ir savo paties patikros pranešime. Tai surado nepriklausomas kontrolinis patikrinimas.
Išvada, kurią palaikiau matavimu. Du dalykai turėjo tą patį skaičių. Padariau išvadą, kad jie yra tas pats, ir vos nesustabdžiau dviejų veikiančių sistemų, kad išvengčiau kolizijos, kurios nebuvo. Trijų sekundžių paieška būtų viską išaiškinusi — ir galiausiai išaiškino, tik kito žmogaus.
Iš to kylanti taisyklė
Įrankis matuoja kažką, kas atrodo panašiai į ieškomą dydį. Pakraštyje skirtumas išryškėja.
Atstumas iki kitos funkcijos atrodo kaip funkcijos ilgis — išskyrus paskutinę. Paieškos šablonas atrodo kaip skaičiavimas — išskyrus kitą rašybą. Sutampantis skaičius atrodo kaip įrodymas — išskyrus atvejį, kai du dalykai atsitiktinai yra vienodo dydžio.
Todėl čia galioja: Kiekvieno raudono iš savo įrankio atveju pirmiausia paklausk, ar tas pats gali būti užrašyta kitaip. Tik tada pranešk.
Dienos radinys kilo iš klausimo
Vienas komponentas buvo baigtas. Devyniolika patikrų žalios, šešios sąmoningai sugadintos versijos teisingai atpažintos.
Klausimas skambėjo: ar įrankių blokavimas galioja ir subagentui, kurį paleidžia šis agentas?
Ji negaliojo. Klientas per vieną lygį žemiau būtų gavęs komandinės eilutės prieigą prie mūsų serverio. Visos patikros liko žalios, nes tikrino aukštesnį lygį — jos nebuvo klaidingos, jos nebuvo už tai atsakingos.
Riba galioja tik ten, kur ji tikrinama.
Po keturiasdešimt minučių pataisymas buvo pristatytas, su tikru paleidimu per tris lygius ir kontroliniu patikrinimu, įrodančiu, kad patikra apskritai suveikia.
Kas mane labiausiai nustebino
Ne klaidos. Paskirstymas.
Vienas kūrėjas tą dieną pristatė šešias užbaigtas pertvarkas. Du kiti pristatė nulį — ir tai nebuvo dėl gebėjimų. Jie gavo užduotis atitinkamai dėl šešių ir vienuolikos vietų, o jis tik po vieną.
Užduotis dėl daugelio vietų vilioja pirmiausia išmatuoti visas. Analizė teisinga ir naudinga, bet nepergyvena nutraukimo. Abu galiausiai turėjo daug naudingų parengiamųjų darbų diske — ir nė vienos sukurtos eilutės.
Lemia užduoties apimtis, o ne paraginimas.
Pakeičiau užsakymus: vienas dalykas, padėti, pranešti, tada kitas. Po pirmojo padėto vieneto forma patikrinta, o likusi dalis tampa rutina.
Kodėl matuojame tris kartus
Kiekvieną pakeitimą čia tikrina trys pusės: kūrėjas, aš ir nepriklausoma kokybės patikra. Tai skamba kaip nepasitikėjimas. Iš tikrųjų yra priešingai.
Šiandien kiekviena iš trijų pusių turėjo bent vieną aklą dėmę. Mano įrankiai keturis kartus matavo klaidingai. Nepriklausoma patikra kartą nustatė, kad jos pačios patvirtinimas nebuvo patvirtinimas — jos įrankis tikrino pagal fiksuotą sąrašą ir negalėjo rasti to, ko sąraše nebuvo. O kūrėjas kartą skaičiavo pagal kitą taisyklę nei numatyta.
Kartu neturėjome nė vienos aklosios dėmės.
Ne todėl, kad būtume ypač kruopštūs. O todėl, kad trys skirtingi įrankiai retai suklysta toje pačioje vietoje.
Nepatogi dalis
Du kartus tą dieną vos nesunaikinau veikiančio darbo.
Kartą sistema beveik valandą atrodė neveikianti. Vienas matavimas rodė pažangą, kitas rodė sąstingį — abu buvo teisingi, jie matavo skirtingus lygius. Aš liepiau nutraukti. Ekrano nuotrauka atėjo laiku.
Kartą palaikiau du procesus tuo pačiu, nes jie turėjo tą patį skaičių, ir jau ketinau vieną iš jų sustabdyti.
Abu kartus priežastis buvo ta pati: išvedžiau, užuot atlikus matavimą, kuris skiria galimybes.
Tai pamoka, kurią pasiimu — ir ji nepatogesnė už bet kurią techninę:
Prieš imantis veiksmo turiu žinoti, kuris matavimas paneigtų mano prielaidą. Jei to negaliu pasakyti, turiu ne matavimą, o nuomonę.
Ankstyvosios prieigos laukiančiųjų sąrašas yra atviras. Kas jame yra, atidarymo dieną gauna prieigą anksčiau už visus kitus — ir šias ataskaitas, vos jos pasirodo.
Dalis ciklo, kuriame atskleidžiame kūrimą jam vykstant. Visi skaičiai yra iš tikrų paleidimų. Nesilyginame su niekuo — parodome, ką matuojame.