How to Pick Good Software Engineering Side Projects
The most common question I get on LinkedIn or Instagram is, "Do we need side projects?" especially for top tech companies like Microsoft, Google, Facebook, Amazon, etc. To be honest, when I interviewed candidates at Microsoft, I rarely went into detail about their side projects, mainly because top tech company interviews are based on problem-solving questions and there isn’t much time outside of that. There are a couple of exceptions:
If you are an intern or a fresh graduate, then your side projects become important
Or, if you have done something special and impactful, then it could definitely be a great conversation starter
However, this is not to say that side projects aren’t important. They are, very much so. See, we often look at side projects from the point-of-view of adding weight to our resumes. I think that is the wrong approach. Side projects need to be done for your own interest and skills, and when you do that, the benefits will automatically show up in your resume. Remember that the main goal of doing side projects is to become a better at engineering, and having fun while at it!
I made a detailed video about this on my YouTube channel. If you are more of a video person, please check that out instead. If not, read on.
What makes a good side project?
Here are a few things that I think makes any project a great candidate to get involved with:
A project that is full stack, covers multiple different areas of technologies from hardware to software and client side apps to backend cloud services. This not only gives you a breath of experience but also helps you learn the art of integrating different pieces of technologies together to form a cohesive unit.
A project that uses current platforms, frameworks and programming languages. This makes sure that your stills are transferrable. Don’t always choose a stack that you are comfortable, try to pick one that is best for the project.
Something that you are passionate about. This could be a cause that you are close to, may something that has personal meaning, or one that has a cool story behind it. When you are excited and passionate about something, you will automatically put your best effort towards it.
A project that has tangible and meaningful impact. This could be something that helps underdeveloped parts of the world, or something related to the current context of the global pandemic.
And finally, something that is unique and fun. Stop building the typical TODO lists, calculators, interpreters and sudoku solvers. They have been done too much. Put a fun twist. Come up with something unique. Software projects don't have to be boring!
What areas of software engineering can you look to pick a side project from?
Open Source Projects
The best way to get street cred in the programming community is to contribute to open source projects. It is literally like moving up the ranks from adding documentation to minor bug fixes to becoming a reviewer. It’s pretty fun. If you are looking for an open source project to participate, webhint is a great one.
webhint is a customizable linting tool that helps you improve your site's accessibility, speed, cross-browser compatibility, and more by checking your code for best practices and common errors.
Linters are a great way to learn how the web browsers render content. This is also part of the OpenJS foundation and backed by Microsoft. I’ve personally contributed to this projects and know some of the developers that are admins there, they are all great! So, try it out and let me know what you think.
If you simply cannot find an open source project you want to work on, but have a cool idea that you think can help others, create your own and share the love! Get your friends involved. Coding is as much of a social activity as a night out with friends!
Distributed Could Services
This is a great way to learn the entirety of a web application. Most web applications today are comprised client side (apps, website), APIs that connect them to the backend, which is then comprised of a plethora of distributed services like message queues, IoT hubs, containers, databases. While your side projects may not need all of those things like load balancers and containers, this is still a great way to learn about them and system design in general, and get the basics of scalability.
In my YouTube video, I discuss some example projects under this area if you are interested.
Machine Learning
ML plays a huge role in almost everything we do today. From your camera detecting people, to advertisements to your calendar being smart about making appointments. So it is a great area to work on. A few things you could work on could be gesture control where you try to play a normal game with gesture instead of your controller, or something like mask detection, which is quite relevant in the context of the current pandemic.
The good thing about ML is that a lot of the libraries are open source, so you can get started fairly quickly.
Freelance projects
Another option is working on freelance projects. You can go to websites like Fiverr or Upwork and search for projects that either match your skills or skills that you want to acquire. You may initially have to do those projects for little to no money to build up reputation, but if you do a good job, not only will you improve your craft, but also build up your portfolio of work, and make some side income.
Competitive Coding
The final area is competitive coding. And this may have the most direct impact if you want to get a job at any of the top tech companies, because this is what the interviews are based on — solving coding challenges in a limited amount of time.
For example, if I gave you 10 cities with roads that connect them in different ways and distances between them. Could you write code that can find the shortest path between any of those two cities in less than 30 minutes? This is essentially a super simplified version of Google Maps. Competitive coding will help you with this kind of stuff, and as a side benefit, you automatically prep for your coding interviews :)
That’s all I have for today. If you have any cool side project ideas, please share them with me! Also, for more details on this topic, check out the video above on my YouTube channel.
Cheers!