I have been thinking a lot lately about "the right moment". That place in time where everything is just okay for release, every feature has been nailed and everybody is ready to welcome that awesome and ambitious application. When every milestone is done and finalized for production. All you have to do is deploy and look at awesome tweets about what you just released.
If only, it could be like that. But the facts are different. Your little baby, the thing you passed the last months or years on will never be okay enough for release (in your opinion (as in mine)). Finalizing a project is hard, and releasing it successfully is even harder. But after having watched many others doing it right, releasing and pushing their own boundaries once in a while I noticed something. Something very important. Nowadays, you do not have to wait anymore.
Our time is amazing. The old software release cycle is over and now we can release as soon and as often as we wish. A very good example is GitHub. They release new features and improvement every week! I think it is wonderful, anytime someone isn't glad they can ship a new improved release and call it a day without having hundreds of thousands of people needing to get a physical copy in some store.
With that being said, I can finally bring my point: You don't have to nail every detail down anymore.
For the latest product I've been working on, I had the same problem. I made very detailed and long roadmaps and my first milestone were way too ambitious. I want to bring something to the world, now not next year. So basically the idea is to minimize content and maximize release cycles. Release more often but make release a bit less ambitious. You can ship that wonderful feature in four different releases. You know?
Facebook is the perfect example. Sometimes they release stuff that you look at and wonder "Why the hell did they release that useless crap?". But one week after, they make another release that finishes the puzzle. That way people can play with the first feature-set, find bugs, help development and thus make the whole application and process better.
And that's what I think drives the world today, it's all about moving the right parts at the right moment.
Another good reason for releasing often is communication. Releases communicate. I always love to check the App Store for updates, when there is one, I always check out the changeslog to see what improvements they have done. Why? Simply because it gives me ideas for my own projects. Foursquare recently released a great update for its Explore tab. I hurried to see what it was and have been amazed by the ideas behind it and that very fact helped me resolving one unrelated problem of a project.
I love what I do, I seriously do. Improvement is the key. Ship an idea, refine it until it becomes the perfect feature.
Stay connected, I should have something great to show very soon!