La cultura, questa sconosciuta! (prima parte)

La cultura è importante, ce lo ripetono fin da piccoli. Studiate e diventerete qualcuno. Specializzatevi e farete successo. Quante volte ce lo siamo sentiti dire? E bene o male abbiamo sempre adottato questo approccio alla nostra vita lavorativa: tramite un corso formale di studi, universitario e successivo, oppure tramite corsi professionali e infine tramite auto-apprendimento.

Siamo degli esperti nel nostro settore, ne sappiamo più degli altri, più dei nostri collaboratori e dei nostri concorrenti, o almeno si spera. Non ci fermiamo mai: non è che finito il ciclo di studi abbiamo appoggiato i libri in biblioteca a prender polvere. Mai quanto vorremmo, ma cerchiamo di rimanere aggiornati: tramite corsi online o in aula, riviste di settore, blog specializzati, newsletter, webinar… le sorgenti di sapere sono tante, fin troppe se pensiamo al tempo che abbiamo.

Ma lo sappiamo: la concorrenza è in agguato e se non ci formiamo noi e rimaniamo al passo coi tempi, anzi davanti agli altri possibilmente, è un attimo rimanere indietro prima con il know-how e poi con le vendite. E di conseguenza, con la leadership o comunque la posizione di mercato. Quindi non mettiamo neanche in discussione di dover essere in continua formazione, in costante aggiornamento sulle tecnologie riguardanti il nostro specifico settore, qualunque esso sia.

E per le tecnologie che non sono sotto il nostro diretto controllo, che non fanno parte del nostro core-business, ci affidiamo ad esperti interno o esterni: un commercialista per gli aspetti fiscali, un avvocato per quelli legali, un’azienda di logistica esterna per i trasporti. E’ un approccio normale e corretto: la mia tecnologia, arte, servizio vero e proprio che vendo e che mi differenzia sul mercato lo curo personalmente come manager o imprenditore, o con un team specializzato. Tutto quello che non è strategico, lo delego a funzioni aziendali preposte o a società esterne specializzate.

Certo, un po’ ne voglio comunque capire. Per non farmi fregare. Per poter scegliere strategicamente. Per capire quello che mi viene offerto. Per contestare quando le cose non vanno. Giusto un po’, senza diventare specialista: gli esperti di tutte le competene non strategiche li assumo o li metto sotto contratto, ma intanto un po’ mi informo.

 

E il software? Scusa, che male ti ha fatto esattamente il software?

 

  • Pensi che il software si faccia da solo?
  • Che sia sufficiente “mio cuggino che ne sa di computer”?
  • Che il team di ingegneri meccanici, elettronici, hardware siano tutti comunque in grado di “sviluppare”?
  • Sei sicuro che in un’azienda di decine di persone, con team di progetto magari di 10-15 persone che curano tutti gli aspetti elettronici, meccanici, elettrici, prestazionali, estetici siano sufficienti 1-2 softwaristi “perché il software da sviluppare tanto è poco”?
  • Pensi che uno “smanettone”, come vengono chiamati i programmatori, si aggiorni da solo alle nuove tecnologie?
  • Pensi veramente che il ruolo crescente del software in termini di funzionalità non ne faccia anche crescere la criticità?
  • Ritieni inutile avere anche solo una conoscenza di base perché tanto ci sono gli esperti?

 

Se hai risposto un secco NO a tutte queste domande, forse questo blog non fa veramente per te. Ma se hai qualche dubbio… continua a leggere.

Eh no… la Cultura del software è tanto importante quanto il software stesso. Se il codice sviluppato è diventato così strategico e critico nei tuoi prodotti tanto da determinare la maggior parte delle caratteristiche e delle performance della vostra offerta, se un malfunzionamento può portare ad un richiamo di migliaia di prodotti, se persone rischiano la propria salute o la vita in caso di malfunzionamento, se il business dei tuoi clienti potrebbe rallentare o bloccarsi in caso di bug non scoperti prima, non hai  altra scelta:

la Cultura del software deve essere diffusa, profonda ed in continuo aggiornamento, per tutta la vita della tua azienda

Non basta assumere persone già esperte: il mondo informatico è in continua evoluzione, devono continuare a poter studiare, sempre, ogni anno. E non è sufficiente che siano delegate solo a loro certe strategie e decisioni delicate perché nessuno ne capisce: tutto il management deve poter capire e giustificare le scelte fatte. Non dico di saper programmare: ma almeno avere un’idea della tecnologia esistente e dei suoi vantaggi e relativi rischi.

Non starò ovviamente a parlare delle tecniche tradizionali di formazione come corsi in aula e online, workshop, webinar, ecc. perché di esempi ne é piena la Rete, ma di Cultura in senso lato:

nuove metodologie, tecniche, iniziative di apprendimento e diffusione della cultura che possano in qualche modo perseguire il fine di rendere tutti quanti più consapevoli di vantaggi e problemi legati allo sviluppo software

 

Il metodo che spiego ai miei clienti, adatto sia ad un normale ambito di sviluppo orientato alla Qualità ed al Business, che alla Certificazione, chiamato METODO DELLO SVILUPPO EFFICIENTE DEL SOFTWARE, fornisce un approccio efficente, un supporto, delle procedure collaudate e una consulenza soprattutto su queste metodologie avanzate. Ognuna di queste può garantire un’efficienza decisamente superiore, risultati molto più veloci e miglioramenti drastici dell’efficienza del ciclo di vita dello sviluppo del software e della sua eventuale certificazione o comunque entrata sul mercato.

Vediamo quali sono alcuni di questi metodi:

 

Task Force

 

Si prende un gruppo di specialisti selezionati, scelti in base alle competenze, esperienza, eterogeneità ed altri criteri e li si fà lavorare insieme a stretto contatto (nella stessa stanza se possibile o attraverso strumenti di collaborazione remota) per la risoluzione di un problema specifico, urgente, complesso. Problemi che con le tecniche tradizionali ad esempio di segmentazione del progetto in pacchetti, unità di lavoro, gruppi ecc. non sono risolvibili perché attraversano varie competenze e gruppi, o sono particolarmente gravi e profondi.

La task force di solito ha obiettivi molto ben precisi, da stabilire all’inizio e si scioglierà subito dopo aver fornito una identificazione ed eventuale soluzione al problema o comunque dopo un certo lasso di tempo, per evitare di incancrenire ulteriormente la situazione.

I risultati sono tremendamente efficienti: è stato dimostrato che una task-force anche molto piccola, da 2 a 5 persone, con una guida decisa, un focus preciso e comunicazione molto frequente tra i membri del team, ha un rendimento in termini di produttività e problem-solving anche 10 volte più elevato delle stesse persone che lavorano individualmente o in maniera tradizionale.

Le caratteristiche quindi sono:

  • team piccoli (2-5 persone)
  • guida da parte di un consulente esterno o di un focalizer interno
  • personalità e competenze eterogenee
  • focus preciso (problema specifico, consegna urgente, ottimizzazione performance, …)
  • localizzazione stretta (stessa stanza se possibile, collaborazione online stretta)
  • durata limitata nel tempo (pochi giorni, massimo qualche settimana)
  • risultato: soluzione del problema o sua identificazione e strategie per risolverlo

Tramite il METODO DELLO SVILUPPO EFFICIENTE DEL CODICE aiutiamo a formare delle Task Force aziendali molto efficienti sia contribuendo direttamente con degli esperti di settore, sia guidando le aziende a formare e condurre le attività secondo degli schemi già collaudati ed efficienti.

Technical Architecture Group

 

Il Technical Architecture Group (TAG) o altro nome simile (Focus Group), è una struttura permanente all’interno di un’azienda che si occupa di gestire le problematiche tecniche appunto di un progetto di medie o grosse dimensioni. E’ composto da un numero limitato di esperti, scelti tra i migliori elementi per competenza ed esperienza, provenienti dai vari gruppi di progetto e spesso anche da altre sedi.

I vantaggi sono enormi: vengono seguite le problematiche di progetto più generali come quelle architetturali, strutturali, di performance, ecc. a livello centrale e condiviso, lasciando poi ai singoli gruppi di lavoro la loro implementazione.

L’attività si svolge prevalentemente online tramite mail, forum, chat con incontri periodici con cadenza es. mensile. Sono invitati i membri permanenti del TAG ed eventualmente i Team Leader dei vari gruppi di volta in volta coinvolti in problemi o argomenti specifici.

Caratteristiche:

  • team medi (5-10 persone)
  • guida da parte di un consulente esterno o di una persona interna a rotazione
  • persone competenti ed esperte assegnate per regione, gruppo, competenza
  • focus su temi generali del progetto (architettura, design, problemi complessi, performance, …)
  • attività online ed incontri a cadenza circa mensile (da adattare alle esigenze es. alla partenza del progetto sarà più spesso)
  • durata per tutta la vita di progetto
  • risultato: minute degli incontri, documenti tecnici, specifiche architetturali, linee guida, standard di sviluppo, …

 

Gap Analysis

 

La Gap Analysis è un’attività che risulta fondamentale in tutta una serie di situazioni in cui è necessaria una transizione più o meno profonda e rapida di un progetto o di un’intera azienda (se piccola) per modificare, adattare e rendere più effficiente e sicuro un medoto di lavoro.

Tipici esempi che richiedono un rapido e profondo adattamento del modo di lavorare, del ciclo di vita del software, dei tool, del processo, del metodo ecc. sono le famose Certificazioni Safety-Critical (vedi articolo apposito su DO-178B/C, ISO-26262, IEC-61508, IEC-62304, CENELEC), passaggio a modelli di maturità software come il CMMI (Capability Maturity Model Integration), altri tipi di conformità, assessment e via discorrendo.

Si tratta in ogni caso di profondi cambiamenti che l’azienda deve adottare in tempi piuttosto rapidi per potersi adattare velocemente alle richieste ad esempio di un committente, di una gara d’appalto o di una certificazione necessaria per poter legalmente vendere un prodotto.

Qua il discorso è molto semplice: va fatto di tutto per non perdere tempo e risorse, realizzare questo cambiamento velocemente e con il minor impatto, identificando le procedure, i documenti, i prodotti, i tool che si possono salvare e modificare e quelli che vanno implementati da zero.

La Gap Analysis è semplicemente il modo più veloce per andare da A (situazione attuale) a B (situazione desiderata) e consente un risparmio economico e di risorse notevole.

Mancando per definizione stessa le competenze interne per svolgere il nuovo compito desiderato, si realizza quindi di solito rivolgendosi a consulenti esterni o a persone interne all’azienda ma di altri progetti/sedi. Si svolge sotto forma di indagine serrata, un assessment, su tutte le tematiche, le metodologie, i processi, i documenti, i requisiti, il codice sorgente, i tool ed in generale su tutti gli aspetti che saranno oggetto del cambiamento.

Caratteristiche:

  • personale esterno altamente competente (o da altre sedi/progetti esperti)
  • coinvolgimento di tutti i ruoli aziendali e di tutti i metodi, processi, documenti, tool, codice, in poche parole: TUTTO
  • durata limitata (3-5 giorni)
  • risultato: report iniziale sulla percentuale di compliance generale e specifica per argomento, identificazione di mosse da implementare immediatamente (Quick Win), report completo di tutte le aree analizzate e di tutto quello che è possibile conservare, quelllo che va modificato e quello che va implementato da zero (in termini di processi, documenti, tool ecc.)

All’interno del  METODO DELLO SVILUPPO EFFICIENTE DEL CODICE abbiamo le competenze e gli esperti per condurre Gap Analysis ad ogni livello, per progetti Business, Security e Safety-Critical, in accordo a tutti i principali standard di Certificazione o di Qualità.

Mezz’ora creativa

 

Questa è una tecnica molto semplice ma anche molto redditizia in termini di risultati a lungo termine che ho imitato anni fa dai primi approcci simili di Google. Le regole sono molto semplici:

  • mezz’ora alla settimana in cui chiunque (sviluppatori, designer, tester, manager) partecipa ad una riunione ad argomento tecnico totalmente libero, divisa in un quarto d’ora di esposizione, un quarto d’ora di discussione
  • si può parlare di linguaggi, algoritmi, tecniche di programmazione, sistemi operativi, metodi e processi, cicli di vita, case study, grandi fallimenti del software e bug, qualunque cosa relativa al software preso dalle news o dall’esperienza personale
  • una persona alla volta prenota questo spazio in cui espone in un quarto d’ora il suo argomento, anche senza dover evidenziare applicazioni concrete o applicabilità a brevissimo termine su progetti esistenti. Tempo massimo per preparare l’argomento: mezz’ora.
  • dopo l’esposizione, altri 15 minuti di discussione aperta in cui si parla della validità dell’argomento, sua eventuale applicabilità e prossimi passi

E’ incredibile come dare totale libertà di argomento alle persone, ma con dei vincoli temporali stretti per non ostacolare le normali attività lavorative, scateni la fantasia verso soluzioni tecniche avanzate, innovative ed impensabili adottando i normali processi aziendali. Questa libertà di iniziativa personale poi dà a chiunque la possibilità di coltivare le proprie idee e di sentirsi ascoltato. Se anche solo un’idea su 10 trova uno sbocco pratico concreto, un miglioramento, una maggior consapevolezza, il risultato sarà straordinario rispetto al pochissimo tempo impiegato.

Caratteristiche:

  • aperto a chiunque voglia partecipare ed ascoltare o contribuire
  • durata ridotta (mezz’ora per preparare l’intervento, mezz’ora per presentare e discutere)
  • focus su temi liberi senza riscontro immediato
  • risultato: aumentare la partecipazione ed il coinvolgimento di tutti anche in ruoli minori, la creatività e la circolazione di idee con un minimo investimento, senza trascurare la possibile ricaduta in termini di implementazione su progetti reali

 

Hackathon

 

Un altro modo di scatenare la fantasia, creatività e produttività delle persone in un’attività pratica con risvolti immediati è l’Hackathon. Nata nel 1999 dentro aziende come Sun ed OpenBSD, si tratta di una specie di  “competizione”, in cui uno o più gruppi si ritrovano per un periodo alcune ore o alcuni giorni, per risolvere dei problemi pratici di programmazione, algoritmi, o comunque idee costruttive in generale. Gli eventi possono essere privati ed aziendali, oppure pubblici all’interno di fiere, eventi o altro. Ovviamente, con le moderne tecnologie, è possible rendere pubblico quello che avviene all’interno del team e far partecipare persone da tutto il mondo con tecnologie di web conference.

Le persone si dividono in team che vanno da 2-3 a più persone e possono concorrere in team diversi allo stesso tema, in una vera e propria competizione alla soluzione migliore, oppure suddividendo un argomento complesso in sotto-argomenti. I ruoli tra i partecipanti allo stesso team si dividono, a seconda della specialità, esperienza ecc. e ci sarà anche qualcuno che si occuperà della presentazione finale, magari anche di grafica e logo. A seconda del tempo o della complessità, la soluzione dovrà essere solo studiata e implementata a livello di prototipo, oppure dovrà essere fornita una versione già funzionante.

Alla fine in una cerimonia aziendale privata o pubblica, una giuria assisterà alle varie presentazioni e premierà il team che ha presentato la soluzione migliore secondo i criteri prestabiliti. I premi possono essere solo virtuali, una classifica, ecc. o anche in denaro vero e proprio. Anche in questo caso, la produttività e la creatività hanno uno slancio vertiginoso permettendo di concentrare i migliori cervelli che riescono a mettere a fuoco senza interruzioni lavorative le proprie capacità su problemi concreti, spesso riuscendo a risolvere cose che avrebbero richiesto mesi/uomo.

Caratteristiche:

  • team piccoli (2-5 persone)
  • personalità e competenze eterogenee
  • diversi ruoli specifici assegnati (leader, designer, sviluppatore, presentatore)
  • focus preciso (problema specifico, ottimizzazione performance, …)
  • localizzazione stretta (stessa stanza se possibile, collaborazione online stretta)
  • durata limitata nel tempo (pochi giorni)
  • risultato: presentazione di una soluzione del problema e strategie per risolverlo

Con il METODO DELLO SVILUPPO EFFICIENTE DEL CODICE abbiamo organizzato o contribuito ad organizzare diversi Hackathon all’interno della nostra azienda o di quelle dei nostri clienti, sviluppando alcuni trucchi e consigli per renderlo ancora più rapido ed efficiente.

 

Segui questo blog e scrivimi a:
blog@softwaresicuro.it
Ti invierò articoli tecnico-pratici su come rendere più efficiente il tuo Ciclo di Vita del Software e ti manderò Casi di Studio reali di Piccole/Medie Aziende o Grandi Imprese dove viene raccontato nei particolari l’applicazione pratica di questo metodo.

Autore: Massimo Bombino

 

1 comment on “La cultura, questa sconosciuta! (prima parte)”

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

La tua azienda sta producendo pessimo software, bruciando prezioso budget in una spirale che presto ti manderà gambe all’aria. Te ne sei già accorto? E cosa stai facendo per evitarlo?
Tech Nerd theme designed by Siteturner