Article: How to manage pet projects »
FERDY CHRISTANT - JUN 23, 2008 (07:23:27 PM)
In an earlier article "Learning strategies for developers", I discussed some ways to incorporate learning into the life of a developer. I enjoyed writing a non-technical article like that for a change, and got great feedback. So here is my attempt to write another. This time I'll be discussing pet projects, and how to run them. Although pet projects apply to any profession, I'll mostly be focusing on application development projects.
Studies indicate that the majority of programmers/developers do not follow/write blogs, attend conferences, post on forums, or participate in open source or personal pet projects. Luckily, there is also a large group who does try to do these things, and almost everyone of them is struggling with the same questions:
- How do I find the time to do all these things?
- What should I pick as a pet project?
- Why can't I never seem to finish my pet projects?
- How can I maximize the benefits of my pet project?
Whilst there is no silver bullet to answer these questions in every situation, in this article I will share some tips and guidance on how I do these things. As for finding time to do your pet projects, please read my previous article.
Picking your pet project
I was planning on building up the suspense of this article by releasing the golden tip at the very last, but unfortunately I have to spoil it at step one: picking your pet project. This is by far the most important step, and also the step where most projects go wrong and are never actually finished. From my experience and observations, the number one reason why people do not finish their pet projects is that they cost too much effort, given the limited value that is returned.
There is a simple way to change this though. You can pick your pet projects smarter by maximizing their value. Once you recognize the value, you are likely to finish the project. The way I do this is by making a short list of opportunities and targets. These can be in the domain of your profession, hobby, your belief system...anything. Below is a fictional list:
- I'm interested in learning AI
- In my region, PHP is a hot technology that provides lots of job opportunity
- I love photography
- I want to learn more about ORM tools
- Our companies' intranet performance really sucks
- I care deeply about wildlife
- Work does not allow me to use the latest version of my favourite tool
- One day, I would like to have my own contracting business
- I want to play an active role in the open source community
- One day, I want to write my own tech book
The list could go on. Let's call it the opportunity pool. In order to select a good pet project from this pool, you need to catch as many fish as possible in a single try. In other words, pick a project that covers a combination of as many opportunities as possible or reasonable.
Let's apply this idea to the fictional opportunity pool. Here's what I could come up with:
My project will be a wildlife photo sharing site ("I love photography") where ad revenue is donated to the wildlife fund ("I care deeply about wildlife"). I will build it in PHP ("In my region, PHP is a hot technology that provides lots of job opportunity"). I will build it using the latest development tools ("Work does not allow me to use the latest version of my favourite tool") and methodologies ("I want to learn more about ORM tools").I will tune the performance of the site to the max ("Our companies' intranet site performance really sucks"), and build AI alghorithms to detect related photographs ("I'm interested in learning AI"). I will publish the resulting software in my online portfolio ("One day, I would like to have my own contracting business"), and freely share the source code ("I want to play an active role in the open source community").
Whilst this may not be a perfect example of a pet project, it is a powerful one. This single project covers the professional/development needs, hobbies, values and future wishes of an individual. Hence, the value is very high, and the person is likely to be motivated and finish the project. I've found that the key to my motivation for pet projects lies in the combination of learning, fun, and my future professional needs. The more you combine these needs, the more you will benefit.
Whilst the case above is fictional, I'll hereby share some of my projects that are real and actually finished, and how I got to pick them using the above idea of an opportunity pool.
Example 1: PIMB
Once I got my PHP certificate, I was looking into a project where I could put it into practice. In addition, I got tired of developing only business administration apps, and wanted to have a taste of real-time software. Furthermore, I was fascinated by instant messaging bots, and discovered that very little frameworks/engines exist to build bots. Finally, I wanted to make a contribution to the open source community by freely sharing the project, with the side effect of personal gain by having an online portfolio available.
The result of all these incentives is PIMB, a PHP-based open source instant messaging framework. This pet project is finished and covers all of the above needs. Never during the development phase was I demotivated to continue or finish the project. Why? I picked it well, by covering as much opportunities as possible.
Example 2: Blogo.NET
Once I got my .NET certificate, I was looking into a project where I could put it into practice. I wanted to build a serious application, not just a silly example. I wanted to learn more about this new LINQ technology, and how to implement a real application using a n-tier architecture and the latest development tools (Visual Studio 2008). As always, I wanted to add the result to my portfolio and provide value to the open source community.
The result of all these incentives is Blogo.NET, along with a very detailed article. Blogo.NET is an open source n-tier ASP.NET blog application that was built using Visual Studio 2008 and LINQ. Again, this single pet project covered many of my needs and opportunities.
Example 3: Debian server
Pet projects do not have to be limited to applications, they can be anything:
I've always wanted to run a decent home server. As a developer, I also wanted to know more about server administration, particularly Debian/Linux administration. In addition, I wanted to get more experience with hardware installation. Finally, I wanted to use the server to professionalize my way of working at home. Where applicable, I wanted to share my learnings with the community.
The result of all these incentives is my very own home server that covers all of the above needs, and is described in this article. I managed to learn a lot in setting it up and optimizing it, it has professionalized my way of working at home and it provides a useful service to our household. Once again a combination of opportunities taken on in a single pet project.
Bad example: The Lotus Notes contacts database
By now I think you get the point that combining opportunities in a pet project is key. Still, I would like to share a poor example as well. Consider the following situation:
I'm an experienced Lotus Notes developer and am in need of a contacts database to store my contacts in. We have a system at work for this, but I really want to store my personal contacts as well, and I want to access them from anywhere. Therefore, as a pet project, I will build a web-based Lotus Domino contacts application.
This example is a poor pet project, because the person is already an experienced developer on the platform and is not likely to learn a lot in the process of developing the solution. Furthermore, there are many existing solutions for this problem already, thus the idea of adding this to your portfolio or making it open source adds little value to the community either. The person is better of just using an existing solution and picking a new pet project that combines more opportunies.
Scoping your pet project
As discussed, picking your pet project wisely is key. Another aspect is scoping:
- Will I develop the project solely for myself, or should it be reusable for others?
- Should it be part of my portfolio?
- Do I expect to ever get any commercial value from it?
My general advise is to develop your pet projects as reusables wherever possible, and to add them to your portfolio. This takes more time, but the return on investment is great. By developing for reuse, you will make sure that the project has proper quality and that you do not take shortcuts. This makes you a better (commercial) developer. Furthermore, by having a good portfolio of reusable pet projects, you are likely to receive other benefits, such as recognition, ad revenue, job offers and a lot of useful community contacts.
Your primary incentive to implement a successful pet project should be the opportunity pool mentioned earlier. The combination of opportunities you can cover in a single project should be plenty of motivation to actually finish the project. As an additional motivation, you can treat yourself to something nice once you finish, for example something that you want to buy.
I know my tips are really simple, but I hope it somehow helps you in picking and finishing your pet project while having fun in the process. Please supply your feedback in the comments section.
Related article(s): Learning strategies for developers