How to Come up With Good Side Projects
If you’re just starting your programming journey, you’ve probably seen endless tutorials on YouTube and other places on the web that teach you how to build simple apps. Typically, these are basic todo-style web apps with a basic UI. Some may or may not include hooking up a database and user authentication. These projects are definitely helpful when starting out, but at some point, you are going to want to graduate from the todo app and move on to something much more involved. This is where side projects come in.
In my opinion, a good side project can be summed up into anything that requires a decent amount of problem solving on your own while also exposing you to unfamiliar technologies. For the rest of this article, I’ll go over some considerations you should make when coming up with a new project to work on. Hopefully, these will help keep you motivated to learn and try out new things!
Increase Complexity and Challenge
This one is self-explanatory. If you want to grow as a programmer, you need to take on more and more challenging tasks. However, this process is incremental to avoid discouraging people from learning.
How can we add complexity to our projects? Let’s use a todo app as an example. Let’s assume that right now we can sign in to the app and add and delete todo reminders. Good incremental steps to making this app more complex can be:
- Ability to group todos together
- Add due dates to todos
- Ability to search/filter todos by due date or group
How about when coming up with new projects? You should try to do something you’ve never done before. Never implemented a sign up form? Try to incorporate that into your next project.
Think About Functionality You Want to Build
Tutorials are good to follow when getting the hang of a new programming language or framework. However, when you’ve got a programming language or two under your belt you should be thinking less about learning syntax and frameworks and more about learning how to build functionality. Instead of thinking “I want to learn React in my next project,” think “I need to build a dashboard UI for my next project, and I’m going to use React to build it.” Want to create a startup? Then focus on learning how to create an effective landing page, regardless of the tool used to build it.
This parallels real-world software engineering jobs. Engineering tasks are typically functionalities that are requested by product or management. What language or tools needed to create that functionality does not matter as much as the making sure the actual end product works for users.
Circling back to the first point about increasing complexity, try to think of functionalities or software components you’ve never built before when choosing a side project. Bonus points if you also decide to use an unfamiliar framework to build it. That way you can learn multiple things at once!
Use API’s From Your Favorite Products
Lack of motivation to complete projects plagues all of us. This is why when choosing a new side project, it should be catered to your personal interests or hobbies. One way to make things interesting is to incorporate API’s from products you like into your projects. This helps keep you motivated while also learning how to read API documentation and make API requests. A lot of well-known services have free API’s for developers like yourself. Here’s a few you can try building with:
- Spotify Web API — browse artists, playlists, albums, etc.
- YouTube Data API — post videos, get analytics for channels and videos, etc.
- Reddit API — get posts and comments for text analysis, get memes, etc.
- Twitch API — read chat in real-time and get channel events via web hooks
You can easily find other API’s by googling. Like finance? There’s a bunch of financial data API’s. Cooking? Probably a recipe API out there. If not, that’s a new side project idea :).
Add Cloud Services
Seems like every job posting these days is asking for familiarity with cloud services. Integrating a cloud service provider such like AWS, GCP, or Azure into a side project is a good way to get that experience. Between all of the providers, there are hundreds of different services and tools targeting specific use cases from deployment to data science and machine learning. This means that there’s probably a cloud service out there that will fit into your project.
If your project is something like a website, a good place to start would be simply deploying it on the cloud. Going back to our theme of increasing complexity, you can then add multiple machines with the app deployed and put them behind a load balancer, CDN, etc.
Definitely peruse through the catalog of services that are offered. Having a broad idea of what’s out there opens doors for what you’re able to build and allows you to be more creative. Services like AWS SNS allows you to add messaging functionality to your projects. Now you can add SMS reminders to you todo app!
Putting It All Together
With the above principles, I’m going to list off some project ideas you should try out and expand on. Do this brainstorming exercise on your own with your own interests in mind.
- A Japanese learning resource aggregator that utilizes the Reddit and YouTube API’s to get the newest learning resources and stores them in a DynamoDB table. (This can be expanded to any topic of your choosing, I just learn Japanese as a hobby.)
- A Twitch stock simulator where chat can type in orders on a shared simulated account. (Okay, I built this already here. You can try it for crypto.)
- A full stack web app for fitness trainers to manage their schedules and track their clients’ progress. It will need to be hosted somewhere and need to store user data.
- A recipe API that returns a recipe or cooking video based on what ingredients the user inputs/has.
Usually, I like to brainstorm a bunch of project ideas all at once then pick from the bunch. It helps to set aside some time to practice this because it is a skill that will be difficult at first.
Hopefully, this article has inspired you to start challenging yourself so that you can grow as a developer. Happy building!