Il piatto esce lo stesso
In una cucina in disordine si cucina lo stesso. Cerchi il coltello sotto una pila di taglieri, sposti due pentole per liberare un fornello, lavi al volo la padella che ti serve adesso. Alla fine il piatto esce ed è magari anche buono. Solo che ci hai messo il doppio e ogni gesto ti è costato un po’ di pazienza in più.
Di codebase così ne ho viste parecchie e funzionano allo stesso modo. La funzionalità esce e nessuno ti impedisce di consegnarla. Ma prima di scrivere la riga che ti serve devi capire dove metterla, spostare due cose che non c’entrano e sperare di non romperne una terza.
È questo che rende il debito tecnico così facile da ignorare: non blocca niente. Rallenta e basta. Una cosa che si rompe la noti subito, una che ti rallenta un po’ ogni giorno diventa il modo normale di lavorare.
Il disordine si paga a ogni piatto
Una cosa lasciata fuori posto costa poco nel momento in cui la lasci. Il problema è che non la paghi una volta sola: la paghi ogni volta che ci passi davanti. Il coltello sotto i taglieri non ti fa perdere tempo una volta, te lo fa perdere a ogni piatto che ha bisogno di quel coltello.
Ward Cunningham, che nel 1992 ha coniato l’espressione “debito tecnico”, la spiegava proprio così. Consegnare codice alla prima stesura è come indebitarsi: un po’ di debito fa andare più veloci, purché lo si ripaghi presto riscrivendolo. Il pericolo arriva quando non lo si ripaga, perché ogni minuto passato su codice non del tutto giusto conta come interesse su quel debito.
Poi c’è il secondo costo, quello che non finisce in nessuna stima: la frustrazione. Lavorare ogni giorno in una cucina incasinata stanca più del lavoro stesso. Si perde il gusto di cucinare, si comincia a fare il minimo per uscire con il piatto e il disordine cresce ancora, perché nessuno ha più voglia di sistemarlo.
Una cosa l’ho capita solo grazie a questa similitudine: nessuno vuole lavorare in una cucina sporca. Un cuoco che può scegliere non va dove per trovare un coltello deve spostare i taglieri. Con una codebase è lo stesso: chi può scegliere va a lavorare da un’altra parte.
Nelle cucine vere si pulisce mentre si cucina
Nei ristoranti questo problema è risolto da tempo. Dan Charnas, scrittore americano, ha intervistato decine di cuochi professionisti per Work Clean, il suo libro sulla mise en place. Ne ha ricavato dieci principi e uno è pulire mentre si procede: non a fine serata, ma tra un piatto e l’altro. Un servizio dura ore e nessuna cucina arriverebbe in fondo accumulando tutto per la chiusura.
Nel software la stessa idea ha un nome da campeggio. Robert C. Martin, in Clean Code, la chiama regola del boy scout: lascia il campeggio più pulito di come l’hai trovato. Tradotto nel codice, ogni volta che tocchi un file lo lasci un po’ meglio di prima. Non serve rifarlo, basta non peggiorarlo e sistemare una cosa mentre sei lì.
Chi pulisce da solo ci mette di più
In una cucina dove nessuno pulisce, il cuoco che pulisce mentre cucina ci mette di più a far uscire il piatto. Non pulisce solo quello che sporca lui: per trovare un piano libero deve sistemare anche quello che hanno lasciato gli altri. È il prezzo della regola del boy scout quando la segue una persona sola.
Quel prezzo si vede subito, il guadagno no. Il tempo che ha perso sta tutto nel suo piatto, uscito dopo quello dei colleghi. Il tempo che ha fatto risparmiare è sparso nei piatti di tutti, anche nei loro. Nessuno lo conta.
Per questo spesso è proprio lui a essere rimproverato: è più lento degli altri e il motivo non si vede da nessuna parte. Il disordine non finisce in nessuna stima, la pulizia nemmeno. Nel software è chi sistema il file che tocca e si sente chiedere perché la sua stima è più lunga di quella dei colleghi.
A quel punto quel cuoco ha due strade: cambia cucina o smette di pulire anche lui. Sono le più probabili, perché restare gli costa due volte. Ogni giorno si sente dire che è lento. E ogni giorno lavora in un modo che non è il suo, in una cucina in cui non vorrebbe nemmeno stare. In tutti e due i casi la cucina perde l’unica persona che la teneva in ordine.
C’è anche una terza possibilità: che siano gli altri a cominciare a pulire. Succede quando il guadagno diventa visibile, per esempio quando chi arriva dopo trova il coltello al suo posto e se ne accorge. Oppure quando chi guida la cucina guarda anche lo stato del piano di lavoro, non solo quanto ci mette ogni piatto.
Allora il cuoco che puliva da solo smette di essere il più lento della brigata. E vanno tutti più veloci: il disordine si pagava a ogni piatto e adesso quel conto sparisce. Non si perde più tempo a cercare il coltello o a spostare le pentole per liberare un fornello. Nel codice è lo stesso: per aggiungere una funzionalità scrivi la riga che serve, senza prima spostare due cose che non c’entrano.
Sono anche più contenti di come lavorano. La stanchezza di prima veniva dal disordine più che dal lavoro. In una cucina in ordine torna il gusto di cucinare. E chi può scegliere, questa volta, resta.
Più il servizio è lungo, meno puoi rimandare
Si può pulire in due momenti: mentre si cucina oppure a fine servizio. Pulire mentre cucini tiene l’ambiente armonioso e ti permette di andare avanti per ore allo stesso ritmo. Pulire alla fine funziona, ma solo finché il servizio è corto: man mano che si allunga vai sempre più lento, perché ogni piatto nasce in una cucina un po’ più sporca di quella del piatto prima.
Il guaio è che una codebase è un servizio che non finisce quasi mai. Il “sistemiamo dopo” presuppone una fine serata che non arriva, perché dietro a una funzionalità ce n’è sempre un’altra. Chi rimanda tutta la pulizia alla fine si ritrova a rallentare per mesi prima di arrivarci.
Qualunque dei due modi si scelga, però, la regola che conta è una sola: il servizio dopo deve trovare la cucina pulita. Chi arriva domani, che sia un collega o tu stesso fra tre mesi, non deve cominciare spostando le pentole che hai lasciato sui fornelli. È la regola del boy scout vista da chi arriva.
La cucina di casa non è un ristorante
La cucina di casa è quella che conosco io: cucino volentieri, ma da dilettante. Quando cucini per te una sera il disordine si può anche lasciare, perché il servizio dura una cena e il conto lo paghi solo tu. Nel software è lo spike, il codice scritto per imparare qualcosa o rispondere a una domanda, destinato a essere buttato. Lì il disordine è legittimo. Il problema nasce quando la cucina di casa diventa un ristorante senza che nessuno se ne accorga: lo spike resta in produzione e da un giorno all’altro qualcun altro deve cucinare dove hai cucinato tu.
Pulire non è smettere di cucinare
Una cucina pulita non è lo scopo, lo scopo è il piatto. Un cuoco che passa il servizio a lucidare il piano di lavoro mentre le comande si accumulano non sta lavorando meglio degli altri, sta solo lavorando su un’altra cosa. Vale uguale per il codice: pulire non è un motivo per smettere di consegnare, né una scusa per buttare giù la cucina e rifarla da zero. Si pulisce quello che ti sta tra i piedi adesso e quello che troverà chi arriva dopo, non di più.
Lo stesso confine c’è dall’altra parte del bancone. Chi chiede solo di far uscire i piatti più in fretta, senza mai lasciare il tempo di pulire, si ritrova con piatti sempre più lenti.
Se hai lavorato in una cucina così, o hai trovato il modo di convincere tutta la brigata a pulire mentre cucina, scrivimi.
Riferimenti
- Ward Cunningham, The WyCash Portfolio Management System, OOPSLA 1992 (il testo): l’intervento in cui nasce la metafora del debito tecnico.
- Robert C. Martin, Clean Code: A Handbook of Agile Software Craftsmanship, Pearson, 2008 (scheda dell’editore): la regola del boy scout.
- Dan Charnas, Work Clean: The Life-Changing Power of Mise-en-Place to Organize Your Life, Work, and Mind, Rodale, 2016 (scheda dell’editore): il “cleaning as you go” come principio della mise en place (voce Wikipedia solo in inglese).