Su primer escenario, se aplica para reinventar la rueda, se explica por sí mismo.
El segundo escenario, NO se aplica si el código existente requiere poca modificación, pero si lo hace, es una buena idea intentar usar propiedades, métodos y usos similares a los de un código existente, para que otros desarrolladores no tengan problemas para usar su "rueda".
Tenga cuidado con el enfoque "siempre es mejor comenzar desde el comienzo", puede llevar más tiempo del esperado.
El tercer escenario que mencionas es el enfoque "práctico". La "rueda dada" puede hacer el trabajo, pero, en realidad, consume demasiados recursos, memoria, velocidad, etc.
Trabajé una vez en una aplicación que requiere mostrar datos jerárquicos en un control de vista de árbol desde una sola tabla. Ya tenemos un control que podría hacer eso, pero admitimos varias tablas, por elemento.
Para usarlo, tuve que aprender demasiadas cosas, asignar demasiadas propiedades, ejecutar demasiados métodos, y FUE LENTO. Un compañero de trabajo insistió en usarlo para "no reinventar la rueda".
Hice un nuevo control, desde cero, leí una sola tabla, programé solo algunas propiedades fáciles de aprender. Y antes de darme cuenta, hubo otro compañero de trabajo que lo tomó del repositorio de código compartido y reemplazó el control anterior.
Prima:
Cuando la rueda que ya tienes está "al cuadrado". Por "cuadrado", quiero decir que en la superficie, parece que parece una solución a su problema, pero después de una buena mirada, llega a la conclusión de que no.
Depende de si tiene las habilidades y el tiempo (y la autorización de su empresa) para reinventar la rueda.