Uma das lições mais importantes do desenvolvimento é saber quando é a hora de parar.
O que normalmente acontece é que um desenvolvedor adiciona um recurso. Isso, por sua vez, inspira mais idéias. Assim, mais recursos são adicionados. Essa é, como você disse, uma das maneiras pelas quais um projeto se torna vaporware. O desenvolvedor nunca vê o projeto como 'concluído', portanto nunca é lançado.
O hábito em que você deseja entrar é parar de pensar em termos de um lançamento / versão como um projeto 'finalizado'. Em vez disso, olhe o desenvolvimento como um processo de longo prazo. Pense nos lançamentos como marcos no caminho para o que um dia você espera que o programa seja. Assim, um release / versão é apenas um instantâneo de onde você está no processo de longo prazo ... um instantâneo que foi bem arredondado e testado.
O que você pode fazer, do lado prático, é sentar e especificar seu próximo lançamento. Não precisa ser terrivelmente completo. Anote as 3-5 novas e principais funcionalidades que você considera essenciais para a próxima versão. ( o número real de recursos pode variar dependendo do tipo de aplicativo, sem contar as correções de bugs ou pequenas alterações de interface gráfica ). Se você tiver outras idéias, tudo bem ... apenas faça anotações e implemente-as no release a seguir. Quando você concluir esses 3 a 5 itens, seu lançamento estará pronto para a versão beta.
Quando inicio um novo aplicativo, normalmente penso na 'visão' final do aplicativo. Isso, para mim, é o que eu quero na versão 3 do aplicativo. Com esse benchmark, tenho uma idéia do que tornará a versão 1 sólida - apenas o básico.
Resumo:
Cada versão não precisa ser a 'visão' finalizada do projeto. Apenas um marco para essa visão.