Oh ragazzo, è molto se intendevi davvero tutto quello che ti è successo!
ATTENZIONE : In molti dei punti seguenti potresti pensare che ti critico e che voglio renderti responsabile delle sventure e non considerare fattori esterni. Io non. È solo che non fornisci molti dettagli e fornisco solo liste di controllo delle azioni da intraprendere per garantire che le cose non vadano male. So di aver commesso molti errori da solo (tutti lo fanno) e miglioriamo solo se impariamo da loro. E per imparare da loro, dobbiamo iniziare a vederli come errori in primo luogo e accettare la responsabilità di ciò che è andato storto da parte nostra. Cavolo, accetta la responsabilità di ciò che è andato storto nelle parti di altre persone, puoi imparare anche da quello.
Il tuo progetto è fallito
Non puoi fare molto per mitigarlo ora.
Tuttavia puoi fare molto per evitare che si riproduca in futuro. Suggerirei di provare a migliorare il tuo progetto e le tue capacità di gestione del tempo.
Uno dei libri con il miglior rapporto ((consigli validi) / pagine) che ho letto sull'argomento, anche se forse non il migliore, è il Radical Project Management di Rob Thomsett .
Non specifichi davvero quale sia stato il fallimento del tuo progetto, ma presumo una combinazione di cose che ha portato uno squilibrio nel solito triangolo costo / tempo / qualiy . Il fattore più importante ai miei occhi è quello di guidare il progetto e lo sviluppo rimanendo sempre in contatto sia con i tuoi attori tecnici (sviluppatori e tester), sia con i tuoi stakeholder. Troppi progetti falliscono perché non ascoltano gli sponsor o le parti interessate e non li spingono a partecipare al processo.
Se non sono coinvolti, non puoi sapere cosa vogliono. Se non puoi sapere cosa vogliono, non puoi consegnarlo. Se non lo consegni, saranno infelici. Questo è un fallimento. Inoltre, se non coinvolgi i tuoi stakeholder, questi sono disconnessi dalla realtà dell'ingegneria del software, il che significa che non comprendono i tuoi problemi. Se sono spesso in contatto con te, ottengono una migliore comprensione di ciò che devi affrontare. Saranno più in grado di capire quando dici loro che una "piccola" funzione [risate] richiederà mesi. Possono fidarsi meglio della tua pianificazione perché ti hanno aiutato a costruirla. Un progetto non può avere successo solo con "specifiche all'inizio, sviluppo, test, consegna alla fine". Semplicemente non lo fa mai. Potresti fornire ciò che è stato richiesto nelle specifiche,
Ancora più importante, fai una retrospettiva e assicurati che sia privo di ego e non un gioco di colpa. Basta identificare i problemi.
Quello che hai passato giorni a scrivere codice è stato rifiutato dal tuo team
Sono stato in quella situazione. Ancora una volta, non puoi fare molto per mitigarlo tranne:
- Conservalo in SCM per dopo.
- Forse prova a spingere progressivamente piccoli frammenti nella base di codice principale invece di un enorme refactoring.
Ma ci sono ancora cose che puoi fare per prevenire questo tipo di situazione:
- Perchè è successo? Qual è la ragione del rifiuto?
- Il più delle volte quando vedo che ciò accade (e lo è stato anche per me), significa che lo sviluppatore è andato da solo o in modalità di codifica cow-boy e ha prodotto cose che non erano mai state richieste. Il codice che non deriva dalle esigenze aziendali potrebbe essere elegante e "migliore", ma spesso una perdita di tempo e denaro. Inoltre, avrà un costo ancora maggiore se lo integrerai in quanto dovrà essere testato di nuovo. Pensa come le persone che ti danno i soldi: devi essere efficiente anche a quel livello.
- La qualità del software prodotta è stata soddisfacente? È conforme agli standard e alle convenzioni in attività presso la tua azienda?
- Hai riferito periodicamente (e spesso!) Ai direttori diretti al riguardo? Ti sei scambiato occasionalmente con altri sviluppatori del team? In caso contrario, non ne sanno nulla, sarà un enorme costo per loro valutarlo e rivederlo ora. Alla fine NON tiene conto della stessa ora. È come cercare sempre di rimandare la pulizia del tuo appartamento in affitto e poi provare a pulirlo solo quando ti trasferisci: è un lavoro schifoso, è faticoso, è più difficile di quanto sarebbe stato se fosse stato fatto regolarmente e spesso non lo sarà giusto.
- Hai prodotto test di produzione? Test unitari? Test di integrazione?
- Il tuo codice è stato controllato regolarmente in SCM? Era in un altro ramo? Aveva bisogno di un ramo diverso o avrebbe potuto essere fatto nel bagagliaio? La disattivazione del codice di commit è di solito un brutto segno. Ovviamente a volte sei tentato di farlo, ma ti spari sul piede.
Nessuno ascolta le tue idee nella tua azienda
Bene, ci sono 2 opzioni qui e vedremo entrambe:
- Le tue idee erano cattive.
- Le tue idee erano buone.
Cominciamo supponendo che fossero cattivi (di nuovo, riflettendo su questo e accettare la tua idea era semplicemente un male potrebbe essere difficile, lo so). Cosa fai per cambiarlo?
- Perché ti è venuta l'idea? Qual è la logica ? C'è davvero bisogno di ciò che la tua idea cerca di portare in tavola?
- Come ti è venuta l'idea? L'hai fatto da solo? Hai condiviso? Brainstorm? Piano? Prototipo? (fai queste cose nel giusto ordine. Se fallisce sulla strada, quindi scarta l'idea, non andare avanti. O almeno non nel tuo programma di lavoro.)
Le idee sono solo idee. Se le suggerisci solo come idee e vengono respinte, non vedo perché ti sentiresti male per questo. Se tuttavia ti comporti senza avvisare nessuno e POI solo inviare le tue idee e vengono respinte, ovviamente sento la frustrazione per il momento sprecata. E i tuoi manager lo fanno!
Supponendo che le tue idee fossero buone:
- La tua presentazione è stata buona?
- Il tuo modo di consegnare la presentazione è stato buono? (Sono uno sviluppatore, so di cosa sto parlando: siamo PITA scontrosi, arroganti e pedanti che hanno sempre ragione e con cui è difficile lavorare a causa spesso dei nostri ego sproporzionati ).
- Hai un piano per implementarlo? Hai pensato al costo e al tempo? Hai pensato ai vantaggi per utenti / clienti? Hai pensato come influisce sulle vendite? Pensavi che il lavoro su quell'idea potesse avere un impatto su altri progetti e priorità? Mi dirai "perché dovrei fare tutto questo, sono il lavoro del mio manager e dei team di marketing o di vendita ?!" Tranne ora, stai provando a fare parte di tutti i loro lavori.
Il modello di progettazione che hai introdotto con forza nel tuo team ha creato un pasticcio
- Perché hai introdotto il modello?
- Se ha creato un pasticcio, probabilmente anche:
- non era il modello giusto,
- non è stato implementato correttamente,
- non era integrato correttamente.
- Come lo hai introdotto? Come si definisce esattamente lo stato "pasticcio"?
- codice meno leggibile?
- meno gestibile?
- le build sono rotte?
- Esistono diversi tipi di "pasticcio". Conoscere ciò che il caos si potrebbe aiutare a conoscere ciò che il fallimento in c'era, e se fosse colpa del modello di progettazione.
Inoltre, sono un po 'sorpreso dall'approccio stesso. Dovevi davvero spingere per introdurre un modello di progettazione? Sembra piuttosto strano. Uno schema è già presente oppure è necessario riformattare una parte della soluzione in base allo schema. Non lo spingi come faresti con l'adozione di un framework o tecnologia (come le persone hanno spinto molto per avere XML ovunque, e ora come le persone iniziano a spingere per essere in grado di scrivere HTML5 sulla copertina del loro prodotto in grandi lettere luminose).
Perché hai dovuto spingere? Perché c'era resistenza? Forse era giustificato.
Sei stato in grado di fornire esempi che questo particolare modello avrebbe aiutato a migliorare la tua base di codice in modi significativi (ad esempio, abbinandolo a un esempio di refactoring ai modelli ).
Nota completamente fuori tema, ma è quello che ho pensato per la prima volta quando ho letto il titolo della domanda poiché pensavo che si riferisse a guasti del software ... Avevo un software che implementava una classe BlackHole per gestire un tipo molto speciale di eccezioni in una delle componenti. Può sembrare (ed è davvero) un trucco ovviamente strano e sporco, ma la denominazione stessa è stata così superba che tutti l'abbiamo apprezzata per un modo abbastanza interessante di gestire un fallimento! :)