I strongly believe that building projects in your time is the best way to improve your craft, whether we are talking in terms of software development or anything else. But before you go out and invest a huge amount of time on a project that uses the new trendy thing, let's start small.
Mo' problems ≠ mo' fun
Typically Software Engineers work on projects that aim to solve a huge problem or need and it is really easy to lose sight of that. Some approaches to developing software create situations where you are just trying to move a near-infinite list of tasks from "todo" to "done". It causes a lot of fatigue as these tasks progress to completing the larger goal, but it doesn't actually feel like it. The amount of satisfaction I get from completing a task on a large project (for example, fixing an issue that caused one of our pipelines to be in-compliant with the new requirements of our organisation) is tiny compared to launching a new project that solves a problem for me or someone else.
I get a lot of satisfaction from solving problems, as I assume most people do. However, when the problems that need solving are so large that they can't be completed in a weekend, it can get tiring to keep working on a problem that never truly gets solved. When I create a personal project, I try to keep the scope small, otherwise, a personal project can balloon into a monster that consumes all of your time 😅. An example of this is my Assistant for No Man's Sky projects, which started out as just an Android * iOS app and now I am managing servers, desktop versions and many many websites around the apps and the No Man's Sky community.
Building from the ground up
When joining a project you are rarely exposed to how the solution was set up, it makes sense but you may be losing out on a lot of useful information for debugging. Maybe your team inherited the project and could not afford the effort to investigate how things work, so now everyone adds --no-verify
to their git commits because otherwise, the linter prevents you from committing your changes.
Setting up a new project is a great way to learn what is possible with your chosen tech stack. It is also a great way to figure out what does not work for you. For example, setting up a comprehensive git commit linting process can be really great for keeping git commits consistent, but it can also be a pain to add support for different operating systems. You can bring these learnings into your client's project and all future projects!
Less F.O.M.O (fear of missing out)
Building many small projects also lets you play work on all the latest trendy tech stacks and frameworks! It is a great way to find out if the hype over something new is really worth it or not and you get to find the similarities between how different frameworks actually work under the hood.
Some of my small projects
Here is a list of some of the small projects that I am quite proud of:
- Poke-xperiment - I wanted to create a Pokémon ~ish simulation where a user could walk around and interact with this world. The world is made out of multiple layers, the assets are all on a sprite sheet and to manage all of this I created a level builder
- RaspAp-Waveshare-Display - I have a small Raspberry Pi Zero with RaspAp running on it. Attached is an e-paper display, so to make use of it I needed to create a script that would make requests to the RaspAp Api and display some stats on the e-paper display
- PokemonTeraRaid - I was playing a lot of Pokémon Scarlet & Violet and wanted a simple way to get a good idea of what types to take into a Tera Raid battle.
- PokemonLivingDex - After playing Pokémon Scarlet & Violet I wanted to collect 1 of each Pokémon and place them into Pokémon Home. I made this website to organise and track the Pokémon I need to collect and have collected.
Conclusion
I get a lot of value from creating small projects, whether they solve a small problem for someone else or just for me, they have been the best way (i.m.o) to learn. I hope that I have made a good case for creating small projects for the purpose of learning and fun! Please reach out to me with your small projects! I would love to see them 😁