One of the most important ways to develop your skills as a software engineer is to work on side projects. These can run the gamut from open source projects to helpful tools and scripts, to fun toys.
While some of our colleagues always seem to be working on a new side project, it’s not so easy for the rest of us. We want to work on a side project but struggle to come up with a good idea.
This happens when we subconsciously restrict ourselves to unintentionally limit the types of projects that we feel are ‘worthy’ as side projects.
By setting the bar too high — like aiming to create a successful, popular, and original open source library — we rob ourselves of the opportunity to have fun and learn something from a less ambitious, but still worthwhile, side project.
In this post, I want to help fight “side project paralysis” by offering side project ideas that any software developer can start in one weekend.
WARNING: It’s easy to overcomplicate these things. The goal is to present something finished and deployed. If you’re trying to learn a new language, or you want to learn some new aspect of it, by all means work on a project. But don’t make it something so vital that you can’t afford to mess up. You will struggle and maybe wind up hating the language. The best thing to do is something small and whimsical.
Grand adventures start with a bold, but tiny, first step. Hello, World! Is a good first program for a reason. There’s so much to learn at first. The build tool, the command to run it, input + output, so much! At the beginning, getting all of that settled is hard enough without dealing with bugs in your program.
Of course, you’ll want something slightly bigger than Hello, World! on the command line. But think for a moment: what’s the equivalent of Hello, World! for web apps? What’s the equivalent for Twitter Bots? That’s what you should build first. Deploying something small is much better than never deploying anything. You can always add to it later if you need to.
The most impressive early works of artists come out of a very free exploration of a medium. Sure, masters can make even ugly colors look beautiful. But let’s face it. At the beginning, we’re all bad at that. The reason Hello, World! Is so great is that it captures that frivolous spirit of the artist. What could be more unnecessary than a program that says “Hello”?
The whimsy is what lets you produce something, anything, even if it’s worthless. Deploying something that works is better than a failed grand vision that doesn’t do anything. Whimsy is what lets you change course when you realize your idea won’t work. What’s something silly that could work? Whimsy avoids boredom and dead ends. It dodges perfectionism and welcomes serendipity. And after the fact, nobody knows what you had planned to do before you started.
Chances are, you’re probably aspiring for a job just outside your skillset. You can use your projects to try out the new stuff you’ll need for the job. If you still like it, you’ll also have proof that you can work with the tech. However, what you don’t want is to bite off more than you can chew. Seriously, build something you know how to build, with one extra thing you’ve never used.
What do I mean? If you are familiar with traditional web apps, build a web app, but in a new language. The familiar is the web app, the +1 is the new language. Or build a web app in a language you know, but with a new database. You don’t want the project to fail because you hit too many roadblocks. Remember, you can always add more stuff later. Which brings me to …
The best place to be is to have a stable, working, deployed project that you can add features to whenever you want to learn a new skill. Maybe you’ve got a small blog engine that you can add user login to. Or a Re-frame frontend. Or a spellchecker. Or AI categorization. Each of those features is digestible on the weekend. But if you tried to do them all at once, you’d probably never finish. Build your project in pieces. But first, your main goal is to get something small and basic working and deployed.
One of the issues we find with some project recommendation posts, is that they recommend projects that aren’t implemented in a way that excites the programmer to continue development. For instance, I see that a lot of people recommend building a web scraper.
Once you’ve built that web scraper and scraped the data, what are you going to do with it?
Instead of just scraping the data, why not build a website with that data. It doesn’t have to be fancy or get a lot of views. This scraper could pull the data into a database and then select the most popular posts. From there it could copy the title, along with a few sentences, and then create a post that it shares online. This would be an impressive and simple project that you can actually show off.
You’ve now shown that you can do more than just code a small segment of a system. Instead, you can think through an entire system. You need to consider how you are going to automate the process, manage the database, create the website and select the posts. This also allows you to actually have a tangible end product.
Without a tangible end product, it’s really easy to become unmotivated and simply stop at only a web scraper. In addition, you never know, maybe your site will become popular!
Skills: Database, web scraper, automation, web development (for the blog), and general programming.
Have you ever wanted to go to a band or comedian show, but realized it was last week? Maybe there was a free conference in your area on data science or big data and you missed out because you forgot to check.
Why not make your own aggregator using the Meetup and Eventbrite APIs, that will warn you when keywords are in event descriptions or titles? Now, I assume both Meetup and Eventbrite have similar options. But it is always fun to try to build your own system.
You can customize the system to work the way you want, and maybe even allow other people to make their own alerts by making this a website. What’s exciting about this project is that you can practice working with two different APIs. This will allow you to compare and contract what you like and dislike about them. That way, if you’re ever in charge of building an API, you’ll have a better picture of what works and what doesn’t.
Skills: APIs, database, automation, web development, and general programming.
You don’t always need to try to reinvent the wheel when creating your own projects. Simple projects like a site that lets you login, post photos, GIFs, and lets you scroll through a feed, provides an opportunity to create a solid base site first. Then you can add lots of interesting features like following, liking, and search. Search in particular would be a great chance to learn how recommendation systems and machine learning work!
It’s always fun to try and replicate popular sites. In fact, it is actually a great way to learn because you have to reverse-engineer each feature. Reverse engineering is a great skill, because as a software engineer you will constantly be maintaining other people’s code and you will need to get in their heads.
Skills: Machine learning (for recommendation system), database, automation, web development, and general programming.
Have you ever struggled to find the right gift for your friend? What if you could create a website that helps to predict what to buy a friend for a gift. It could allow the end user to either create an account or just get a gift recommendation.
Again, this allows for the opportunity to create an account which requires authentication, database development, etc.
Also, another great part about this project is you can use Amazon’s API for affiliate links. This will allow you to do a few things. One, learn about how to use APIs and get you comfortable with reading API documentation. Two, if you do it well, you can get a commission for each product someone buys.
This project also has an opportunity to try to create a basic machine learning model. You can create a quiz of sorts that tries to figure out what the best gift is and then, based on if people click the gift or not, can drive the model to learn based on the response rate.
Skills: APIs, database, general programming, and app development.
Think OfferUp, but instead of money, why not create a website that only allows trades. This concept will force you to develop several features that need some thought. You won’t be able to just attack this project without a plan.
How will people post, where will people find recently posted items and how will people search. All of these are separate features you can build. In addition, you need to think how users will interact, and maybe even how they actually make the trade.
The idea doesn’t have to be 100% practical for real life — it needs to be practical in the sense of improving your skill set as a programmer.
Skills: Database, web development, general programming, and app development (if you choose to make it an app).
Contract and invoice management are very complex processes. Contracts can have a lot of nuanced clauses and stipulations that can be difficult to track.
This makes this a very good project, even if you simplify it to some of its core components. Having to translate a complex business process into software is not easy. But it is what makes this project a good challenge.
Again, we wouldn’t overcomplicate this. Take a basic feature, like inputting the terms of a contract, and develop this part first. Then you can add other features like invoice tracking, contract analytics and forecasting.
Skills: Process management, database, web development, and general programming.
Task boards like KanbanFlow are built with several modular features that make it a great project to play around with. It will take a little work to get started, as you will need to set up a UI that is robust and dynamic as well. In fact, this project would be more of a two person job. One person to work on the front end and another person to work on the back end.
Don’t let that discourage you! This is actually a chance for you to work on your communication and team work skills. You will need to talk through designs to make sure you both fully understand it, and you know where your modules will be connecting.
This is always more challenging than it seems.
Skills: Communication, front end, database, web development, and general programming.
Any project that forces you to allow users to input as varioustypesof users adds an interesting design aspect. How will you ensure that the way employers experience the site meets their needs vs. prospecting job searchers? Like most of the other projects, you don’t need to focus on all of it at once. Start out by trying to create the ability to create a job posting first. Then you can go and focus on the job searchers and how they respond.
Skills: Database, web development, and general programming.
There are a lot of data sets that are very standardized for most companies. This includes accounting data which is usually based on cost centers, accounts, line descriptions, and finally the actual transaction cost.
What is great about the standardization of any data set, is that it makes it easy to create analytics on top of said data sets. Why not create a standardized dashboard that can help companies predict spend, see monthly outgoings, and possibly help them improve their spending.
For this project you will probably have to spend a lot of time learning about how to make sure you keep your data secure. Of course, we recommend first trying to build the modules that focus on uptaking and standardizing the data and displaying it, before you go too deep into security. That’s a rabbit hole you may never escape!
Skills: Forecasting, business logic, database, web development, and general programming
If you had a cellphone in the early 2000s, you’ve probably played Snake. It’s a simple game but you can always try to make things more complex! First, start by just trying to make the game.
This will require you to figure out how to develop a game online. This neon Snake by Sebastian Opperman is a great place to start. But after that, maybe you can add some cool new features like special items or special powers.
This would be a chance to play around and have fun. This project won’t be as technical from the stand point of having lots of users that sign up and use your site. However, it is a good challenge to figure out how to make a game run online.
Skills: Web development, general programming, and UI
Many people give up on side projects because of lack of time. The reason? They don’t manage their time well. Here are some things to maximize your success.
Carve out one 3-hour block on the weekend. Ask your significant other for uninterrupted time. Make sure the kids can’t distract you. Leave the house if you have to. The goal is to feel like you’ve got the mental space to focus 100% on it and achieve success in those 3 hours.
Plan out a small, achievable goal for those 3 hours.During the week, make notes about what you plan to achieve. It needs to be small. You want those three hours to result in something tangible, however insignificant it may seem.
For example, your goal may be to start with the Luminus template and deploy it to the web unmodified using a build pipeline. That may seem insignificant, but many issues can pop up. I’ve gotten stuck with lost passwords to Heroku, a spotty internet connection, and a typo in a config file. You can waste an hour just on those things. You want the margin of error so you are guaranteed to succeed.
Plan out some small extras you can add if you have time.If you don’t finish these, it’s okay. It’s still a success. But you want to be able to play with your project once you’ve achieved your objective.
Use the time during the week to guarantee success.It may seem like you don’t have time, but you probably do have a few minutes here and there. I’m not saying act frantically and non-stop. We need rest and breaks. What I am saying is if you’re thinking about your weekend project, you should be focusing on success. Don’t dream up all the features you could possibly have. I’ve done that and it only stresses me out that I’ll never finish. Instead, use your time to make your project easier and smaller.
Can you eliminate a risky piece of the puzzle? Do it. Can you double check your Heroku credentials ahead of time? Do you have the tools you need installed? Those things will keep the project front of mind and maximize those three hours you’ve got blocked off.
Remember: the goal is to have a basic platform for adding features to. You’d be surprised how much you can add to a basic, working product. Once you’ve got the basic platform working and solid, adding a new feature can be as simple as pulling out your laptop and experimenting. If it works, commit it. Otherwise, oh well! The hardest part is getting all the tools set up.