Il Platform Engineering Riduce il Carico Cognitivo di chi sviluppa
Questo articolo è stato pubblicato in origine su The New Stack.
Non sorprende che negli ultimi decenni chi sviluppa abbia creato innumerevoli meme che descrivono la fatica di aprire la base di codice di un’azienda e di comprenderla. Il tentativo di scegliere saggiamente strumenti, framework e metodologie, oltre a rispettare il mantra DevOps del “tu lo costruisci, tu lo gestisci”, ha fatto salire alle stelle il carico cognitivo di chi sviluppa software, richiedendo sforzi e risorse significative per comprendere, creare e mantenere un software sempre più complesso.
Per alleviare questo eccessivo carico cognitivo è possibile addotare il platform engineering, un approccio strutturato che alleggerisce la pressione del ciclo di vita dello sviluppo del software snellendo i processi, offrendo strumenti standardizzati e automatizzando le attività ripetitive.
In questo articolo vedremo l’impatto del carico cognitivo sulla produttività dei team di sviluppo e in che modo il platform engineering può aiutare a ridurre questo carico, a incrementare la produttività e a favorire lo sviluppo del software.
Il carico cognitivo nello sviluppo software
Coniato da John Sweller nel 1988 nel paper Cognitive Load During Problem-Solving: Effects on Learning, il termine cognitive load si riferisce alla quantità di sforzo intellettuale o di elaborazione delle informazioni necessarie per eseguire un compito. Per quanto riguarda lo sviluppo del software, il carico cognitivo è lo sforzo analitico necessario per elaborare le informazioni relative agli artefatti software, che varia a seconda del compito e dell’individuo.
Robert Martin ha dimostrato nel suo libro Clean Code: A Handbook of Agile Software Craftsmanship che “il rapporto tra il tempo che gli sviluppatori dedicano alla lettura e alla comprensione rispetto alla scrittura del codice è di oltre 10 a 1”. Non solo, il carico cognitivo è una lotta pervasiva che si intensifica se diventa eccessiva, che limita la quantità di informazioni che le persone possono efficacemente elaborare e memorizzare, causando ritardi nel completamento dei compiti, errori e soluzioni non ottimali, oltre ad aumentare lo stress, potenzialmente causando burnout e penalizzando la soddisfazione lavorativa.
Il ruolo del Platform Engineering
Il Platform engineering è la pratica di progettare e costruire catene di strumenti e flussi di lavoro per funzionalità self-service che riducono la complessità e l’incertezza dello sviluppo del software nell’era cloud-native. Di fondamentale importanza sono le internal developer platforms (IDP) che gestiscono in modo affidabile le configurazioni delle applicazioni, costruiscono ambienti nuovi e completamente provvisti se necessario, forniscono pipeline per continuous delivery o deployment e, cosa più importante, proteggono i progetti di sviluppo.
In che modo? Facciamo un esempio. In un contesto tradizionale, per avviare un nuovo progetto si dovrebbero spendere diverse ore per configurare manualmente l’ambiente di sviluppo.
Immaginate di avere a disposizione un’interfaccia grafica (o un’interfaccia a riga di comando – CLI) per orchestrare processi di sviluppo software complessi. Se si utilizza un’IDP, con questa funzionalità è sufficiente eseguire un comando dall’interfaccia o dalla CLI specificando le proprie preferenze: l’IDP gestirà automaticamente tutte le configurazioni per avviare l’ambiente.
Inoltre, un approccio trasformativo come il platform engineering può automatizzare le attività ripetitive, accelerando e riducendo lo sforzo mentale di chi sviluppa ed eliminando gli errori umani.
Ridefinire il flusso di sviluppo
L’avvento della tecnologia negli ultimi decenni ha facilitato e accelerato il processo di sviluppo del software. Di rilievo è la rivoluzionaria funzione DevOps, che ha dato vita al platform engineering promuovendo la collaborazione, l’automazione, la CI e la CD. In modo impressionante, DevOps-
- Colma il divario tra sviluppo e operations facendo sì che l’automazione svolga un ruolo centrale nello snellimento di attività come i test e la distribuzione attraverso pipeline CI/CD, portando a rilasci di software più rapidi e affidabili.
- Riduce il carico cognitivo automatizzando l’integrazione e la distribuzione del codice, in modo che chi sviluppa possa concentrarsi sulla risoluzione dei problemi e sull’innovazione.
L’Impatto del Platform Engineering sulla produttività
Secondo il report di Puppet, il Il 37% degli intervistati di organizzazioni con solide pratiche di platform engineering è “molto soddisfatto” dell’efficacia del proprio processo di consegna dei prodotti, un’affermazione incoraggiante che parla di un’esperienza migliorata per gli sviluppatori che indubbiamente aumenta la produttività.
In particolare, il platform engineering svolge due importanti funzioni:
- Semplifica l’avvio di progetti di sviluppo attraverso un insieme coerente di strumenti e framework.
- Offre a chi sviluppa, attraverso le internal developer platform, tutto ciò di cui ha bisogno per testare e distribuire il codice, riducendo al minimo i ritardi nell’intero ciclo di vita dello sviluppo. I flussi di lavoro automatizzati per la creazione, il test e la distribuzione delle applicazioni abbondano in queste IDP.
Vale la pena fare un esempio pratico di come funziona. Immaginate che i vostri team di sviluppo lavorino sullo stesso progetto in rami diversi. Quando un membro committa le modifiche e invia il codice, l’IDP esegue tutte le pipeline, verifica la compatibilità, converte il codice in un artefatto e lo esegue su tutti i server e gli ambienti selezionati. In un contesto tradizionale, chi ha eseguito il commit avrebbe dovuto seguire e supervisionare l’intero processo, avviando manualmente ogni fase. Nel platform engineering, invece, tutte queste attività ripetitive vengono svolte dall’automazione fornita dall’IDP senza che chi sviluppa debba intervenire ulteriormente.
Sfruttare i vantaggi del Platform Engineering
Imponendo ai team di sviluppo la responsabilità di scrivere, distribuire e mantenere il codice negli ambienti di produzione, il principio DevOps del “tu lo costruisci, tu lo fai funzionare” inavvertitamente aumenta il carico cognitivo dei professionisti tecnici. Il platform engineering supera questo problema offrendo questi vantaggi:
- Complessità ridotta: il platform engineering trova e suggerisce il giusto livello di astrazione, consentendo a chi sviluppa di bypassare le complesse impostazioni e configurazioni dell’infrastruttura.
- Forte collaborazione e condivisione della conoscenza: il platform engineering promuove una collaborazione coesa tra i team attraverso lo stesso insieme di strumenti, pratiche e metodologie, grazie alle quali i team possono imparare facilmente l’uno dall’altro, senza che vi sia alcun divario tra le fasi di sviluppo.
- Coerenza e affidabilità: Grazie a strumenti, processi e infrastrutture standardizzati, il platform engineering garantisce coerenza e affidabilità nella pipeline di sviluppo, riducendo al minimo gli errori di configurazione causati da test, distribuzione e manutenzione.
- Time-to-market accelerato: la capacità di automazione dei processi di sviluppo, i componenti riutilizzabili e la promozione di partnership interfunzionali del Platform Engineering accelerano la consegna dei prodotti.
- Evoluzione naturale del DevOps: Basandosi sui concetti fondamentali di DevOps per migliorare il processo di sviluppo del software, il platform engineering stabilisce una configurazione self-service end-to-end per il processo. L’edizione 2023 dello State of DevOps Report di Puppet sostiene che il 93% dei partecipanti a un sondaggio correlato ritiene che l’adozione del platform engineering sia un passo nella giusta direzione per il proprio team.
Creare Viable Platforms: aprire la strada ai team di sviluppo
Il termine golden path a una tecnica di sviluppo del software guidata e ben supportata, che funziona in modo armonioso con piattaforme valide su cui sono standardizzati ambienti cloud per la semplificazione dei processi. Team interni dedicati curano e mantengono lo stack tecnologico, l’infrastruttura e lo spazio cloud sottostanti a tali piattaforme, in modo che queste ultime agiscano da acceleratori, eliminando la necessità di reinventare la ruota ad ogni singolo progetto.
Superare il sovraccarico cognitivo
Il rapporto di Itrevolution 2022 DevOps Enterprise Forum Guidance riporta che il 76% delle organizzazioni intervistate concorda sul fatto che il carico cognitivo necessario per imparare l’architettura del software è così pesante da essere fonte di angoscia e di scarsa produttività per gli sviluppatori.
Per superare il sovraccarico cognitivo, è possibile seguire queste tecniche e strategie:
- Semplificare: è necessario assicurarsi che il codice sia facile da capire, da mantenere e da sottoporre a debug seguendo le buone pratiche di codifica, ossia privilegiando la chiarezza rispetto all’ingegno, creando nomi descrittivi, commentando e documentando il codice. Evitare i cicli e le condizioni annidate, le complessità non necessarie, l’eccessiva ingegnerizzazione e la logica contorta.
- Astrarre e modularizzare: è necessario astrarre il codice rendendolo più facile da lavorare. Inoltre, serve modularizzarlo suddividendolo in piccoli moduli indipendenti che possono essere riutilizzati e riassemblati per formare applicazioni diverse. In questo modo, è possibile generare soluzioni di facile comprensione, manutenzione e scalabilità.
- Imparare dagli altri: per eccellere nella programmazione è necessario un apprendimento continuo. È importante partecipare a progetti e comunità open-source, studiare le soluzioni ai problemi proposte da figure esperte e semplificare i processi e le procedure. Inoltre, è consigliabile imparare gli stili di codifica e le best practice partecipando alle revisioni del codice, collaborando con i colleghi ai progetti e cercando feedback.
- Prendersi delle pause: periodi prolungati di coding intenso senza riposo possono causare un sovraccarico cognitivo. Programmando e facendo delle pause, si rilassa il corpo, si recupera la concentrazione e la motivazione e si può quindi affrontare il sovraccarico. Un buono spunto può essere l’adozione della Tecnica del Pomodoro, in base alla quale si lavora per un tempo prestabilito e poi si fa una breve pausa per mantenere la concentrazione e prevenire l’esaurimento.
- Adottare Mia-Platform: sfruttare le capacità di Mia-Platform e dei suoi framework. La conoscenza dei relativi strumenti e delle loro funzionalità riduce significativamente la quantità di codice personalizzato necessario.
In conclusione
Con il progredire della tecnologia, chi sviluppa sostiene un carico cognitivo sempre più pesante durante la creazione, il test e il deployment delle applicazioni, perdendo in produttività e generando codice di qualità inferiore, per non parlare dell’aumento dello stress e del burnout.
Il platform engineering offre piattaforme self-service che comprendono un ecosistema standardizzato di strumenti, framework e flussi di lavoro che astraggono gran parte della complessità sottostante e semplificano lo sviluppo e il rilascio del software. I team di sviluppo possono così concentrarsi sulla creazione di soluzioni innovative, invece di occuparsi delle attività spesso banali di gestione della distribuzione e dell’infrastruttura.
Contemporaneamente, il ciclo di sviluppo diventa più agile, perché chi sviluppa può iterare, testare e rilasciare rapidamente il software, offrendo nuove funzionalità e miglioramenti molto più velocemente. Inoltre, l’ambiente di lavoro più sano e sostenibile che ne deriva non solo previene il burnout, ma favorisce anche le prestazioni dei membri dei team di sviluppo, che devono tenere il passo con le esigenze di un panorama tecnologico in continua evoluzione.
Leggi questo whitepaper per scoprire perché e come evolvere in una Platform Company.

