29 November 2010

The Importance of Pet Projects

photo by Stephane Mahe, Reuters
Pet projects are important.  Really important.  There is no way to keep your technical edge in the workplace, without researching and practicing in other areas of the .NET Framework, based on day to day work exposure, alone.


Over the years and through several jobs, I have observed the demands of the job rarely challenge my technical skill, nor do they require use of all or even many parts of the .NET framework.  For example, I often encounter areas where LINQ to Objects is very useful, but have never employed LINQ to XML in my workplace.

Of course, I can find places to implement great things like lambda expressions, parallel, and WCF message queuing, but they just don't fit into the project, as it is in maintenance mode, or few if any other programmers on the team understand the technology well enough for me to reliably introduce it.

The Pet Project

Pet projects are small projects typically produced on personal time.  If you are lucky, you work for a company like Google and 3M, that both schedule time for personal research and development -- pet projects.  If your company doesn't allow this, as for 20 minutes every Friday to do so.  Things like Sticky Notes were invented this way, and have changed the world -- tell your boss you're going to change the world with your 20 minutes, and I'm sure they'll think about it... after the laughter subsides.

A proper pet project features:
  • A clear objective, as with any other project
  • Simple objective, so you can finish it in a reasonable time frame
  • Challenge -- the purpose is to exercise your skill in areas you don't often use
  • Utility -- the product should be useful to you in your personal and/or professional life
Pet projects may be something as simple as writing a remote data backup service, to something quirky like a custom interface for USB missile launchers

Example

I recently moved source control content from Team Foundation Server 2008 to 2010.  I decided to compress a copy of the 2008 source code into a .ZIP file.  I immediately noticed the root directory reported a size of 4GB -- extremely large for source code!

OBJECTIVE:
I wanted a utility that visually represents the size of directories and files in a pie chart, to quickly drill down to the offending directory.  I decided to build a tool to do so.

SIMPLICITY:
I want it quick, so no extra treats are going to be involved.  I wanted my tool to do only two things:
  1. Display directory contents in a pie chart, by size
  2. Drill down into sub directories, by double-clicking the pie chart wedge
CHALLENGE:
I am challenged by the fact I have many options for creating a pie chart in WPF, and have only done so once, several years ago.

UTILITY:
I can keep this utility in my tool box, for future use.  Others may be interested in the application, too.

Project Pay-Off

As of writing this post, my current, personal-time pet project is a Windows Phone 7 (WP7) application.  I had a need for something, and decided to create a (rather simple) application to fill that need.  I will submit my application to the WP7 Marketplace, as a free download, so others may benefit from my needs and solution.

However, I have many great ideas of how to expand the product, and then submit it to the WP7 Marketplace, which will sell for a low price.  the new features are things I don;t know how to do (and won't discuss here), so I can leverage my future pet project for income.

Just Do It!

In summary, pet projects are useful, but are important to keeping your skills sharp.  Most programmers don't stay in the same job for long, and the technology definitely changes every few years.  Stay on your toes, and you'll land on your feet... or some other aphorism.

No comments:

Post a Comment

Please provide details, when posting technical comments. If you find an error in sample code or have found bad information/misinformation in a post, please e-mail me details, so I can make corrections as quickly as possible.