2. Le origini
• Metodologie pesanti dominavano negli anni ‘90
• BUFD - Big Up Front Design
• Emersione di Agile e XP
• Simple design
3. It’s a trap!
• “Ne avrò sicuramente bisogno in futuro”
• “Se lo faccio ora risparmierò tempo nel lungo termine”
4. You Aren’t Gonna Need It
• Implementa funzionalità quando ne hai bisogno
• Non quando pensi che ne avrai bisogno in futuro
• Puoi sempre svilupparle più tardi
5. Perchè rimandare?
• Il lavoro fatto potrebbe risultare inutile ¯_(ツ)_/¯
• Domani siamo più intelligenti di oggi
• Un’implementazione precoce è
spesso più costosa
6. I costi di un’implementazione precoce
Carry
Primo caso: Feature sbagliata
Build Delay
7. Carry Delay
I costi di un’implementazione precoce
Secondo caso: Feature giusta
8. CarryRepair Delay
I costi di un’implementazione precoce
Terzo caso: Feature giusta, implementata erroneamente
9. Effetti di YAGNI (in teoria)
+ Qualità del codice
+ Focus su priorità
− Costi
− Overengineering basato su
intuizioni potenzialmente sbagliate
10. YAGNI: Quando?
✓ Features non (ancora) necessarie
✓ Speculative generality
x Semplificazione codice
x Good practices
11. YAGNI: Quanto?
• Non si tratta di un principio assoluto
• Talvolta può convenire ignorare YAGNI
• L’eccessiva semplicità non piace a tutti
• addTwoAndThree() or add(x, y)?
“Everything should be made as simple as possible, but no simpler.”
— Albert Einstein
12. Conclusioni
• Buone ragioni per posticipare
• Chiedersi: “mi serve davvero?”
• …senza confondere posticipare con procrastinare
“Courage is postponing the decisions of tomorrow, to tomorrow”
— Kent Beck