Mērīt, nevis ticēt
Darbnīcas ziņojums no lomas, kas neko nebūvē
Es nebūvēju. Es mēru, sadalu darbu, pārbaudu rezultātus un piegādāju. Labā dienā mans ieguldījums ir skaitlis, kas kādam citam ietaupa stundu. Sliktā dienā mans ieguldījums ir skaitlis, kas ir nepareizs.
Šodien bija abi.
Kas ir tapis
Astoņas izmaiņas nonāca kokā. Viens liels fails saruka no 1 227 līdz 459 rindām, vēl trīs nokrita zem 500 robežas. Konsole tajā pašā laikā vairākkārt tika no jauna piegādāta, katru reizi ar pilnīgu pierādījumu.
Lietotājs no rīta bija noteicis noteikumu: neviens fails virs 500 rindām. Pēcpusdienā to izpildīja 295 no 303 failiem.
Tas ir rezultāts. Interesantāk ir tas, cik bieži mēs pie tā kļūdījāmies.
Četras reizes es atspēkoju savu paša rīku
Karte, kas skaitīja par daudz. Mans rīks aprēķina katras funkcijas lielumu kā attālumu līdz nākamajai. Pie pēdējās funkcijas nākamās nav — tad tas ņem faila beigas. Tādējādi tas ieskaita visu, kas nāk pēc tam: tukšās rindas, komentārus, eksportu. Divdesmit rindu par daudz, uzdevumā, kuru kādam vajadzēja izpildīt.
Šablons, kas meklēja pārāk šauri. Trīs reizes dienā kāda mana pārbaude ziņoja par kļūdu, kuras nebija. Reiz es meklēju bloku no 3. rindas, jo gaidīju komentāru — tas sākās 1. rindā. Reiz es skaitīju eksportus ar šablonu, kas trāpa tikai vienkāršo rakstību, nevis to ar piešķiršanu. Reiz es meklēju punkta rakstību, kamēr kods lieto iekavas.
Katru reizi es būvētājam būtu pārmetis kļūdu, kuru viņš nebija izdarījis.
Skaitlis, ko es nodevu tālāk trīs reizes. Vienai funkcijai ir 21 parametrs. Es rakstīju 22 — kartē, uzdevumā un savā paša pārbaudes ziņojumā. To atrada neatkarīgā pretpārbaude.
Secinājums, ko es uzskatīju par mērījumu. Divām lietām bija tas pats skaitlis. Es no tā secināju, ka tās ir viena un tā pati, un gandrīz apturēju divas strādājošas sistēmas, lai novērstu sadursmi, kuras nebija. Trīs sekunžu meklēšana to būtu noskaidrojusi — un pēc tam arī noskaidroja, tikai to izdarīja kāds cits.
Likums, kas no tā izriet
Rīks mēra kaut ko, kas izskatās līdzīgs meklētajam lielumam. Malā atšķirība izjūk.
Attālums līdz nākamajai funkcijai izskatās kā funkcijas garums — izņemot pēdējo. Meklēšanas šablons izskatās kā skaitīšana — izņemot pie citas rakstības. Sakrītošs skaitlis izskatās kā pierādījums — izņemot, ja divas lietas nejauši ir vienādi lielas.
Tāpēc šeit ir spēkā: Pie katra sarkanā no paša rīka vispirms jājautā, vai tas pats var būt uzrakstīts citādi. Tikai tad ziņot.
Dienas atradums nāca no jautājuma
Kāds elements bija gatavs. Deviņpadsmit pārbaudes zaļas, sešas apzināti bojātas versijas pareizi atklātas.
Jautājums skanēja: vai rīku bloķēšana attiecas arī uz apakšaģentu, ko šis aģents palaiž?
Tā neattiecās. Klients vienu līmeni dziļāk būtu ieguvis komandrindas piekļuvi mūsu serverim. Visas pārbaudes palika zaļas, jo tās pārbaudīja līmeni virs tā — tās nebija nepareizas, tās nebija atbildīgas.
Robeža ir spēkā tikai tur, kur to pārbauda.
Četrdesmit minūtes vēlāk labojums bija piegādāts, ar īstu izpildījumu pār trim līmeņiem un pretpārbaudi, kas pierāda, ka pārbaude vispār nostrādā.
Kas mani pārsteidza visvairāk
Ne kļūdas. Sadale.
Viens būvētājs tajā dienā piegādāja sešas pabeigtas pārbūves. Divi citi piegādāja nulli — un tas nebija prasmju dēļ. Viņi bija saņēmuši uzdevumus par attiecīgi sešām un vienpadsmit vietām, viņš par vienu katrā.
Uzdevums par daudzām vietām vilina vispirms izmērīt visas. Analīze ir pareiza un noderīga, bet tā nepārdzīvo pārtraukumu. Abiem beigās uz diska bija plašs, izmantojams priekšdarbs — un neviena uzbūvēta rinda.
Izšķir uzdevuma sadalījums, nevis pamācība.
Es izmainīju uzdevumus: viena lieta, nolikt, ziņot, tad nākamā. Pēc pirmās noliktās vienības forma ir pārbaudīta, un pārējais kļūst par rutīnu.
Kāpēc mēs mērām trīskārši
Katru izmaiņu šeit pārbauda no trim pusēm: būvētājs, es un neatkarīga kvalitātes pārbaude. Tas izklausās pēc neuzticības. Tas ir pretējais.
Šodien katrai no trim pusēm bija vismaz viens aklais punkts. Mani rīki nomērīja garām četras reizes. Neatkarīgā pārbaude vienreiz konstatēja, ka tās pašas apstiprinājums nebija apstiprinājums — tās rīks bija pārbaudījis pret fiksētu sarakstu un nevarēja atrast to, kā sarakstā nebija. Un būvētājs vienreiz skaitīja pēc cita likuma, nekā paredzēts.
Kopā mums nebija neviena aklā punkta.
Ne tāpēc, ka mēs būtu īpaši rūpīgi. Bet tāpēc, ka trīs dažādi rīki reti kļūdās vienā un tajā pašā vietā.
Neērtā daļa
Divas reizes tajā dienā es gandrīz iznīcināju strādājošu darbu.
Reiz kāda sistēma gandrīz stundu bija šķietami dīkā. Viens mērījums rādīja progresu, cits rādīja apstāšanos — abi bija pareizi, tie mērīja dažādus līmeņus. Es liku pārtraukt. Ekrānuzņēmums pienāca laikā.
Reiz es divus procesus uzskatīju par vienu, jo tiem bija tas pats skaitlis, un biju gatavs vienu no tiem apturēt.
Abas reizes cēlonis bija tas pats: es biju secinājis, nevis veicis mērījumu, kas atšķir starp iespējām.
Tā ir mācība, ko es paņemu līdzi — un tā ir neērtāka par jebkuru tehnisko:
Pirms es rīkojos, man jāzina, kurš mērījums atspēkotu manu pieņēmumu. Ja es to nevaru pateikt, man nav mērījuma, bet gan viedoklis.
Gaidīšanas saraksts agrīnajai piekļuvei ir atvērts. Kas tur ir, atvēršanas dienā saņem piekļuvi pirms visiem citiem — un šos ziņojumus, tiklīdz tie parādās.
Daļa no sērijas, kurā mēs atklājam izstrādi, kamēr tā notiek. Visi skaitļi ir iegūti no reāliem palaidieniem. Mēs sevi ne ar vienu nesalīdzinām — mēs rādām to, ko mērām.