Personal projects aren’t just a chance to build something awesome—they’re a chance to learn. Without the pressure of constant deadlines and the need to protect a client’s resources, projects done for their own sake offer educational opportunities that benefit all aspects of my work. The general philosophy I follow is pretty straightforward:
Manage your projects in a way that develops what you want to develop while teaching you what you want to learn.
That’s simple enough. The trouble is that I’m not very good at working for myself. I’m prone to changing project parameters on a whim and constantly revising and reinventing at every step of the creative process. Demanding, mercurial, uncommitted—as my own client, I’m about as bad as it gets. And don’t even ask about the hours that I drag out of the contractor. Me.
The good news is that most of my negative traits can be offset by discipline and a sound development process. I usually start with goals. As I outline what I’m setting out to do, I take care to remind myself early and often that building something awesome is just one outcome of the development process. The acquisition of skills and techniques that can help save time and money down the line is at least as important to the project’s success. I set my goals accordingly, carefully outlining what I want to take away from the project and then sticking to the plan.
But goals are one thing; execution is something else entirely. A project focused as much on education as on the final product requires a fundamental shift in the way that I approach the development process. From the moment I begin fleshing out concepts, I find myself in a constant struggle to keep the project on schedule, and on track while still allowing time for exploration and development. A few key guidelines help.
With an hourly clock ticking the minutes by as dollars and cents, it’s easy to track the cost of a contracted project. Not so with personal work. So I tend to start with a contract that outlines the project’s deliverables and the time I’m willing to invest in them. To help myself stay within the time I’ve budgeted, I carefully regulate how much time is allowed to slide into the educational sink. On larger projects, I’ve even been known to issue monthly invoices to myself to help track opportunity costs and keep myself accountable to my original goals.
When working for others, mistakes cost valuable time and create unnecessary stress in the contractor/client relationship. Mistakes made on personal projects still carry a cost, of course, but relationships—the critical currency of the freelancing world—tend to survive much better. Nobody likes mistakes, but most of us can acknowledge the role they play in highlighting the misconceptions or poor practice that bring them about. With all the subtlety of a giant red flag waving, “Hey! You’re doing it wrong!”, a well-placed mistake made in private encourages corrective action before the same problem arises in a contracted project.
In code, repetition constitutes an unnecessary expenditure of time and energy—the developer’s most precious resources. In education, however, repetition can be a tool for inspiring new techniques while reinforcing old skills. If I’ve embraced a project as a learning opportunity, I rarely worry about destroying, re-creating, and repeating tasks until obscure concepts have become clear. Time invested repeating anything worth doing has a way of earning itself back.
Together, these guidelines help me to stay focused on my goals while providing a framework for resolving the constant conflict between my innate curiosity about everything and the product-oriented development process. The products I set out to develop get built, but not at the expense of the learning I set out to do along the way.