YAGNI significa che le cose vengono fatte quando devono essere fatte e non prima. Ciò non significa che non vengano mai eseguiti, a meno che non siano mai necessari. Significa che fai solo ciò che dà al cliente un valore commerciale immediato . Ciò che significa valore commerciale immediato è soggettivo per ogni cliente e ogni progetto.
In entrambi i casi, non puoi perdere nulla con YAGNI.
Nell'altro caso, perdi tempo a scrivere codice che non viene mai utilizzato, a scrivere test per codice che non viene mai utilizzato, a scrivere documentazione per codice che non viene mai utilizzato e manutenzione su codice che non viene mai utilizzato, le persone si chiedono cosa faccia questo codice e se mai viene usato, fino alla nausea.
Esempio
Se sto lavorando su un prototipo / proof of concept o versione 1.0 di un'applicazione, non ho bisogno di un design per scalare al livello di Facebook. L'inferno non ho bisogno di un disegno in scala al livello di Facebook, fino a quando comincio a vedere che io ho quel tipo di traffico.
Pensi che Zuckerberg abbia progettato la prima versione di Facebook per scalare a 500 milioni di utenti? No, lo ha progettato e costruito per fare solo ciò che doveva fare e non di più. Se avesse tentato di creare un progetto a cascata per 500 milioni di utenti dal primo giorno, probabilmente Facebook non sarebbe mai stato rilasciato.
Il modo pratico di fare le cose è come lo ha fatto. Ha iniziato con PHP e MySQL, e riprogettato e riscritto in base alle esigenze in base al valore aziendale , il ridimensionamento a milioni di utenti era di enorme valore aziendale, ma non al giorno 0. Al giorno 0, il semplice lancio di qualcosa era l'eccezionale valore commerciale.
Ha pianificato di ridisegnare e riscrivere. Che è una mentalità diversa rispetto alla pianificazione per il lavello della cucina e che in realtà non sviluppa o fornisce nulla di utile che sia completo.
Pianificare la fine della vita per una base di codice e riscrivere è Agile e prova del futuro. Cercare di trovare un obiettivo indefinito di "flessibile" finisce sempre per fallire. Stai progettando senza alcuna necessità e perdendo tempo potresti sviluppare ciò che è di valore aziendale invece di sognare con desiderio di funzionalità che non verranno mai utilizzate.