Work Is Work
12 Jan 2020
Ogni volta che ho scritto o parlato di design organizzativo, me ne sono pentito. Ma ci ho ripensato a lungo, ed ecco cosa ho trovato. Strap thefuck in.
A un certo punto, ogni organizzazione si rende conto che sta rallentando. Le caratteristiche richiedono più tempo per essere spedite, la gente passa sempre più tempo nelle riunioni, e tutti si fanno prendere dal panico per la stima e la pianificazione. Se abbiamo interiorizzato le stronzate essenzialiste su “giocatori B che assumono giocatori C”, forse diventiamo nervosi riguardo al Bar e alle assunzioni. Se siamo ansiosi e incerti, potremmo diventare religiosi su Agile o Scrum o qualsiasi altra cosa. Se siamo inclini a voli di fantasia modernisti, potremmo decidere di spendere i nostri gettoni di innovazione cercando di interrompere l’industria vecchia di 200.000 anni di far lavorare insieme gli umani. Se siamo il tipo da fare il nostro otto e colpire il cancello, lo consideriamo il prezzo del successo.
Questi approcci raramente producono risultati.
Il nostro sonno dogmatico
La maggior parte delle spiegazioni del successo o del fallimento organizzativo sono stronzate. I resoconti emici – cioè quelli dall’interno dell’organizzazione – sono limitati a quei concetti e narrazioni che esistono all’interno dell’organizzazione. Possono strutturalmente servire come auto-narrazioni e favorire un senso di identità e scopo all’interno del gruppo, ma poiché provengono dall’equivalente epistemologico di un pozzo di gravità, il loro potere esplicativo al di fuori di quell’organizzazione è solitamente terribile.
Se prendiamo la prospettiva etica – cioè dall’esterno dell’organizzazione – possiamo vedere che le spiegazioni emiche del successo o del fallimento di un’organizzazione hanno controfattuali facilmente disponibili in altre organizzazioni. Se le organizzazioni agili e piatte, le revisioni del codice, il monorepos, gli uffici aperti, i typesystems di fantasia, ecc. fossero effettivamente i fattori causali che si dice siano, allora perché così tante organizzazioni adottano queste pratiche senza successo? Perché ci sono altre organizzazioni di successo che non hanno queste pratiche? Come possiamo dire la differenza tra le storie cum hoc, ergo prompter hocjust-so e i fattori causali reali?
Più importante, possiamo determinare la supervenienza di un certo insieme di fattori sulla performance organizzativa, non solo in un contesto particolare ma in tutte le organizzazioni possibili? Cioè, ci sono verità necessarie e a priori sulla performance organizzativa?
Si dà il caso che ci siano.
Se si strizza l’occhio, un’organizzazione che lavora è solo un processo incredibilmente complesso, dinamico, distribuito e parallelo. Abbiamo strumenti molto buoni per capire i contorni approssimativi di come funzionano, che risalgono almeno al commento di Manabrea del 1842 a Babbage riguardo alla sua macchina analitica. Ora, non pretendo di aver sviluppato la psicostoria e dato quanto sia difficile prevedere il comportamento anche di semplici sistemi dinamici, un modello pienamente predittivo del successo organizzativo sembra certamente impossibile.
Ma come Kant tentò di ricavare le precondizioni necessarie dell’esperienza soggettiva nella Critica della ragion pura, possiamo abbozzare i confini di ciò che un’organizzazione è in grado di fare e le dinamiche di ciò mentre cresce. Nello stesso modo in cui la conoscenza a priori che dieci libbre pesano più di cinque libbre ci informa su quanta merda possiamo aspettarci di mettere in una borsa, modellare le organizzazioni come processi paralleli può informare il modo in cui le progettiamo.
Quello che succede dentro quei confini è una questione di esecuzione e di sforzo; quello che succede fuori da quei confini è impossibile.
Il soffitto è basso
La capacità di lavoro di un’organizzazione scala, al massimo, linearmente quando si aggiungono nuovi membri.Ogni nuovo membro in un’organizzazione aggiunge un numero costante di ore di lavoro possibili al totale delle ore di lavoro possibili degli impiegati esistenti dell’azienda. La legge di Amdahl afferma che, dato un compito fisso, una soluzione parallela che utilizza NNN processori sarà più veloce di una soluzione sequenziale al massimo di un fattore NNN.
Quando si aggiungono risorse parallele, il tempo totale speso nella parte parallelizzabile del compito si ammortizza a zero; al contrario, il tempo totale speso nella parte sequenziale del compito non scende mai sotto un valore minimo. Questo è vero tanto per un gruppo di persone che cercano di scrivere software quanto per un gruppo di CPU che cercano di modellare il comportamento delle stelle nella galassia. La nostra intuizione ci dice che le organizzazioni più grandi esibiscono comportamenti superlineari, ma questo letteralmente non può essere il caso se l’assunzione è l’unica variabile nell’equazione. Pertanto, la nostra unica speranza per la produttività superlineare è cambiare il compito che viene eseguito. Fortunatamente, la capacità di lavoro non è la stessa cosa della produttività.
Come un’organizzazione assume più impiegati, il lavoro sul miglioramento della produttività deve essere una priorità costante. Strumenti interni, addestramento e servizi devono essere sviluppati e messi in campo per assicurare che tutti i membri siano in grado di lavorare su problemi di impatto continuamente crescente. L’incessante ricerca di moltiplicatori di forza è l’unica strada possibile per miglioramenti di produttività superlineari man mano che un’organizzazione cresce.
Infine, bisogna sottolineare che questo limite lineare sulla capacità di lavoro è un tetto, non un pavimento.Non si può fare meglio del lineare, ma si può certamente fare peggio. Ci sono molti altri fattori che agiscono come un freno alla capacità di lavoro, e i miglioramenti della produttività a livello di organizzazione sono fondamentali per mitigarli.
The Floor Is Lava
I costi di mantenimento crescono in modo superlineare con l’aggiunta di nuovi membri. Le soluzioni parallele ai compiti sono raramente perfettamente simultanee (e in effetti, tali compiti sono giustamente chiamati “embarrassingly parallel”), e spesso richiedono alcune sezioni critiche sequenziali. La fila diCPUs o di persone che aspettano di entrare in una sezione critica può essere modellata come una coda, il che ci permette di usare la teoria della coda per capire come il tempo di ciclo della coda cambia al crescere della dimensione della coda. Se modelliamo la linea per una sezione sequenziale come una coda G/G/1G/G/1G/G/1/1, cioè senza fare alcuna affermazione sul processo di arrivo o sulla distribuzione del tempo di servizio, ma assumendo un unico server di coda (cioè una sola CPU o persona può tenere il blocco), si arriva alla formula di Kingman per il tempo medio di attesa:
E(Wq)≈(ρ1-ρ)(ca2+cs22)τ\mathbb E(W_q) \approx \sinistra( \frac{rho}{1-\rho} a destra) \frac{c_a^2+c_s^2}{2} a destra) \tauE(Wq)≈(1-ρρ)(2ca2+cs2)τ
In particolare, il tempo di attesa di una coda aumenta in modo non lineare rispetto a ρ\rhoρ (utilizzo) e in modo quadratico rispetto a cac_aca (il coefficiente di variazione degli arrivi) e csc_scs (il coefficiente di variazione dei tempi di servizio). (Questa è la forma quantificata dell’intuizione che le code sono o vuote o traboccanti.)
La non linearità di questo dovrebbe farci riflettere, poiché aumentare il numero di persone che si contendono una risorsa condivisa è la stessa cosa che aumentare ρ\rhoρ. Se la contesa su queste risorse non è gestita, la crescita organizzativa può risultare in aumenti catastrofici del tempo di attesa. Ad un certo punto, l’aggiunta di nuovi membri può far diminuire la produttività complessiva dell’organizzazione invece di aumentarla, poiché l’aumento del tempo di attesa dovuto alla contesa è maggiore dell’aumento della capacità di lavoro. (Questa è la versione organizzativa dei picchi di latenza che vediamo quando i server si sovraccaricano).
Queste risorse condivise non sono necessariamente cose fisiche, come bagni o stampanti; possono essere digitali, come file in un repository di codice sorgente o ticket in un bug tracker, o organizzative, come revisioni del codice o incarichi di lavoro. Come con la scrittura di applicazioni altamente concorrenti, la costruzione di organizzazioni ad alte prestazioni richiede un’attenta e continua ricerca di risorse condivise, e lo sviluppo di strategie esplicite per mitigare il loro impatto sulle prestazioni.
Una strategia comunemente applicata ma raramente di successo è l’uso di risorse esterne – ad esempio consulenti, agenzie, aumento del personale – come una scappatoia alla contesa sulle risorse interne. Mentre i consulenti possono effettivamente muoversi rapidamente in un ambiente a bassa contesa, l’integrazione del loro prodotto di lavoro nelle risorse contese ha spesso l’effetto di gonfiare i csc_sc (la variazione dei tempi di servizio, o per quanto tempo una sezione critica viene tenuta). Questo produce un picco quadratico nei tempi di attesa che aumenta l’utilizzo che a sua volta produce un picco superlineare nei tempi di attesa (la teoria della coda è un’amante severa.) Le strategie di successo per ridurre la contesa includono l’aumento del numero di istanze di una risorsa condivisa (ad es, l’aggiunta di bagni man mano che si aggiungono dipendenti) e lo sviluppo di euristiche senza stato per coordinare l’accesso alle risorse condivise (ad esempio, raggruppando i dipendenti in squadre).
Come per le applicazioni pesantemente stratificate, maggiore è la distanza tra chi progetta l’organizzazione e il lavoro svolto, maggiore è il rischio di punti di contesa non gestiti. I metodi organizzativi dall’alto verso il basso possono portare a suddivisioni che sembrano sforzi paralleli quando sono elencati su una diapositiva, ma che sono, in realtà, altamente interdipendenti e interconnessi. Assumere personale per sforzi altamente sequenziali come se fossero interamente paralleli porta alla catastrofe.
Hell Is Other People
I costi di coerenza crescono quadraticamente quando si aggiungono nuovi membri.Lavorare su compiti complessi usando risorse parallele (o con un gruppo di persone) richiede comunicazione. Un gruppo di 333 persone ha 333 diadi; un gruppo di 444 ha 666; un gruppo di 555 ha101010; un gruppo di NNN persone ha N2-N2\frac{N^2-N}{2}2N2-N possibili diadi. La comunicazione punto a punto (cioè parlare tra di loro) può essere modellata come l’attivazione di un sottoinsieme di queste diadi.
Anche se alcune organizzazioni sono più chiacchierone di altre, questa comunicazione è essenziale per la condivisione delle informazioni e il coordinamento delle azioni. Ma non è gratis. La comunicazione richiede tempo. Se la percentuale relativa di persone che hanno bisogno di parlare tra loro per ottenere qualcosa rimane costante mentre l’organizzazione cresce (cioè, x%x%x% di tutte le diadi), il tempo totale speso per comunicare crescerà in modo quadratico mentre la capacità di lavoro dell’organizzazione cresce linearmente.
Possiamo considerare le riunioni di gruppo come una strategia di raggruppamento per ridurre il numero di entità coinvolte nelle comunicazioni punto a punto, ma l’efficacia di questa strategia dipende fortemente dalla sovrapposizione relativa dei gruppi e dalle strutture del gruppo. Il grado di sovrapposizione dei gruppi è essenzialmente lo stesso fattore della percentuale di diadi necessaria per la comunicazione. Se le dimensioni dei gruppi sono limitate, la crescita dei costi di coerenza sarà ridotta di un fattore costante, ma crescerà comunque in modo quadratico. Può essere allettante cercare di puntare sulla coerenza e cavalcare la sporcizia, ma anche forme sottili di incoerenza hanno enormi costi di business. L’unica strategia scalabile per contenere i costi di coerenza è limitare ad un fattore costante il numero di persone con cui un individuo ha bisogno di parlare per fare il proprio lavoro.
In termini di design organizzativo, questo significa limitare sia i tipi che il numero di gruppi consultati nel processo dell’organizzazione. Ogni persona o gruppo in più in una matrice di assegnazione di responsabilità aumenta geometricamente l’area di quella matrice. Ogni ulteriore assegnazione di responsabilità in quella matrice aumenta geometricamente il costo della coerenza organizzativa.
Vale anche la pena notare che queste comunicazioni a coppie non hanno bisogno di essere formali, pianificate o persino ben conosciute per avere dei costi. Né il vostro manuale degli impiegati né il vostro calendario sono accuratieprevisioni di come viene svolto il lavoro nell’organizzazione. A meno che la vostra organizzazione sia composta da zombie, i membri dell’organizzazione saranno costantemente in grado di sovvertire le procedure operative standard per portare a termine il lavoro. Anche le formiche improvvisano. Un’accurata contabilità di questi costi nascosti può essere sviluppata attraverso un’onesta, irreprensibile e continua analisi end-to-end del lavoro mentre avviene.
Principi da oltre lo spazio e il tempo
Mantenete il lavoro parallelo, i gruppi piccoli e le risorse locali.
Quando ci si presenta con un insieme di problemi che diventano superlinearmente intrattabili all’aumentare di NNN, la cosa migliore è mantenere NNN piccolo. Se l’intento dell’organizzazione è di aumentare la fornitura di valore assumendo più persone, gli sforzi di lavoro devono essere il più indipendenti possibile. I leader dovrebbero sviluppare pratiche e processi per assicurare che gli sforzi lavorativi che le loro strategie considerano paralleli siano effettivamente paralleli. Le risorse condivise dovrebbero essere continuamente gestite per la contesa, e dove possibile, le risorse di cui un gruppo ha bisogno dovrebbero essere collocate insieme a quel gruppo (per esempio, se il lavoro implica molto design, si può assegnare un designer a quel gruppo). La dottrina delle armi combinate non è solo per i soldati.
Privilegiare lo sviluppo dei moltiplicatori di forza.
Se un’organizzazione sta lavorando in gran parte sugli stessi tipi di problemi degli anni precedenti, è motivo di preoccupazione. I team dedicati agli strumenti interni dovrebbero essere dotati di personale e avere l’esplicita direzione di costruire strumenti e ottimizzare i processi per aiutare ad aumentare la produttività dei loro colleghi. Se la percentuale dell’organizzazione dedicata a migliorare il modo in cui l’organizzazione lavora comincia a diminuire, chiedetevi: abbiamo raggiunto un massimo globale o locale? Vai lungo sugli strumenti ad alta leva, ma rimani con i piedi per terra per vedere se effettivamente aiutano o meno.
Se possibile, fattorizza i prodotti di lavoro in moduli indipendenti; se no, cresci lentamente e ottimizza.
Se il tuo prodotto di lavoro – ad esempio il codice base, i documenti, ecc – può essere fattorizzato in moduli indipendenti, fallo. La parola chiave è indipendente. Tagliare la vostra merda in cento microservizi non vi aiuterà se ognuno ha bisogno di cambiare dieci di essi per ottenere qualcosa. Alcuni problemi non sono particolarmente adatti alla partizione; questi sono anche problemi che non beneficiano molto dai lavoratori aggiuntivi. Se il problema è un punto fisso, cercate modi per ottimizzare la parte sequenziale del lavoro. Sappiate che buttare corpi su quel problema produrrà un clusterfuck.
Scala gli sforzi organizzativi su un portafoglio di prodotti sinergici.
La maggior parte delle imprese intelligenti inizia con un singolo prodotto. Vanno lungo sulla loro ipotesi di prodotto, mettono le uova in un solo paniere e puntano al massimo. Se sono abbastanza fortunati da ottenere trazione, raddoppiano su questo. Passo. E ancora. E ancora. Ad un certo punto, hanno diversi battaglioni di persone che macinano in giro, tutti cercando di capire chi possiede il turboencabulator UI e se i nuovi marzelvanes saranno o meno completamente antigrafici per la grande spinta di marketing autunnale.
Per evitare questo, i leader dell’organizzazione dovrebbero mantenere lo sviluppo di un portafoglio di prodotti come un obiettivo esplicito. Caratteristiche o idee di prodotto che sono complementari alla strategia globale dell’organizzazione ma non coesistono naturalmente con il prodotto principale possono essere sviluppate come prodotti separati da team indipendenti. Abbiamo prove che i programmi di sviluppo del software possono essere accorciati, al massimo, del 25%; dovrebbe essere facile scegliere tra un singolo prodotto in 18 settimane o due prodotti in 24 settimane.
I nuovi prodotti di successo possono essere integrati incrementalmente con i prodotti esistenti dove ha senso, e strumenti, librerie e framework possono essere sviluppati da team di moltiplicatori di forza per ridurre sia il time-to-market dei nuovi prodotti che i costi di trasporto dei prodotti esistenti. I nuovi prodotti che non hanno successo possono essere rimossi con grazia dal mercato ad un costo drammaticamente inferiore rispetto alle caratteristiche di complessità simile. Dopo tutto, rimuovere una caratteristica da un prodotto comporta gli stessi costi di contesa e coerenza dell’aggiunta di una caratteristica. È raro che una caratteristica presenti un costo di trasporto superiore al costo della sua rimozione, quindi la prevalenza delle caratteristiche Flying Dutchman.
Come esempio concreto della virtù di un portafoglio di prodotti, immaginate Amazon Web Services come un singolo prodotto, con uno staff di centomila anime condannate e un’interfaccia utente che è solo una serie di pulsanti che vi permette di fornire e gestire macchine virtuali, database, laghi di dati, applicazioni robotiche, applicazioni di realtà aumentata, dingus IoT e altro. Una tale creatura imploderebbe sotto il suo stesso peso.
Invece, Amazon Web Services è un portafoglio di prodotti sinergici. EC2 ha il suo set di caratteristiche indipendenti, sviluppato e gestito da un gruppo indipendente di dipendenti. Quando le sue esigenze possono essere soddisfatte da un altro prodotto AWS (ad esempio, l’archiviazione di immagini di macchine virtuali su S3 o l’invio di metriche a CloudWatch), viene introdotta un’integrazione tra prodotti. Questa struttura di prodotto permette la struttura organizzativa altamente concorrente che consente ad Amazon di mettere in campo un numero impressionante di nuovi prodotti ogni anno mentre continua a supportare e sviluppare i prodotti esistenti. I servizi falliti possono essere abbandonati o ridotti senza interrompere il resto dell’organizzazione.
Mantenere le matrici di assegnazione delle responsabilità piccole, rade e locali.
Quando un’organizzazione matura, i ruoli ad-hoc sono spesso sviluppati in team completi. Questa specializzazione è spesso critica per costruire economie di scala interne, ma la formalizzazione di nuove circoscrizioni dovrebbe essere tenuta sotto controllo. Ogni colonna nella matrice di assegnazione delle responsabilità espande geometricamente il possibile insieme di interazioni richieste; ogni assegnazione nella matrice è un punto di coordinamento che richiede attesa. Dove una matrice indica una relazione ad alto contatto tra due gruppi (ad esempio, un gruppo di ingegneri che lavora su una caratteristica e gli avvocati che cercano di assicurare la conformità legale di quella caratteristica), si dovrebbero fare sforzi per ridurre il costo di quella interazione colocalizzando i loro membri (ad es, incorporare un avvocato con gli ingegneri).
Privilegiare la distribuzione asincrona delle informazioni rispetto a quella sincrona.
Una fonte significativa di fallimento della domanda di riunioni e aggiornamenti di stato è il desiderio dei leader organizzativi di stare al passo con chi sta facendo cosa. Questa consapevolezza situazionale è davvero importante, ma cercare di mantenerla chiamando riunioni, messaggiando le persone su Slack, e catturando le persone nei corridoi è un significativo freno sistemico alla produttività organizzativa.
Un modello migliore per rimanere informati degli sviluppi mentre l’organizzazione scala è per i gruppi che pubblicano aggiornamenti di stato come parte della cadenza regolare del loro lavoro. I leader possono leggere in modo asincrono questi aggiornamenti e, in caso di necessità, avviare un’ulteriore conversazione sincrona per porre domande, fornire feedback, ecc.
Le riunioni sincrone dovrebbero essere riservate alla collaborazione a bassa latenza su questioni complesse; allo stesso modo, la collaborazione dovrebbe essere riservata alle riunioni sincrone.
Quello che succede dentro i confini è importante.
Il fatto di conoscere alcuni dei confini delle prestazioni organizzative e le loro dinamiche non ci esime dall’usare la nostra empatia per costruire organizzazioni umane. Le aziende sono gruppi di persone che vengono compensate per il fatto di dover trascorrere parte della loro vita finita senza stare con i loro partner, figli, animali domestici o hobby super strani. Meritano di essere membri di organizzazioni che onorano quel tempo assicurando che il loro lavoro abbia valore e significato. Non esiste un modello matematico che ci guidi verso questo obiettivo.
Grazie a vari Fiascans per aver rivisto questo post. Eventuali errori in questo articolo sono miei, non loro.
Grazie a vari Fiascans per aver rivisto questo post.