Do you ever feel like you are confident in only one particular field?
Like you know only one tiny corner of the vast software universe? Then, the minute you try to escape it and work on something different, you get frustrated.
And if you need to build a complete, functional project—from scratch—with:
- Initial research and machine setup (packages, installments)
- Managing dependencies (libraries, build tools, automations)
- The whole business logic plus high test coverage
- Production deployment
… then somebody else has to do everything except the little corner of your comfort zone?
I know many of us have felt this way, especially junior developers who join a huge, complex project with a codebase that has been developed for years. The lack of experience you may feel is massive.
And experience is a delicate problem with job offers. It feels like everybody exaggerates the number of years they require from candidates for a given language or framework.
It's sometimes unrealistic! Take a look at this:
Though I doubt such a job opening actually exists, one thing is for sure: If you are experienced, job offers will keep coming for you. If you are not, options are limited. And the competition is staggering.
Then how are all beginners supposed to gain experience?
The tried-and-true way to gain experience is starting a side project.
A side project is not necessarily a project you develop while also working. It can be any self-driven project outside your regular study routine. It's a way for you to apply and develop your skills.
And the best part of it is that you're not doing individual, out-of-context, made-up exercises just to practice some skill. You are creating solutions as a whole. You are solving problems similar to those in a real project, similar to what you may be working on in the future.
I can go on and on about the benefits a side project can have on your career, especially in the early stages. A great deal of the software community understands this quite well already, especially the audience of Simple Programmer.
This post is about where most people get stuck: choosing a topic and following through.
Everybody knows they should own a side project. Only a few, though, manage to actually make a project work for them. A good idea can set you on the right track, optimize your learning, and develop your thinking while keeping you excited and curious to go further. Then you end up building your portfolio to move your career forward.
Yet many developers fail to think of a project they'd actually love to build. In my experience, I've noticed that people tend to pay more attention to what skills or frameworks they exercise, rather than the project topic. They soon realize it's getting a bit boring with time—and eventually, they never follow through.
Let's look at the crucial points of how to plan your side project so that it gets finished and gives you the experience to attain the position you're aiming for.
Choosing a topic—what’s it about?
The purpose of every project is to solve a problem and so should be yours. How do you decide what problem to solve? In other words, what should the project be about?
There are two critical steps when choosing the topic of your project:
- Pick the right languages and frameworks
- Make it interesting for you
Picking the right languages and frameworks is the easy part.
First, make sure you choose a niche (if you haven’t done so already). A niche is practically what you want to be—e.g., a web developer, an iOS developer, or a Java developer. It can vary in specificness, for example, a web developer implies HTML plus CSS plus JavaScript plus perhaps some JavaScript framework. But you can also choose to be a Ruby on Rails 5 developer, for example—making it much more specific.
Next, find associated libraries and tools common to your niche. The best way to do this is to find job openings within your niche and observe what other experience they require. For example, if you want to become a Node.js developer, perhaps you will also need to learn Express.js and MongoDB. If you wish to work with Ruby on Rails, you'll probably need to know some SQL, too.
You can find on-the-spot job openings within your niche by doing a simple search on any of these websites:
Gather a list of all the libraries, frameworks, tools, and pieces of software mentioned within the job requirements for your niche. This is a quick and reliable way to guarantee you will spend time working on something you will probably do professionally later on. Once you know the set of libraries and tools you will work with, you are ready to choose a topic for your project.
Choosing an Interesting Topic
First, you need to know what your programming niche is capable of doing. For example, if you want to focus on HTML and CSS only, you won't be able to create a dynamic web application. You should focus on a static website. Or, if you are a C++ developer, you may want to stay away from web development and focus on desktop applications.
Then, step away from programming and think about your personal interests. Try to name a few of your favorite topics and activities. What are your hobbies? What do you enjoy doing in your free time?
The answers to these questions can be great options for your side project theme.
You like alternative rock? Think about building a music app you can actually use—there are plenty of open source musical application programming interfaces (APIs) out there. Enjoy board games? Why not think of a simple game of your own? Go even further—make it Harry Potter-themed if you're a fan of that series, and make it a two-player game if you rarely find many people to play with.
You are the boss and you call the shots—try to put as many themes or solve as many problems of your own into the project. Seek and express yourself in this project. This will keep you eager and hungry to achieve more with it.
See if you can build a short list of topics that you just can't wait to start coding. Then, you can easily filter out the ones that are outside the scope of your programming niche. Hopefully, you'll be left with one or two truly great ideas.
If you're still stuck, take a look at existing projects or apps you enjoy using. You can borrow as many ideas as you want as long as you're doing it non-commercially.
For example, if you're a soccer fan, you can create a simple version of the FIFA Manager games, selecting players and simulating games. If you're a fan of card games like solitaire, you can create your own. If you find it hard to organize your day, you can create a basic Evernote prototype.
Thinking in detail about a subject you're personally interested in may take a bit of time, but it's absolutely worth it. Choosing a topic that interests you is likely to result in a project that shows off your skills, because you'll naturally put more time and passion into something you enjoy.
If you're looking for a project as a side hustle as well—something that can potentially make money for you—then John's take on side project ideas is a must-read!
Size of the Project
How big should the project be? This is a very important part of planning your project.
Try to always start small. Plan something you roughly estimate to be ready within a month of consistent work. Or even two weeks.
Starting small is a good idea for three reasons:
- You get a functional project completed early. This prevents you from feeling overwhelmed and boosts your enthusiasm. Getting early wins and keeping positive momentum is critical—and a lot more fun.
- You can always add new features later. Think of some of the apps you use and love the most. It doesn't matter what type. Can you quickly suggest one new cool feature you would love if they had? I bet you'd have at least three if you really thought about it for five minutes. And this is a fully functional big app we're talking about! Imagine how many ideas you would have for your small shiny project.
- People typically underestimate when planning. If you plan to finish in a month, chances are you will be almost finished at the end of the second month. It's just usually how it goes with programming. Unexpected difficulties happen early and often; there are occasional bugs, configuration can be cumbersome, or sometimes code needs refactoring. Also, you need to cope with procrastination. Keep in mind that while you're planning your project idea is usually when you're the most excited about it. Excitement and that “I can't wait to get started!” feeling is a common reason for underestimating.
Complexity of the Project
Judging by most developers' experience (as well as my own), my recommendation is that you base the project on skills you already have, but leave at least as much of an “unknown” part.
Starting safe in your comfort zone is important, as it sets you on the right track and builds your confidence for the challenges ahead. But trying out new concepts, researching on your own, and going through “trial and error” is where you actually learn and grow the most. If you want to get the most out of your project, the balance between these two is key.
Try to achieve this proportion:
- 40 percent—things I have done and know how to do
- 40 percent—things I haven't done and will need to research about myself
- 20 percent—things I'm not even sure are possible to do yet, but am curious to check
The goal is to ensure enough of a comfort zone to get you going, but also include plenty of curiosity and uncertainty as well.
Keep in mind that this is your personal project and, unlike your projects at work, you control how it grows. I used to always aim too high early in my career and eventually, things went above my head. If you find yourself doing the same, take a step back and stick to your strengths.
On the other hand, I've always loved it when there's at least some challenge involved in each step of building a project. Even if you repeat a routine you've done a few times before, see if you can go the extra mile. Is there a better method or library than the first one coming to your mind? Could you structure your code better this time?
Asking yourself these questions ensures you won't just repeat what you already know, but will aim higher and eventually, improve more. The speed and accuracy in which you acquire new concepts are essential for your career as a software developer. Those who succeed are those who have turned learning into a habit.
Your personal project is a perfect place for adopting this habit—while having fun doing it!
Once You’re Ready, Make the Best Use of Your Project
Remember that once you have it finished, you can use your side project as leverage for your career. “What have you built?” is one of the first questions in every developer interview. And often, the final “yes” or “no” depends on what level of competence you managed to display while answering the question.
Imagine the impact of showing your live, up-and-running application to the interviewer. Explaining what problems occurred, how you chose to solve them, and why.
Maybe you have a favorite part of your work, something you feel proud of. An elegant solution, applying a design pattern, an algorithm, metaprogramming, integration with an API, or simply a good interface. You can pick the part that impresses the most and use it to showcase your skills.
After all, you didn't just finish a course or do an exercise. You created a functional project from scratch, researched and configured dependencies, designed an architecture, and solved a real problem with your code. This shows you’re not only a versed developer, but also an analytical thinker, well organized, and capable of being the sole driving force of a functioning project.
Which employer wouldn't want to hire someone with that profile?
Stick With Your Project for Future Success
Being smart while planning your side project is the first step toward actually finishing it. Spend the time early on, do a little research up front, and get pumped about the idea.
Remember: A good portfolio project may open doors for you later!
I hope these tips help and really get you going.
If you decided to follow these tips and created a side project, I'm curious to know how things went for you.
What have you built aside from work projects? Did it work out or was it a total bummer? I know I've had both experiences.
Tell us what went wrong. Or why not brag a little? Share links if you have something deployed; we'd love to take a look!