Una de las lecciones más importantes en el desarrollo es saber cuándo es el momento de detenerse.
Lo que suele suceder es que un desarrollador agrega funciones. Eso a su vez inspira más ideas. Así que se añaden más características. Es decir, como dijiste, una de las formas en que un proyecto se convierte en vaporware. El desarrollador nunca ve el proyecto como "terminado", por lo que nunca se libera.
El hábito en el que quieres entrar es dejar de pensar en términos de un lanzamiento / versión como un proyecto 'terminado'. Más bien, mira el desarrollo como un proceso a largo plazo. Piense en los lanzamientos como hitos en el camino hacia lo que algún día espera que sea el programa. Por lo tanto, una versión / lanzamiento es solo una instantánea de donde se encuentra en el proceso a largo plazo ... una instantánea que se ha completado y probado.
Lo que puede hacer, en el lado práctico, es sentarse y especificar su próxima versión. No tiene que ser terriblemente minucioso. Escriba las 3-5 nuevas funciones de major que cree que son esenciales para la próxima versión. ( el número real de funciones puede variar según el tipo de aplicación, sin contar las correcciones de errores o los cambios menores en la interfaz gráfica de usuario ). Trabaja en ellas. Si se te ocurren otras ideas, eso está bien ... solo toma notas e implementalas en la siguiente versión. Cuando termines esos 3-5 elementos, tu lanzamiento estará listo para la versión beta.
Cuando comienzo una nueva aplicación, normalmente pienso en la 'visión' final de la aplicación. Eso, para mí, es lo que quiero en la versión 3 de la aplicación. Con ese punto de referencia, tengo una idea de lo que hará que la versión 1 sea sólida: solo lo básico.
Summary:
Cada versión no tiene que ser la 'visión' finalizada del proyecto. Solo un hito hacia esa visión.