Il miglioramento continuo è un fulcro della filosofia Agile. A partire da uno specifico aspetto del processo di sviluppo che vogliamo migliorare, quali sono le tecniche che possiamo mettere in campo per ottenere il meglio? In questa presentazione analizzeremo delle possibili risposte, volte a migliorare il lavoro dello sviluppatore a tutto tondo, spaziando dagli strumenti software ad una collaborazione e comunicazione ottimale.
Risolvi i tuoi problemi di sviluppo con agilità - di Stefano Brocchi
1. Risolvi i tuoi problemi di
sviluppo con agilità
Stefano Brocchi – Giuneco
2. 2
Risolvi i problemi, migliora il processo
Quali tecniche Agili utilizzare a fronte di un
particolare aspetto da migliorare?
3. 3
Risolvi i problemi, migliora il processo
• Per non-agilisti: breve introduzione alle tecniche agili da
approfondire per migliorare determinati aspetti
• Per agilisti: riflessione sulle tecniche da proporre a partire dal
problema
4. Il giusto approccio
Siate proattivi e seguite il principio del Kaizen
4
Tenete presente che molte persone reattive reagiscono
principalmente ai problemi
5. Che bello abbiamo un problema
Perché non sfruttare un problema per migliorare il nostro approccio?
Visione globale: lavorare sul processo per ottenere miglioramenti
permanenti
5
7. Troppi bug
Possibile causa: codice complesso da gestire
Soluzioni
• Clean code
• Architettura migliore
• Distribuire la complessità
• Minimizzare il debito tecnico
• Pair programming
• Migliorare concentrazione (discusso in seguito)
7
8. Troppi bug
Possibile causa: codice non controllato
Soluzioni
• Testing automatizzato e Test Driven Development
• Testing manuale
• Disaccoppiamento sviluppo/testing
8
10. Sviluppo e manutenzione lenti
Soluzioni
• Alleggerire il debito tecnico
• Strumenti tecnici appropriati (librerie, framework)
• Single object responsability
– Meno copia e incolla
• Limitare rilavorazioni richieste dal cliente
– Impact mapping, capire valore e obiettivo da raggiungere
10
12. Clienti insoddisfatti
Soluzioni
• Rilasci e feedback frequenti (continuous delivery)
• Impact mapping, sviluppo orientato al valore
• Attività con un perché chiaro
12
14. Comunicazione malfunzionante
Possibile causa: mancanza di uno strumento di gestione
attività
Molto tempo ed energia solo per sincronizzarsi sullo stato di
avanzamento
«lo faccio io? Lo fai tu? L’ha già fatto lui? A che punto è? E’ stato testato? Lo hanno pubblicato? Ma serviva davvero?»
14
15. Comunicazione malfunzionante
Possibile soluzione: usare una board
Credits: Creative Commons Attribution-Share Alike 4.0 International license
https://commons.wikimedia.org/wiki/File:Kanban_Board.jpg
15
16. Comunicazione malfunzionante
Possibile soluzione: usare una board
• Visione stato di avanzamento
• Tracciamento attività e discussione problematiche
• Trasparenza sviluppo e responsabilità
• Possibile retrospettiva per miglioramento
16
20. Essere in ritardo
Possibili soluzioni
• Pianificazione migliore (planning games, board)
• Meno bug, meno lavoro urgente inaspettato
• Sviluppo sostenibile
20
22. Scarsa concentrazione
Possibile causa: multitasking e interruzioni
«Il multitasking è il male»
Possibili soluzioni
• Tecniche timeboxing
• Allocazione timeslot per email e ticket
• Incanalare richieste su un’unica persona
• Limitare le urgenze riducendo i bug
22
23. Grazie!
Risorse utili
• Agile manifesto: https://agilemanifesto.org/
– Innumerevoli risorse online sullo sviluppo Agile
– Uno dei guru più influenti è Uncle Bob (Robert C. Martin)
• The Art of Agile Development – James Shore, Shane Warden
• www.giuneco.tech
– Sviluppo software e tecniche agili
• Domande, dubbi, curiosità? Parliamone!
– giuneco@giuneco.it
– www.giuneco.it
– www.linkedin.com/company/giuneco-s-r-l-/
Slide template credits:
https://poweredtemplate.com/it/modello-powerpoint-sfondo-astratto-con-righe-diagonali-rosse-52045/#
23
Editor's Notes
Grazie! Questa presentazione ha l’obiettivo di proporre delle risposte per una semplice domanda…
A fronte di un problema che si verifica nel nostro processo di sviluppo software, o di un aspetto che desideriamo migliorare, che tecniche Agili possiamo mettere in gioco?
Target duplice: agile-digiuno e agile-beginners introdotti alle varie tecniceh Agile. Sommariamente, panoramica, ognuna richiederebbe presentazione. Prendere conoscenza di cosa cercare e approfondire.
Per agilisti: riflessione inversa, punto di vista alternativo. Di solito, descritte tecniche agili a loro vantaggi. Qua invece, al contrario, si parte dall’obiettivo e si arriva alle tecniche. Checklist di fronte a criticità.
In Agile esiste una filosofia detta Kaizen. Secondo questa scuola di pensiero, è importante migliorarsi continuamente, e cercare spunti di crescita anche quando va tutto bene.
Molte persone la pensano diversamente: sentono il bisogno di un cambiamento solo di fronte ad un problema. Un ostacolo per il Kaizen, visto che molte tecniche proposte sono da usare in squadra. Tuttavia, possiamo usare questo a nostro vantaggio
Quando abbiamo un problema, non limitiamoci a mettere una toppa: può essere un buon momento per proporre al team un approccio diverso. Capiamo cosa ha favorito la comparsa del problema nel nostro lavoro di squadra.
Come si può migliorare il processo, in modo che il problema non si verifichi più? Come ci possiamo mettere nella condizione in cui sia difficile fare errori, o che quando vengano fatti siano individuati rapidamente e non abbiamo ripercusioni?
Di fronte a difficoltà oggi, cogliere l’occasione per rendere un pochino migliore il lavoro di domani.
«Se miglioriamo il nostro modo di lavorare, i benefici che otterremo permangono e si accumulano giorno dopo giorno»
Un problema classico
Codice complesso: difficile da capire, richiede molto know how, fragile
Clean Code: tecniche per scrivere codice «pulito» – criteri per minimizzare la possibilità di errori. Quando qualcuno scrive un bug, spesso il problema non è il bug in sé, ma il codice che ci sta intorno
Arc: strutturazione ottimale, separazione delle responsabilità, pattern software noti per soluzioni ottimali di problemi complessi
Complessità: problemi complessi diventano semplici spezzandoli in parti, metodi brevi e semplici
Debito tecnico: non faccio oggi ma dovrò fare domani, si accumula!
Pair programming: per aiuto, scorgere subito bug, condividere conoscenza
Testing automatizzato: controlli programmatici su correttezza programma. Aiuta molto per cambiamenti. TDD: scrittura parallela di test e codice app
Testing manuale: sempre
Disaccoppiamento: buono per individuare errori di comprensione dei requisiti. Se questo aiuta, può essere segno di poca chiarezza
Debito tecnico: detto prima, più ne abbiamo più rallentiamo
Strumenti: non dobbiamo implementare tutto noi! Controllare se esistono strumenti che ci possono aiutare. Uso di troppi/dei framework sbagliati può anche essere causa di debito tecnico.
SOR: un oggetto deve avere concettualmente un solo compito, e quel compito lo deve fare solo lui. Se ben fatto, una richiesta di modifica impatta limitatamente codice. Altrimenti, richieste semplici richiedono rilavorazioni complesse. Esempio: copia e incolla richiede doppia manutenzione.
Una delle cose peggiori che può succedere: lavoriamo per mesi ad un progetto, poi lo consegnamo ed otteniamo una risposta deludente – il cliente non è soddisfatto, non è quello che voleva. Succede spesso.
Con rilasci frequenti e relativo feedback, è facile aggiustarre il tiro e dare un’idea a tutte le parti in causa di come sta procedendo il progetto. Più facile pianificazione dinamica. Strumenti software di supporto per questo.
Impact mapping: tecnica studiata per analizzare come il software porti valore al committente. Identificando il perché di un’attività, si può discuetre prima se e quanto sia utile
Suno strumento apposito è difficile tenere traccia di tutto
Una Kanban board: una tabella dove sono riportate le attività da fare, il loro stato di avanzamento e chi le ha prese in carico. (e volendo, mille altre cose)
Parlo di un problema in particolare, che è pervasivo. Il multitasking, fare più cose contemporaneamente. Non esiste, è in realtà context switch.