Eric is currently studying Product Design and Analytics at Cornell University. In a past life, he was a Product Engineer at ZURB, where he worked on the open-source Foundation framework and helped create Ink, the world's first responsive HTML email framework.
Permission to Play
When I began coding, everybody warned me to write more comments. “There’ll come a day when you don’t even recognize your own code,” they said. “Don’t make the same mistakes that every beginner does.”
Of course I never listened, and, three years later, I’m finally reaching that point where my memory fails me, leaving gaps the size of entire projects. My blissful ignorance of this fact came to a screeching halt the other day, when I happened upon some code from my sophomore year of college.
Intrigued, I dove into the folder marked
portfolio_site, wondering what treasures I might find. As I poured over line after line of PHP, the memories began to rush back to me. Treasure it was not. Instead, what awaited me was a stark reminder of the time 19-year-old me, in all his wisdom, had attempted to write his own CMS.
“Why would I bother learning the syntax of some new system?” I thought to myself, grasping for reasons to discard Wordpress, Jekyll, or any of the hundreds of qualified alternatives. “Surely I can piece together something just as good, and it’ll be an open-source project that I can show potential employers.”
What followed was a series of sleepless nights, nested if-else statements, premature abstractions and shameful uses of the
eval() function. When the dust had settled, I had written a blogging system with Tumblr as the backend that supported custom templates, an RSS feed and Disqus for comments. I had created, with the help of several hundred lines of PHP, a very primitive Tumblr theme.
Why didn’t I create an actual Tumblr theme, rather than some half-baked PHP monstrosity? Maybe it was pride. Maybe it was self-loathing. Maybe I wanted to prove to myself that I could do it.
Whatever the reason, I felt a moment of shame as I looked through my old code, shaking my head at the impracticality and inelegance of the solution I had settled on for my simple blog.
Then I snapped out of it. So what if it was a dumb project? I learned a damn lot from that stupid little CMS.
I learned the basics of how templating systems worked. I learned about class autoloaders. I learned about how to use an abstract configuration file, instead of hardcoding all my URLs directly into my source code. Maybe I never ended up releasing the code or making a million dollars off my pet project, but it was enough to get me an internship (and eventually a full-time job) at ZURB, where I could work with my idols, get paid to contribute to my favorite open source project and write for the company blog about all the amazing stuff I was learning.
As a beginner, maybe it was more important to be inspired and to learn something than to create what others found valuable. Saving the world is all well and good, but, as much as I wouldn’t have admitted it at the time, I needed to learn how to walk before I could begin to run. See, that dinky little CMS, in all of its glory, reminded me of a simple truth that I had forgotten as I progressed in my learning: side projects are meant to be stupid.
The Curse of Practicality
As web professionals, we often get caught up in our devotion to practicality. What user need are we solving? Where’s the use case? What’s the business model? Will it scale? Is it web scale? When you’re working for a client (or your own company), practicality is important—it keeps you in business. Given my interest in product-focused work, rather than “pure” engineering or visual design, I often find myself being the one to pose these questions to my friends and classmates as we discuss our entrepreneurial plans for world domination. When you’re working on a side project, however, practicality is a force of harm, not good.
At some point, practicality takes over for passion and playfulness, giving you the excuse you need to stop. Yes, practicality is the tool of the wise, but if you’re not careful, it can also feed that monkey of self doubt that’s sitting on your shoulders, waiting to choke you out at any moment.
The thing is, side projects have enough stacked against them to begin with. By nature of being side projects, they’ll never be your primary focus, let alone the beneficiary of the resources of your day job. Side projects are meant to be an escape, a distraction, a release. They’re meant to be fun. Why burden them with the arbitrary and unrealistic expectation that they need to be practical too?
The Wonder of Exploration
The fact that we were all born long after the Age of Exploration should not be a discouragement. So what if all the tiny little islands in the ocean have been mapped and charted to within an inch of their lives? The fact that we’ll never have our names in the history books for it doesn’t make it any less fun to set sail for the horizon and see what we encounter.
The same is true for the web. At times it may feel like everything that can be invented has been invented, and that’s ok. Side projects are meant to help us learn and explore—to pique the childlike curiosity that led us to take on careers as makers in the first place. Your definition of success shouldn’t be contingent on inventing the next Facebook.
Don’t get me wrong, the web is a young industry, and there are still novel things left to be invented or discovered. It doesn’t always feel that way though, especially when you’re new to the game. When so many experts and figures of authority are ready to step up and give you their opinions, sometimes it’s easy to forget that we don’t have the whole “programming” thing figured out yet. The key is to interpret this as opportunity, not as a crushing pressure to create something ground-breaking that will change how the internet works.
Maybe you’re incredibly inspired by banking software, or it’s your life’s mission to create the best datetime formatting library in the world. If that’s your jam, then rock out. For those with less…eclectic…tastes, there’s no shame in making a website for tracking your Dawson’s Creek obsession or a soundboard of your coworkers’ catch phrases. For me, inspiration comes from using silly GIFs as a way to enable storytelling or seeing how I can combine microcontrollers, cats and the Yo API.
I’m not likely to win a Humanitarian of The Year award for my silly side projects, but they remind me to have fun and they keep me refining my craft. Building things for other people is what professional coding is all about. With side projects, you do you.
Learning By Doing
When it comes to learning something new, oftentimes reinventing the wheel is the best way to do it. Just like taking something apart to understand how it works, rebuilding it from first principles gives you a much better understanding of what it actually does. While re-implementing your favorite framework from scratch may not be the most efficient thing in the world, it will no doubt give you a much deeper appreciation and understanding of the issues its creators faced.
Educators have understood the logic of these “camel shaving” exercises for generations. Do we really need every Computer Science student in the country to learn how to build a computer out of logic gates their sophomore year? It’s probably not the most practical use of time, especially when they could be building web apps on the latest and greatest realtime server tech, but it definitely teaches them how computers work (and how their code actually runs).
Solving an already solved problem has an additional benefit for beginners: a way to check your work. Maybe this pre-existing benchmark will give you some hints as to your unknown unknowns, or perhaps it will reveal that you’ve found a better way altogether.
Permission to Play
Like most creative achievers, web workers suffer from the disease that is perfectionism, making it hard to let go. In between the desire to achieve our lofty goals and our desperate attempts to keep our sanity, however, we have to give ourselves permission to play. Grant yourself the freedom to explore your whims through your side projects, even if it results in something stupid.