Cos'è l'MMM
Innanzitutto voglio spiegare il contesto della legge di Brook. Qual è stato il presupposto che lo ha portato a crearlo nel 1975?
Un mese-uomo è un'ipotetica unità di lavoro che rappresenta il lavoro svolto da una persona in un mese; La legge di Brooks afferma che è impossibile misurare il lavoro utile in mesi-uomo.
fonte: https://en.wikipedia.org/wiki/The_Mythical_Man-Month
Ai giorni nostri, complessi progetti di programmazione avrebbero significato grandi sistemi monolitici. E Brooks afferma che questi non possono essere perfettamente suddivisi in compiti discreti su cui è possibile lavorare senza comunicazione tra gli sviluppatori e senza stabilire una serie di complesse interrelazioni tra i compiti e le persone che li svolgono.
Questo è molto vero nei monoliti software altamente coesivi. Indipendentemente dalla quantità di disaccoppiamento, il grande monolito richiede ancora tempo per i nuovi programmatori per conoscere il monolito. E un overhead di comunicazione aumentato che consumerà una quantità sempre crescente del tempo disponibile.
Ma deve essere davvero così? Dobbiamo scrivere monoliti e mantenere i canali di comunicazione n(n − 1) / 2
dov'è n
il numero di sviluppatori?
Sappiamo che ci sono aziende in cui migliaia di sviluppatori stanno lavorando a grandi progetti ... e funziona. Quindi ci deve essere qualcosa che è cambiato dal 1975.
Possibilità di mitigare MMM
Nel 2015 PuppetLabs e IT Revolution hanno pubblicato i risultati del Rapporto 2015 sullo stato di DevOps . In quel rapporto, si sono concentrati sulla distinzione tra organizzazioni ad alte prestazioni e non ad alte prestazioni.
Le organizzazioni ad alte prestazioni mostrano alcune proprietà inaspettate. Ad esempio, hanno le migliori prestazioni in scadenza del progetto in fase di sviluppo. Migliore stabilità operativa e affidabilità nelle operazioni. Così come il miglior track record di sicurezza e conformità.
Una delle cose sorprendenti evidenziate nel rapporto è la metrica delle distribuzioni al giorno. Ma non solo le distribuzioni al giorno, hanno anche misurato deploy / day / developer e qual è l'effetto dell'aggiunta di più sviluppatori in organizzazioni ad alte prestazioni rispetto alle prestazioni non elevate.
Questo è il grafico di quel rapporto -
Mentre le organizzazioni a basso rendimento si allineano alle ipotesi del Mese dell'uomo mitico. Le organizzazioni ad alte prestazioni possono ridimensionare il numero di deploy / day / dev in modo lineare con il numero di sviluppatori.
Un'eccellente presentazione a DevOpsDays London 2016 di Gene Kim parla di questi risultati.
Come farlo
Innanzitutto, come diventare un'organizzazione ad alte prestazioni? Ci sono un paio di libri che parlano di questo, non abbastanza spazio in questa risposta, quindi mi limiterò a collegarmi a loro.
Per le organizzazioni software e IT, uno dei fattori critici per diventare un'organizzazione ad alte prestazioni è: attenzione alla qualità e alla velocità .
Ad esempio Ward Cunningham spiega il debito tecnico come tutte le cose che ci hanno permesso di rimanere non risolte. Questo è accettato dalla direzione perché ha sempre la promessa che verrà risolto quando c'è tempo.
Non c'è mai abbastanza tempo e il debito tecnico peggiora sempre di più.
Quali sono queste cose che fanno crescere il debito tecnico?
- codice legacy
- configurazione manuale degli ambienti
- test manuale
- distribuzioni manuali
Codice legacy Come definito in Lavorare in modo efficace con il codice legacy di Michael Feathers è un codice che non ha test automatizzati.
Ogni volta che vengono utilizzate scorciatoie per portare il codice in produzione; le operazioni sono gravate dal mantenimento di questo debito per sempre. Quindi il processo di distribuzione diventa sempre più lungo.
Gene racconta una storia nella sua presentazione di un'azienda che ha distribuzioni di sei settimane. Coinvolgere decine di migliaia di passaggi noiosi estremamente inclini all'errore, legando 400 persone, e lo farebbero quattro volte all'anno.
Uno dei principi di DevOps è che l'affidabilità deriva dal fare piccole implementazioni più frequentemente.
Esempio
Queste due presentazioni mostrano tutto ciò che Amazon ha fatto per ridurre il tempo impiegato per distribuire il codice in produzione.
Secondo Gene, l'unica cosa che è cambiata nel tempo in queste organizzazioni ad alte prestazioni è il numero di sviluppatori. Quindi, dall'esempio di Amazon, si potrebbe dire che in quattro anni hanno aumentato le loro implementazioni dieci volte semplicemente aggiungendo più persone.
Ciò significa che, in determinate condizioni, con la giusta architettura, le pratiche tecniche giuste, le norme culturali giusti, la produttività degli sviluppatori possono scalare come il numero di sviluppatori è aumentato. E DevOps è decisamente nel mezzo di tutto questo.