La situazione
Da alcuni mesi lavoro con un nuovo team in una nuova azienda. L'azienda offre alcuni servizi web e il ruolo del team è sviluppare e mantenere tali servizi.
Problema n. 1: il team non è un team, è un insieme di individui. Non collaborano tra loro. Ognuno lavora sul proprio pezzo di codice nel modo che preferisce, con le proprie convenzioni e metodologie. La cosa più vicina alla collaborazione che ho visto finora è: "Ho finito di implementare questa funzione, ora puoi iniziare a creare qualcosa su di essa".
Problema n. 2: Non c'è modularità. Bene, in realtà, il lavoro di ogni sviluppatore è nel proprio repository, ma quei repository sono molto eterogenei e mescolano cose diverse (spesso reinventando la ruota e duplicando il codice).
Problema n. 3: Le pratiche di sviluppo sono davvero antiche. Conoscono la parola "agile", ma non ne capiscono il concetto (probabilmente perché non l'hanno mai provata). Non ci sono revisioni del codice, non ci sono test, il software è davvero difficile da configurare e adattare. Il processo di sviluppo complessivo è lento e inefficiente.
Ci sono molti altri difetti ma sono probabilmente le conseguenze dei tre problemi sopra elencati. In breve, la base di codice è un casino
Come affrontarla?
Lavorando qui, ho notato rapidamente questi problemi e all'inizio ho deciso di guidare per ispirazione: io ho lavorato al mio primo progetto con alcune pratiche di sviluppo agile e il feedback è stato buono.
Tuttavia ora sono in una situazione in cui mi piacerebbe toccare il codice / le pratiche di altre persone e posso " t guidare dall'ispirazione, perché ho bisogno della loro collaborazione.
Ho cercato di fargli capire che è un team che sta costruendo un prodotto e non sono individui che lavorano sui propri progetti. Tuttavia non riuscivano a capire cosa intendevo e mi ignoravano.
Ora sto pensando di cambiare il mio approccio: voglio affermare esplicitamente che stanno commettendo errori, analizzando ogni errore, le loro cause e proponendo soluzioni. Voglio iniziare dal livello basso (ad esempio "questo pezzo di codice è lento / sbagliato / inefficace") e poi passare lentamente al livello alto (ad esempio iterazioni contro cascata). Ma temo che pensino che li sto attaccando, il che non è il caso.
È l'approccio giusto? Come devo procedere?
MODIFICA 1: in base alle tue risposte, chiaramente questo è l'approccio sbagliato. A partire da oggi, continuerò a dare l'esempio e evidenziare esplicitamente i vantaggi portati dai miei metodi. (Fino ad ora, ho costantemente chiesto feedback, ma in realtà non ho mai posto domande esplicite come "ehi, ti piace il fatto che abbia scritto test di accettazione? Pensi che miglioreranno la qualità generale del progetto?") guarda se funziona!
EDIT 2: come ho detto, ho iniziato a dare l'esempio e a parlare con i compagni di squadra e con i manager. Il risultato? Sono stato nominato "revisore principale", ovvero il mio ruolo ora è quello di partecipare attivamente a tutte le discussioni tecniche, dare suggerimenti sull'architettura e stabilire nuovi approcci al processo di sviluppo.