Eu acho super bacana, geralmente eu faço da seguinte forma, para desenvolvimento pessoal. Pego um software qualquer ja existente, e vou desenvolvendo com o objetivo de chegar a aquele software. Isso me ajuda a melhorar o meu código, documentar mais as funções. Quando chego em uma V1.0.0 ai disponibilizo publicamente.