The Joys and Woes of a Forever ProjectPublished on
Working on a personal project that will never be entirely satisfied can bring moments of extreme brilliance and dread. This is called a forever project. The main driving force behind the project is yourself and the itch that you’re scratching. This itch isn’t constant. After scratching for a day or a week, the itch is satisfied for a week, a month, or longer. Since there aren’t others on the project, peer encouragement is limited, so all enthusiasm must be your own. The project won’t become a source of income so you can’t force yourself to work on it. In fact, the end gaols you have for this project either don’t exist or are abstract enough that it is impossible to know if they have been achieved, thus adding to the eternal notion of the project.
Despite these seemingly negative notions, the there can be much joy to be found in a Forever Project. A Forever Project presents an opportunity for continual learning. It stems from a desire to learn a skill and starts as an experiment. There is no initial objective and the mood is carefree. Often an activity bogged down in business logic will be tedious and repetitive, but a Forever Project is free from this constraint and instead fosters creative and innovation. The project will be a reflection of an individual and not their employer.
Having a Forever Project gives one a sense of purpose. It may not be a constant sense of purpose but as long as the project exists, it will always be a sense of purpose. Even if the project only enters your life as you sit on the bus on the way to work, mulling it over, the project is having a positive impact on your life. It keeps you sharp. Always looking for a better solution. Never giving up.
To give an example, my forever project is working on save-games from the game Europa Universalis III, which was released in early 2007. I started on my project about the same time. The original intent was to manipulate the file. I was delighted by the fact that I could write a program to read in a file, interpret, edit, save, and watch how the game changed. I originally wrote for myself, but soon realized that others might find use for my personal project. The thought of others using and analyzing my program gave me a boost of motivation, a motivation I find akin to the feeling as a deadline nears. Even though no one else knew of the project, I still had to get my code out there in the world. I had to. If others liked my project, it would give me confirmation that I belonged to that community and also that my itch bore fruit for others. During the release and a couple weeks after the release as bug reports were squashed, work on the project was high. However, the community enthusiasm started to wane as the newness factor wore off and my enthusiasm as well due to other aspects in my life. The code laid dormant.
Then I started to think about all the code I had written. I hadn’t expected the project to progress to its current state and have the features it did. Then a poisonous thought entered my head: What would I do differently? In my free time my mind would come up with ways to optimize various routines, add a feature, and make the program more streamlined. Of course, my mind reasoned, an entire rewrite would be in order. This is not the first time this has happened, I seem to have a chronic disease that won’t allow me to appreciate code that I’ve written. I am unsure if it is a good thing, as it could be a sign of learning or it could mean that I’m self conscious. Whatever the truth, the code had to be rewritten, and it was. The cycle then repeated itself. There was a flurry of coding activity around the release of a new version with the subsequent drop off of interest.
The cycle continues to this day with an annual rewrite. After over six years of development, a business would expect quite a lot from an application, and frankly they would be disappointed with mine. However, I’m not. I’m actually quite proud with what I have accomplished. With every rewrite, I’ve been able to start fresh with new knowledge and new technology. I can look back at every year and find what I had learned. WPF/XAML, efficient data structures, library design, MVVM, and data validation to name a few. The beauty of this is that I don’t plan on stopping soon. I may not be always working on my Forever Project, but it will always be a part of me.