The argument for side projects are clear.
- You have a full-time job, but you also want to explore new and exciting topics in your free time.
- People can know how good you are from your side projects. Take, for instance, finding a new job, meeting with engineers, etc.
- Most jobs require work experience. Side projects are the easiest way to get real-life work experience.
Whatever your reasons are, there's one problem you'll almost always face
Incomplete side projects!
You'll wake up one morning pumped up about an idea. You'll work on it every day. It'll be cool, exciting, you'll learn a lot. You'll have great plans for this project and you'll be grateful you started working on it.
If you're very motivated, you'll go for 4 weeks, make a few posts on Reddit and you'll find that no one seems to care. The idea you thought would qualify for a great side project isn't that great after all.
You start working on it once or twice a week, months go by without touching the codebase. After 3 months, you'll have some other idea and think it's okay to abandon this one. It was just $12 for a domain name and maybe 50 hours' worth of work, so you're fine.
Maybe you shouldn't do that side project!
If you think of side-project success in terms of Github stars or community impact, then you'll be disappointed 99% of the time. Of course, your goal could be community impact, but then you have to be ready to put in hundreds of hours which you'll most probably not have.
I think the first thing you'll want to do is properly define goals & constraints for your side project. Let's go through these in details
What do you want your side project to achieve for you? This is very important so you know exactly when to stop working on it. You don't want to be the person who painfully sticks to a side project because of your ego. Side projects are supposed to be fun, exciting, challenging, etc. The moment they stop being these things, you'll want to rethink them.
What has worked for me is defining 3 things I want to accomplish with my side project. For Avocado, it was the following
- Teach me basic workflows for building & managing a design system
- Have a project for hiring managers to see that I have practical experience in design systems, accessibility & Typescript.
- Build a consistent system that I can use in my other side projects.
After 2 months of working on Avocado, I got tired of everything. There were a lot of things to improve - Theming, building more components, etc. they would take months and I thought to myself - Should I invest the next 2 months in another beautiful idea or should I improve Avocado?
I spent a few days thinking about it and it went down to those 3 goals - have I achieved them with Avocado? Of course not, 2 months isn't enough time to build a design system while working 2-3 hours daily. But I had in some way achieved 2 of the most important goals.
- I had learned a whole lot about design system tooling and I was able to get about 10 interviews from that side project and a lot of people said they reached out because of my design system.
This was enough reason to stop major work on Avocado. I still show it in interviews and people can still look at it, but I don't spend additional time adding new features and components for now. I could now pick on newer, more exciting side projects and not feel guilty for not completing them.
It doesn't have to be complete. It just has to achieve defined goals
You want to have a defined time constraint on your side projects. Say, 3, 4, or 5 months. You'll want to say - No matter what happens, I'll focus on improving this side project for 3,4, or 5 months. After the given time, you can then decide if you should spend more time & resources on the project or work on something else.
Why should you work on a side project?
Your reasons might be entirely different.
- You're curious or want to learn about a topic by building stuff
- You're looking for a job and need a few projects
- You want to build tools to solve your own problems
If you're building a project just for Github stars or something unrealistic, you'll want to be truthful to yourself. Think of the things you could be doing with all that free time - You don't want to waste that time for sheer ego.
I'm of the opinion that if you don't have any genuine side project ideas, then contribute to some useful project or software on Github. You'll learn a lot and have a lot to show for. It's a thousand times better than a project just sitting on your hard drive.
A sustainable way to think of side projects
Two things I've learned from someone who builds a lot of side projects - Linus. I spoke to him a few months ago and he taught me a lot about side projects. Here are a few
- Build things that solve your personal problems - If you use something every day, you'll be forced to improve it.
- Make side projects that compound - Linus built Ink, a programming language with Go, then he built Torus - a UI framework on top of it, he's built note-taking apps and productivity tools on top of it. Over time, he's built an ecosystem where each project empowers the other and everything now looks impressive together.
- Have defined goals for side projects.
- Set a time constraints. It's not suppose to go on forever.
- Let side projects compound. Don't build different projects all over the place.
Again, these are just my learnings. I'm in no way an expert in all of these, I'm just documenting my learnings on my little internet garden.
Thanks for reading.