Una de las lecciones más importantes en el desarrollo es saber cuándo es el momento de detenerse.
Lo que generalmente sucede es que un desarrollador agrega características. Eso a su vez inspira más ideas. Entonces se agregan más funciones. Esa es, 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 lanza.
El hábito en el que desea entrar es dejar de pensar en términos de un lanzamiento / versión como un proyecto 'terminado'. Más bien, mire 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, un lanzamiento / versión es solo una instantánea de dónde se encuentra en el proceso a largo plazo ... una instantánea que ha sido bien redondeada y probada.
Lo que puede hacer, en el aspecto práctico, es sentarse y especificar su próximo lanzamiento. No tiene que ser terriblemente minucioso. Anote los nuevos 3-5 principales piezas de funcionalidad usted 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 cambios menores en la interfaz gráfica de usuario ). Si se te ocurren otras ideas, está bien ... solo toma notas e impleméntalas en la siguiente versión. Cuando completes esos 3-5 elementos, tu lanzamiento estará listo para la versión beta.
Cuando inicio 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.
Resumen:
Cada lanzamiento no tiene que ser la 'visión' terminada del proyecto. Solo un hito hacia esa visión.