Skip to main content

I professionisti del software sono notoriamente abili nell’inventare nomi accattivanti per concetti di buon senso. “Platform engineering” è un esempio recente, che unisce principi consolidati all’innovazione dei framework cloud-native.

Alla sua essenza, la platform engineering consiste nell’unificare lo sviluppo software adottando un set di strumenti gestito e coerente, predisponendo così il terreno per una maggiore produttività dei team. Settori più maturi lo sanno già da decenni.

Cos’è la Platform Engineering?

La platform engineering è la pratica di progettare, costruire e gestire l’infrastruttura software fondamentale e i sistemi su cui si basano applicazioni e servizi. Include la gestione di infrastrutture fisiche e cloud, l’automazione dei processi, l’integrazione di diversi strumenti, la garanzia della sicurezza e della conformità, il monitoraggio delle performance e il mantenimento di alta disponibilità e disaster recovery.

Want more from The CTO Club?

Create a free account to finish this piece and join a community of CTOs and engineering leaders sharing real-world frameworks, tools, and insights for designing, deploying, and scaling AI-driven technology.

This field is for validation purposes and should be left unchanged.
Name*

Questo campo è fondamentale per garantire ambienti tecnici solidi, scalabili e sicuri che consentono uno sviluppo e una distribuzione efficienti delle applicazioni.

La platform engineering rappresenta l’evoluzione da iniziative isolate a un ecosistema armonizzato, migliorando l’esperienza degli sviluppatori e l’efficienza operativa.

Upgrade your inbox with more tech leadership wisdom for delivering better software and systems.

Upgrade your inbox with more tech leadership wisdom for delivering better software and systems.

This field is for validation purposes and should be left unchanged.
Name*

Il passaggio dall’eccellenza individuale alla competenza collettiva

Un singolo sviluppatore, o "artigiano del software", può inizialmente brillare rispetto a un collettivo grazie al proprio kit di strumenti personalizzato. Tuttavia, le esigenze di un’impresa di software in crescita presto danno priorità all’arte del lavoro di squadra: comunicazione, collaborazione e condivisione strategica di strumenti e processi.

La platform engineering è una risposta sofisticata a questi dilemmi di scala. Consiste nel curare e gestire una suite di applicazioni e strumenti che fungano da base comune, consentendo agli sviluppatori di innovare integrando e costruendo su moduli preesistenti.

Il ruolo di un team di platform engineering è quello di creare una Internal Developer Platform (IDP) che superi le limitazioni dello sviluppo applicativo tradizionale incorporando framework come Kubernetes, favorendo un ambiente self-service che potenzi gli sviluppatori. 

Il principio dell’artigianato si applica anche al testing: un tester esplorativo competente, capace di automazione, è probabilmente il QA più efficace che si possa trovare. Tuttavia, la sfida è la scalabilità. L’automazione dei test spesso esiste in silos, con singoli individui che creano soluzioni personali usando strumenti come Selenium in modi differenti. L’uscita o la promozione di queste persone porta spesso a una revisione completa dei sistemi esistenti da parte di chi subentra, il quale può avere un approccio diverso nell’uso degli strumenti. 

Piattaforme di Testing Condivise: Favorire la Collaborazione

Una piattaforma di testing condivisa, invece, permetterebbe una collaborazione produttiva tra tester professionisti, utenti business e sviluppatori. Una piattaforma come Copado's Robot Testing faciliterebbe non solo la condivisione e il riutilizzo di test, dati e risultati, ma promuoverebbe anche la trasparenza nella valutazione della qualità. Con infrastructure-as-code (un altro nome di tendenza per una prassi logica), gli ambienti di test possono essere distribuiti efficientemente nel cloud, offrendo accesso on-demand e trasparenza a tutti gli stakeholder.

Nell’era delle microservizi, la funzionalità dei singoli componenti, orchestrati da piattaforme come Docker e Kubernetes, deve essere esaminata per il carico cognitivo e l’impatto sull’utente. Qui entrano in gioco i principi della Site Reliability Engineering (SRE), che garantiscono la solidità dei sistemi e forniscono ai team operativi strumenti di allerta robusti come Puppet e soluzioni di monitoraggio per mantenere l’osservabilità.

Le Sfide della Platform Engineering

Nonostante i suoi evidenti benefici, la platform engineering non è priva di sfide. Richiede una gestione scrupolosa e un’evoluzione continua. Molte aziende di prodotto valide faticano a sviluppare una piattaforma comune per i loro prodotti, perciò non è realistico aspettarsi che i reparti IT possiedano intrinsecamente queste capacità. Per questo, piattaforme applicative ampie e di alto livello come Salesforce, e piattaforme per sviluppatori come Git o Azure DevOps, stanno guadagnando terreno. Lo stesso avviene per le piattaforme di testing, ma più lentamente.

Poiché le applicazioni vengono costruite assemblando componenti da una piattaforma condivisa, la qualità e la solidità di questa piattaforma diventano fondamentali. Qualsiasi problema della piattaforma può potenzialmente impattare tutte le applicazioni che vi si basano. Di conseguenza, piattaforma e applicazioni devono evolvere in parallelo, mantenendo però la piattaforma sempre un passo avanti per garantirne la stabilità.

Il testing della piattaforma deve essere separato da quello delle applicazioni, sia che tu stia testando in produzione o meno. Il primo tende a essere più tecnico, concentrato su unit testing, API, scalabilità e prestazioni, mentre il secondo è per natura più orientato al processo aziendale e ai test end-to-end.

Mantenere la Qualità durante il Ciclo di Vita della Piattaforma

Man mano che le organizzazioni adottano approcci cloud-native, la robustezza della loro piattaforma diventa fondamentale. Qualsiasi problema all'interno della piattaforma potrebbe avere conseguenze di vasta portata, motivo per cui è essenziale una chiara distinzione tra test della piattaforma e test dell'applicazione. Questa separazione consente un approccio mirato alla scalabilità e alle prestazioni, con il primo che si concentra sugli aspetti tecnici come le API e il secondo sulla funzionalità per l'utente finale.

Software e strumenti per la Platform Engineering spiegati


Nella platform engineering, diversi strumenti software gestiscono e ottimizzano i processi coinvolti nella creazione, nel deployment e nella manutenzione di infrastrutture e applicazioni.

Pensa a uno strumento come Postman. Inizialmente sviluppato come progetto collaterale per semplificare il flusso di lavoro dell'API nello sviluppo e nei test, Postman è uno strumento eccellente per i tester individuali. Tuttavia, quando viene integrato in un flusso di lavoro di Integrazione Continua/Distribuzione Continua (CI/CD), le sue capacità vengono amplificate, servendo a uno scopo più ampio all'interno di una piattaforma cloud. Questo permette di effettuare test rapidi sulle API, fornendo feedback immediato all'utente.

Quando il team cresce, le limitazioni di Postman diventano evidenti. Sebbene sia ottimo per test manuali ed esplorativi, mostra dei limiti in ambienti collaborativi dove sono necessari test automatizzati, ripetibili e scalabili. All'aumentare delle operazioni software, elementi come comunicazione, condivisione e riutilizzo diventano fondamentali, spesso superando le prestazioni del singolo individuo.

Altri strumenti fondamentali per la platform engineering includono:

  • Strumenti di containerizzazione
    • Docker: Per creare, distribuire ed eseguire applicazioni in contenitori.
    • Kubernetes: Una piattaforma di orchestrazione dei container per automatizzare il deployment, la scalabilità e le operazioni dei container delle applicazioni su cluster di host.
  • Strumenti Infrastructure as Code (IaC):
    • Terraform: Utilizzato per costruire, modificare e versionare le infrastrutture in modo sicuro ed efficiente.
    • Ansible: Uno strumento open source per il provisioning del software, la gestione della configurazione e il deployment delle applicazioni.
    • Puppet: Un altro popolare strumento per la gestione della configurazione.
  • Strumenti di integrazione continua/implementazione continua (CI/CD):
    • Jenkins: Un server di automazione open source utilizzato per automatizzare parti dello sviluppo software.
    • GitLab CI/CD: Fornisce un modo semplificato per automatizzare le fasi del ciclo di vita dello sviluppo applicativo.
    • CircleCI: Offre integrazione e distribuzione continua per aiutare i team di sviluppo a rilasciare codice rapidamente.
  • Strumenti di monitoraggio e osservabilità:
    • Prometheus: Un sistema di monitoraggio open source con un database a serie temporali.
    • Grafana: Per visualizzare e monitorare le metriche.
    • Elasticsearch, Logstash e Kibana (ELK Stack): Popolari per il logging e la visualizzazione dei dati.
  • Cloud Service Provider:
    • Amazon Web Services (AWS): Offre una gamma ampia di servizi cloud.
    • Microsoft Azure: Offre servizi di cloud computing.
    • Google Cloud Platform (GCP): Fornisce una suite di servizi di cloud computing.
  • Sistemi di controllo versione:
    • Git: Un sistema di controllo versione distribuito per tracciare le modifiche del codice sorgente.
    • GitHub: Una piattaforma per ospitare e gestire repository Git.
  • Strumenti di sicurezza e conformità:
    • HashiCorp Vault: Per proteggere, conservare e controllare l'accesso a token, password, certificati, chiavi API e altri segreti.
    • SonarQube: Valuta la qualità del codice e identifica le vulnerabilità.
  • Strumenti Service Mesh:
    • Istio: Una piattaforma open source per connettere, gestire e proteggere i microservizi.
    • Linkerd: Fornisce osservabilità, affidabilità e sicurezza ai microservizi.
  • Framework serverless:
    • AWS Lambda: Consente di eseguire codice senza effettuare il provisioning o la gestione di server.
    • Serverless Framework: Semplifica la creazione di applicazioni con architettura serverless.
  • Gestione dei Database:
    • MongoDB: Un database NoSQL molto diffuso.
    • PostgreSQL: Un avanzato database relazionale open source.

La promessa dell'Engineering delle Piattaforme

Sebbene l'Engineering delle Piattaforme prometta una maggiore produttività degli sviluppatori, realizzare questo potenziale è più facile a dirsi che a farsi. La piattaforma deve essere gestita meticolosamente, testata per la stabilità, e non dovrebbe mai diventare un collo di bottiglia. Questo ambizioso obiettivo richiede uno sforzo coordinato tra i team DevOps, dall'ingegnere DevOps al team di prodotto. Una implementazione di successo dipende da un'orchestrazione senza soluzione di continuità, dall'efficienza delle pipeline e da un impegno verso integrazione continua e distribuzione continua. Pratiche di testing efficaci e un toolkit orientato all'automazione sono prerequisiti per l'Engineering delle Piattaforme di successo.

Vuoi maggiori informazioni su AI e Software Testing? Iscriviti alla newsletter QA Lead per scoprire tutte le ultime tendenze.