Il tuo primo scenario, si applica per reinventare la ruota, la sua auto-spiegazione.
Il secondo scenario, NON si applica se il codice esistente richiede poche modifiche, ma se lo fa, è una buona idea provare a usare proprietà, metodi e metodi simili rispetto a un codice esistente, quindi altri sviluppatori non hanno problemi con la "ruota".
Fai attenzione all'approccio "è sempre meglio iniziare da scrath", potrebbe essere necessario più tempo del previsto.
Il terzo scenario che citi, è l'approccio "pratico". La "ruota data" può fare il lavoro, ma, in realtà, consuma troppe risorse, memoria, velocità, ecc.
Ho lavorato una volta in un'applicazione che richiede di mostrare i dati gerarchici in un controllo ad albero da una singola tabella. Abbiamo già un controllo che potrebbe farlo, ma supportato diverse tabelle, per articolo.
Per poterlo utilizzare, ho dovuto imparare troppe cose, assegnare troppe proprietà, eseguire troppi metodi e IT era lento. Un collaboratore ha insistito per usarlo, al fine di "non reinventare la ruota".
Ho fatto un nuovo controllo, da zero, ho letto una singola tabella, programma solo alcune proprietà facili da imparare. E prima che me ne accorgessi, c'era un altro collaboratore che l'ha preso dal repository di codice condiviso e ha sostituito il controllo precedente.
Bonus:
Quando la ruota che hai già è "al quadrato". Con "quadrato", intendo che in superficie, sembra che assomigli a una soluzione al tuo problema, ma dopo una buona occhiata, arrivi alla conclusione, no.
Dipende se hai le competenze e il tempo (e l'autorizzazione della tua azienda),
per reinventare la ruota.