The value of side projects

Do you know that feeling when you receive a renewal reminder for an abandoned side project domain? I just got one again for Sweatmaps and decided to pull the plug. While Sweatmaps may be abandoned, at least I shipped it—something I can’t say about most of my side projects.

After reviewing my domains, I realized how many projects I started and abandoned over the past year. I don’t feel guilty, though.

Home Automation & BuzzWithMe

In late 2023, I built two projects in Elixir. One focused on some home automations for myself, and the other was a quiz-style game called BuzzWithMe, inspired by Jackbox Games. I wanted to experiment more with LiveView and dive deeper into Elixir and GenServers.

Using LiveView for the home automation project was fantastic because I shipped it quickly. However, for BuzzWithMe, things got tricky. Maintaining a LiveView process for each user was harder than I expected. Testing GenServers came with some pitfalls, and I found myself missing the efficient syntax of RSpec for writing tests. I also missed good UI component libraries.

The home automation project still successfully runs on my home server. For BuzzWithMe I was able to build a lobby that each player can join and then start the game to answer questions. But by January 2024, I no longer continued working on it.

MealBuddy

Like every January, I set a goal to lose some weight. I’ve learned the hard way that exercise alone doesn’t make up for a poor diet. To optimize our meal prep, it would be great to plan recipes ahead based on calories. Most of our grocery shopping list is based on Thermomix recipes, so this should be easy. But as good as the Thermomix app is, it can’t filter by calories. And so, my new side project, MealBuddy, was born.

This time, I chose the “one-person framework” with “all batteries included” — Rails. Even though Rails is my day-to-day tech stack at GitLab, it’s valuable to start from scratch again. I haven’t explored Hotwire yet, so this was my chance to give it a try.

First, though, I needed to tackle a different problem: scraping all the Thermomix recipes. With some TypeScript and Playwright, it was fairly straightforward, and gave me a chance to use Bun. What a fantastic developer experience! Sometimes, I’m a bit jealous of the JavaScript ecosystem.

Anyway, I built the Rails app to import all the recipes, using SolidQueue to try an alternative to Sidekiq. When building the search and calorie filter, I saw Hotwire’s potential, but it felt odd. Less intuitive than LiveView and lacking in documentation. Eventually, I abandoned this project too. I still love the name MealBuddy, though.

PostClub

After these side projects, I found myself struggling with fullstack frameworks. Coming from a frontend development background, it was challenging to build a mental model around some of the abstractions. However, separating the backend and frontend brings up the question of which API to use — REST or GraphQL.

This leads me to my newest side project – PostClub, where we’re using Remix for the frontend and Rails for the API. We chose REST over GraphQL because it was just so much easier to deal with. The REST API client is generated from the Swagger documentation, which gives us a fully typed API.

For deployment, we used Kamal to see if it lives up to the hype. It works, but so far I’m struggling with the sparse documentation.

This side project is not abandoned at all, and I hope to tell you more about it soon.

Conclusion

As I progress further in my career, it’s harder to learn and explore in my day-to-day job. Also, many of the problems at work that I need to solve aren’t even technical ones. Side projects allow me to explore, build, learn, and fail without deadlines or restrictions.

You’ll learn a lot that will help you in your career while having fun building. So: build side projects. They are valuable!