I have a few active personal projects. Getting me to choose which one to work on every night is hard. Each of everyone of them is unique and all have the potential to change the world ( just kidding :)). So I set a policy: instead of dividing up time equally for each project, I am going to work on them based on my mood. In other words I follow my heart; if I feel that I like to work on project A then I will do so, if later I find that the project no longer arouse my interest I will move away from it. It's a pretty laizzer-fair system, with the best, the most interesting application gets the most attention.
Some of the projects are written in Python, and the rest are written in C# 3.5. Given that human are more inclined to work with familiar stuffs, and given that I happened to be a proud .Net programmer, one would expect that I would spend a majority of time working with .Net projects. But that was not what happened.
Instead, a Python project, the TechnoratiLink project occupied most of my time.
Let's get this clear: developing in Python is never as smooth, or as enjoying as developing in .Net. First, the IDE available for Python is relatively unsophisticated, as compared to Visual Studio 2008.
Second, despite that C# is more verbose than Python, but the typing required in C# is actually less because of the help of intellisense.
Third, for the Python project I am using Google App Engine and Django. As it is well known that Google App Engine is a new framework, the framework itself is still unstable and the documentation is sketchy at best. C#, by contrast, has been in the market in for 6 years. The reference for C# is far more voluminous than Python:
Not only that, there is no simple RAD tool that allows me to design the GUI-- in this case, it's a free WYSIWYG HTML-- that is compatible with Django template. But I rely on RAD tool so much that without one I feel like I am crippled.
But that Python application beats the rest of the projects in one single most important area; it's the only application that I can deploy instantly and for free.
It's the only application that allows me to release early, release often.
C# is a great language, VS is a great tool. But I can't deploy my C# application to the public for free because all .Net hosting service requires me to pay $$. Without a free platform, there is no way you can get to your users, and that's why all my C# apps are staled to a certain degree.
Although the market for the application is very niche, but I know people are using it. I know that they encountered bugs or exceptions by examining the log files. And I am one of the users as well. My experience and other users feedback drives the evolution of the application, and this is where the motivation comes in. The fact that your users use your application is the single most important factor in driving you to fine-tune your application.
When you release early, release often, you know that you are not developing in vacuum, you know that you are actually doing something useful for all, whether you get paid or not. You are actually making other people's life a little bit easier, solving one of the zillion problems on this world, big or small. When you release early, release often, you will get know the way the users use it sooner than otherwise you can. Instead of waiting 3 months to get users' feedback, you can get them in days. When you release early, release often, you can find bugs, fix bugs in a faster cycle. Your bugs won't stink, much like the rubbish repository do because they got weed out before get rotten and the problems amplified.
I've seen some projects that dragged on for years. They were massive... and suffered from the problem of over-planning. Developers who were once excited and passionate about the projects grew disenchanted and lost all the zeal as the days went by. Having a project dragged on can seriously affect the morale of the developers. Release early, release often is the only key to keep the developer's passion on and make sure that the flame won't die down.
Release early, release often is a necessary condition for a software success.