Why you should have side projects
Posted on October 12, 2020
As a developer, you may have acquired some skills that you don’t find the time to practice. Or you may want to learn new ones, but your daily job doesn’t give you the opportunity.
Do you use a framework at work but are frustrated that you only use a tiny portion of its features? Did you hear about a new language bringing everything you’ve ever dreamed of but can’t use it at your job?
Side projects are an excellent way to solve these problems: they help you learn new skills and consolidate the ones you already have but can’t find the way to practice.
What to do as a side project?
Learning skills related to your expertise, and yet not too far from it, can help you go out of your comfort zone. For instance, learning front-end if you’re a back-end developer, or mobile development if you’re a front-end developer.
A cool side project could be to develop an application but implement both the back-end and front-end of it. You could also set up continuous integration and delivery if you want to. Having some part of the project using skills you already have will give you the confidence to start, and the goal of making something from A to Z by yourself will provide you with the courage to continue.
Of course, this is not the only reason to start a side project. Side projects are always a great way to learn, but not only learn technical skills. You may use to work on a small part of a big project in your job, but with your side project, you’ll need to have a global vision of the project: what is its architecture? How will you publish it? How will you maintain it? With your project, you’re the chief.
Two categories of side projects
It’s best to know what is the goal of your side project. I can put my side projects into two categories:
- The ones that I do to learn or reinforce a skill (learn a new language, experiment with a new framework) and for which I mostly don’t care about whether they’ll be used or not;
- The ones I do because I had an idea or found a problem I think I’m able to solve, and for which the technical aspect is not the priority (for these, the best technical stack is the one you know best).
Both categories of side projects will teach you something. Even if you already master the stack you use, using it in a new project is always valuable. And putting yourself in the shoes of a potential user is something you can forget in a professional environment, where too many times there are too many intermediaries between us developers and the final user. Again, in your project, you’re in charge of everything, including understanding your users’ needs.
So even if you’re doing your side project to learn a technical skill, it’s okay if this skill is just a small part of the project. Imagine you want to learn how to use a new state management library for a web application. Of course, the state management library doesn’t make the whole project; you’ll still need a UI layer, maybe a back-end, etc. Perhaps using the state management library will take you only 10% of your time. But it’s okay: using the library and learning how it works in a real project is far more valuable than just following a tutorial.
But if you want your side projects to be useful (both for what they teach you and for its potential users), there is something you must do: release them.
A vital thing to do: release your side projects
Publish them. Make them available to some users. Not necessarily to the whole world, but at least make some of your friends use it. First because when working on your project, the simple goal of having some users will encourage you to focus on what is important to them, more than spending time on the details (which would be the best way to abandon your project in the middle). Then, because even if your project is not that ambitious, you may have a good surprise if it has a little success. Again a huge motivation to keep working on it.
So a good idea to approach your side project from the beginning would be to start small. Your first goal should be to release something usable, even if all the features are not present. In other words, focus on making a Minimal Viable Product (MVP): the smallest application that solves the user’s problem. When this MVP is ready and published to some users, you’ll have plenty of time to add other features or make your application beautiful. (A classic problem encountered in side projects is focusing too much on the user interface. Yes, it is essential, but not as much as the main feature itself. Unless, of course, your application’s main advantage against its concurrence is revolutionary user experience.)
The main advantage of side projects
In his blog post The Science of Side Projects, Kevan Lee (VP of marketing at Buffer) explains how side projects are great because they have three characteristics that make them differ from work projects:
- you don’t have to succeed to have money to live;
- you decide on the timeline, having no imperatives such as a deadline;
- you work on them because you like them, not because you have to.
It brings me to the final advantage I see in side projects, and probably the most important one. Yes, side projects will make you learn things. Yes, they will help you in your career. But more importantly, they are what make us love programming. In many professions, even if you love what you do, what you do at your job can only be done at your job, if only for material reasons. With programming, you can use what you know and master for personal projects, in the best case, to help you solve problems you can have in your everyday life. And for these projects, you can do what you want, take the risks you want, do them when you want, and give them as much love as you want.
Now let’s be honest: no, not all of my side projects were released to the world. Because the most important with a side project is to enjoy doing it, and sometimes you realize you don’t love working on this idea you had as much as you expected. So I have a massive list of projects that I started but never finished. Sometimes it’s because I realized that my project wasn’t as impressive/promising/realizable as I thought. Some other times I just lacked time until another project idea came to my mind. But it doesn’t change the fact that each time I start a project, my goal is to release it. And fortunately, it still happens sometimes.
Published or not, there is always something valuable about side projects. You always learn something. In the best-case scenario, you learn the language or framework you wanted to experiment with or reinforce what you already knew. In the worst-case scenario, you realize that what you wanted to do can’t be accomplished as quickly as you expected with the stack you chose. But in all cases, what you did won’t have been done for nothing.
Cover photo by Nathan Dumlao.
Check my latest articles
- 📄 A better learning path for React with server components (May 26, 2023)What if we took advantage of React Server Components not only to improve how we use React, but also how we help people learn it from the beginning?
- 📄 Display a view counter on your blog with React Server Components (April 24, 2023)A short tutorial with a cool use case for React Server Components, Streaming and Suspense with Next.js: adding a view counter on a blog, calling the Plausible analytics API.
- 📄 Using Zod & TypeScript for more than user input validation (March 8, 2023)If you have ever created an API or a form accepting user input, you know what data validation is, and how tedious it can be. Fortunately, libraries can help us, such as Yup or Zod. But recently, I realized that these libraries allow patterns that go much farther than input validation. In this post, I’ll show you why I now use them in most of my TypeScript projects.