Close

Velocity negativa: come innalzare il limite di complessità


Uno degli obiettivi più comuni di un'organizzazione di progettazione è fornire velocemente software di qualità elevata.

Scopri la vision aziendale del CIO o del CTO e senti cos'hanno da dire. Probabilmente stanno "inseguendo" una permutazione di questo obiettivo. Sebbene sia un obiettivo comune, c'è un ampio divario tra i team che raggiungono il nirvana e quelli bloccati nel limbo della distribuzione del software. Alcuni team inseriscono costantemente nuovo codice nella produzione, con pochi imprevisti o impatti negativi sui clienti, mentre altri trovano difficoltà nei rilasci trimestrali.

Qual è la causa di questa discrepanza nelle prestazioni?


La complessità nella distribuzione è la differenza tra chi riesce e chi non riesce a fornire velocemente software di qualità elevata, tra chi canta vittoria dopo un rilascio di successo ogni settimana e un team di distribuzione software demotivato e frustrato che, dopo mesi di lavoro sull'ultimo rilascio, ottiene come unico risultato sei nuovi bug e un rollback.

Confronta la velocità e la qualità con cui le startup e le grandi organizzazioni affermate rilasciano nuovi prodotti e funzionalità. Nel settore finanziario, ad esempio, le startup fintech nell'ultimo decennio hanno ridotto la quota di mercato delle banche principali. Le grandi banche citano spesso i facili vantaggi delle startup fintech, che operano con meno supervisione normativa e senza dover mantenere sistemi di applicazioni monolitici preesistenti. Le dimensioni ridotte del team consentono una maggiore agilità e la capacità di adattarsi in base alle esigenze dei clienti. Essenzialmente le fintech, non essendo complesse come le banche consolidate, sono in grado di muoversi più velocemente e con meno rischi. La complessità non è sempre un aspetto negativo, anche se può rallentare i team software.

The benefits of SOA

SOA's modularity and standardized protocols enable services to communicate effectively, promoting reusability, interoperability, and scalability. These key benefits translate into tangible advantages for companies:

  • Reusability: Reusing existing services reduces development time and costs and promotes consistency and quality. Companies can accelerate development cycles and improve overall efficiency.
  • Interoperability: Services can communicate and exchange data regardless of their underlying technology or programming language. This facilitates enterprise-wide data integration and collaboration. Interoperability streamlines business processes and helps companies adapt to evolving technologies.
  • Scalability: SOA's modular design enables independent scaling of services to meet fluctuating demands. It ensures applications can handle spikes in traffic or expanding user bases without compromising performance or stability. Companies can adapt their infrastructure to changing needs without costly rewrites or redesigns.

Rete globale
materiale correlato

Tieni sotto controllo la proliferazione di software

icona di tre anelli
Scopri la soluzione

Gestisci i componenti con Compass

Complessità nella distribuzione del software


La complessità può essere positiva: è estremamente gratificante risolvere problemi intricati, motiva i team ad affrontare le sfide e i problemi e a ribaltare un settore. Ma c'è un punto in cui la complessità non consiste più nella risoluzione di un problema difficile e provoca un impatto negativo sui team software.

La complessità organizzativa riveste un ruolo chiave nel ridurre l'efficacia dei team software. La complessità, per definizione, è lo stato di avere molte parti diverse collegate o correlate tra loro in modo complicato. In termini pratici, la complessità organizzativa è l'aggregato di informazioni, dipendenze, modifiche, altri team, strumenti e richieste, che i team software devono esplorare quando si interfacciano con il resto dell'organizzazione.

Livelli più elevati di complessità organizzativa rendono più difficile fornire software di alta qualità in tempi rapidi, perché i team dedicano più tempo a orientarsi nell'organizzazione che a risolvere problemi intricati. Le organizzazioni in crescita scoprono presto che i team software hanno un limite di complessità: la quantità di complessità che i team sono in grado di gestire prima che ciò influisca sulla soddisfazione lavorativa, sulla qualità e sulla velocità del software prodotto. Sembrerebbe, quindi, che la riduzione della complessità organizzativa consenta ai team di concentrarsi sulla risoluzione di problemi intricati e sulla fornitura di software di qualità superiore e in meno tempo. Vediamo perché non è necessariamente così.

Benefits of microservices

Visti i vantaggi, molte organizzazioni hanno iniziato ad adottare un'architettura di microservizi, che di conseguenza ha aumentato la complessità organizzativa. Più team autonomi richiedevano maggiore collaborazione, più microservizi implicavano maggiori dipendenze. Il ritmo del cambiamento è salito alle stelle: tutti segni della proliferazione di software. Per i team software l'aumento della complessità ha comportato una riduzione dell'efficacia, come indicato da un calo della velocity delle modifiche, rendendo il carico cognitivo un ostacolo.

Come capire se ti stai avvicinando al limite di complessità


Raggiungere il limite di complessità può sembrare inevitabile, ma alcuni segnali indicano ai team che si stanno avvicinando al limite. Non esiste una metrica assoluta che indichi quanto sia vicino il limite di complessità, ma è possibile capirlo grazie a questi indicatori.

L'indicatore più evidente che un team ha raggiunto il limite di complessità è quando dedica più tempo a gestire la complessità organizzativa che a risolvere i problemi intricati su cui dovrebbe concentrarsi. L'andamento dei lead time di DORA per le modifiche (velocità) e le metriche del tasso di errore delle modifiche (qualità) mostrano se i team rallentano o accelerano nel tempo. Anche se altri fattori influenzano queste metriche, sono un buon indicatore dell'efficacia del team.

La soddisfazione degli sviluppatori è un ulteriore indicatore della complessità organizzativa che i team software stanno gestendo. Gli sviluppatori, più di altri, preferiscono passare il tempo a risolvere problemi intricati piuttosto che affrontare attività inutili che intralciano il lavoro. La scarsa soddisfazione degli sviluppatori è un segnale che la complessità organizzativa rappresenta un problema per il team software.

Feature

SOA

Microservices

Architectural style

  • Coarse-grained, centralized

Service granularity

  • Larger, more comprehensive services

  • Smaller, focused services

Independence

  • Services are interdependent
  • May share a database for data storage

  • Services are highly independent
  • Decoupled and autonomous

Communication

  • Synchronous, often message-oriented
  • Uses shared data

  • Asynchronous, often RESTful
  • Avoids data sharing

Data storage

  • Centralized data management
  • Services share database

  • Distributed (decentralized) data management
  • Each service is responsible for its own data management

Scalability

  • Horizontal scaling
  • Scaling specific services can be intricate due to shared resources and centralized communication

  • Horizontal and vertical scaling
  • More granular and focused scaling as services operate independently

Deployment

  • Typically involves deploying the entire application as a single unit

Coupling

  • Services exhibit a degree of coupling due to shared resources and centralized communication

  • Loose coupling with minimal dependencies between services

Come capire se ti stai avvicinando al limite di complessità


Raggiungere il limite di complessità può sembrare inevitabile, ma alcuni segnali indicano ai team che si stanno avvicinando al limite. Non esiste una metrica assoluta che indichi quanto sia vicino il limite di complessità, ma è possibile capirlo grazie a questi indicatori.

L'indicatore più evidente che un team ha raggiunto il limite di complessità è quando dedica più tempo a gestire la complessità organizzativa che a risolvere i problemi intricati su cui dovrebbe concentrarsi. L'andamento dei lead time di DORA per le modifiche (velocità) e le metriche del tasso di errore delle modifiche (qualità) mostrano se i team rallentano o accelerano nel tempo. Anche se altri fattori influenzano queste metriche, sono un buon indicatore dell'efficacia del team.

La soddisfazione degli sviluppatori è un ulteriore indicatore della complessità organizzativa che i team software stanno gestendo. Gli sviluppatori, più di altri, preferiscono passare il tempo a risolvere problemi intricati piuttosto che affrontare attività inutili che intralciano il lavoro. La scarsa soddisfazione degli sviluppatori è un segnale che la complessità organizzativa rappresenta un problema per il team software.

La semplificazione è una strategia perdente


Quando le aziende si rendono conto che i team sono sopraffatti dalla complessità, spesso avviano un "progetto di semplificazione" per ripristinare la semplicità nell'organizzazione. La semplificazione è una strategia perdente perché la complessità aumenta più velocemente di quanto qualsiasi organizzazione possa semplificare il proprio ambiente e questi "progetti di semplificazione" operano proprio nell'ambiente complesso che mirano a semplificare.

La semplificazione generalmente inizia riducendo il numero di applicazioni, disattivando o consolidando ove possibile. La disattivazione di un'applicazione richiede che il team comprenda tutte le dipendenze a monte e a valle, chi utilizza l'applicazione, come sostituire la funzionalità, dove e come verranno archiviati o migrati i dati e che affronti una serie di altre complicazioni derivanti da questo tipo di attività. Sfortunatamente, i notevoli sforzi richiesti per ottenere questo risultato non sono ricompensati da una riduzione altrettanto significativa della complessità. C'è un limite alla quantità di applicazioni che un'azienda può disattivare senza influire sulle attività principali o sull'esperienza utente, ma non c'è limite al numero di nuovi componenti software che gli ingegneri possono creare. È probabile che nei 12 mesi necessari per disattivare un'applicazione siano stati creati centinaia di nuovi microservizi. Poiché un ambiente tecnologico sano cresce nel tempo, non è consigliabile limitarlo a un numero fisso di applicazioni o componenti software per ridurre la complessità.

I progetti di semplificazione includono in genere la rielaborazione della struttura organizzativa per eliminare la complessità nel flusso di comunicazione. Le strutture organizzative meno complesse prevedono team gerarchici di grandi dimensioni con tutto il personale co-ubicato. Le strutture organizzative più complesse coinvolgono team piccoli, distribuiti e autonomi. La legge di Conway mostra quanto sia probabile che i grandi team gerarchici producano applicazioni monolitiche, mentre i piccoli team distribuiti producano applicazioni utilizzando architetture modulari come i microservizi. La produzione di software di alta qualità in tempi rapidi è resa possibile da modelli di architettura modulare come quella di microservizi; una struttura organizzativa più complessa ha quindi maggiori probabilità di successo. Se da un lato "semplificare" la struttura organizzativa ne renda più facile la comprensione, dall'altro è controproducente per l'obiettivo finale del progetto di semplificazione.

La semplificazione è importante e vantaggiosa, ma sarebbe più utile integrarla come miglioramento continuo, per i team software e di team, piuttosto che come attività una tantum; nonostante possa ritardare il raggiungimento del limite di complessità, non riporterà un'organizzazione alla libertà e alla dinamicità proprie degli ambienti delle startup.

Innalzamento del limite di complessità


What are the challenges of adopting SOA and microservices?

Le organizzazioni devono aumentare il limite di complessità per ripristinare l'efficacia dei team software. Ciò significa essenzialmente aumentare la complessità organizzativa che ogni team può affrontare prima che influisca sulla soddisfazione lavorativa e sulla qualità e velocità con cui il team rilascia il software.

La progettazione della piattaforma è un concetto significativo nella ricerca di innalzare il limite di complessità di un'organizzazione. I team più efficienti di progettazione delle piattaforme si concentrano sulla riduzione del carico cognitivo dei team software astraendo la complessità organizzativa dal loro lavoro quotidiano. Se implementata correttamente, la progettazione della piattaforma consente ai team di riequilibrare la maggior parte degli sforzi per risolvere problemi intricati, dedicando meno tempo alla gestione della complessità organizzativa.

Can SOA and microservices coexist?

Per questo motivo Atlassian ha creato Compass, una piattaforma per l'esperienza di sviluppo. Compass aiuta a innalzare il limite di complessità consentendo ai team software di orientarsi facilmente nella complessità organizzativa attraverso il catalogo componenti, le metriche e le scorecard e di concentrarsi sulla creazione di una sana cultura di progettazione. L'aspetto principale è che la complessità organizzativa non si è ridotta all'interno di Atlassian, ma ha continuato a crescere man mano che l'organizzazione passava a un'architettura di microservizi in misura sempre maggiore. Il tempo che i team software impiegano per gestire la complessità è stato ridotto, il che costituisce la differenza tra un progetto di semplificazione e l'innalzamento del limite di complessità.

Anche se Atlassian conta oltre 10.000 dipendenti e più di 17.000 componenti software, gran parte dei nostri team software opera con la stessa libertà di una startup, fornendo velocemente software di qualità elevata. La chiave per il successo? Aumentare il limite di complessità per migliorare l'efficacia del team software.

Ecco due azioni per iniziare a innalzare il limite di complessità:

  • Monitorare e valutare le metriche DORA. Come ti sembrano le metriche DORA per il tuo team? Se ancora non le stai monitorando, sono fornite pronte all'uso con Compass.
  • Comprendere e valutare la soddisfazione degli sviluppatori. Come si trovano gli sviluppatori nei tuoi team software? La maggior parte delle organizzazioni effettua sondaggi sulla soddisfazione dei dipendenti. Per comprendere il livello di soddisfazione degli sviluppatori, esamina i risultati suddivisi per area funzionale. Le domande chiave includono la valutazione delle seguenti dichiarazioni:
    • Il risultato finale è quello che mi aspettavo
    • Riesco a gestire lo stress sul lavoro
    • Sono consapevole che il mio lavoro contribuisce al raggiungimento degli obiettivi aziendali

In alternativa, Compass acquisisce queste informazioni durante il rituale CheckOps, in cui i team condividono le loro impressioni sull'ultima settimana e i dettagli sugli aspetti da migliorare.

L'innalzamento del limite di complessità richiede una combinazione di strumenti, processi e rituali. Una piattaforma per l'esperienza di sviluppo come Compass può aiutare a comprendere lo stato d'integrità del sistema, mappare le dipendenze e creare rituali continui, contribuendo a innalzare il limite di complessità e a sbloccare il potenziale dei team di distribuzione del software nella tua organizzazione.

Prova Compass gratuitamente oggi stesso.

How does each architecture impact deployment and DevOps practices?

Both SOA and microservices deployments benefit from Open DevOps practices. However, the specifics will differ depending on the architecture. 

SOA typically involves monolithic deployments, where teams deploy an entire application as a single unit. This approach requires careful coordination between teams. It can be time-consuming and complex, especially for large applications.

DevOps emphasizes collaboration and automation between development and operations teams to address these challenges. This enables more frequent and reliable deployments. By automating testing, configuration management, and infrastructure provisioning, DevOps can help streamline SOA deployments and minimize errors.

Microservices architecture enables more granular deployments. Teams deploy each microservice independently. 

DevOps principles are also essential for microservices deployments. DevOps practices such as continuous integration and continuous delivery allow teams to automate the process of testing, deploying, and building microservices. This facilitates rapid and frequent releases.


Condividi l'articolo
Argomento successivo

Letture consigliate

Aggiungi ai preferiti queste risorse per ricevere informazioni sui tipi di team DevOps e aggiornamenti continui su DevOps in Atlassian.

Illustrazione su Devops

Community di Compass

illustrazione del superamento di ostacoli

Tutorial: Creare un componente

Illustrazione di una mappa

Inizia a utilizzare Compass gratuitamente

Iscriviti alla nostra newsletter DevOps

Thank you for signing up