The Joy Sparked by Side Projects, 2022 Edition
🎄 December is here! Like every year, it is time to watch Home Alone again and to review the progress I made as a developer over the past 12 months. Side projects contributed the most.
Why side projects are necessary for me
Yes, a paying job is your bread and butter. But having side projects is key to staying ahead of the younger guns of the tech world, flexing your developer muscles in new directions and anticipating what’s next for you at work.
Last year, I started writing a newsletter about soccer/football1 for people based in France. The content is pretty basic. Still, I learned so much just setting it up, running it, and trying to automate as many steps as possible so that each edition would take as little time as possible to write, without compromising the quality of the content.
Things I learned
Here is a non-exhaustive list of the things I trained on last year to run the newsletter, in an approximative chronological order:
- Swift Argument Parser. Writing a CLI in Swift is now my goto solution when I need to write scripts. Including at work. It is so much easier to write, document and maintain than Shell scripts.
- Buttondown. This is an indie tool to bootstrap newsletters. As part of the side project journey, I believe it is worth exploring alternatives to big corporations so I skipped Mailchimp, Mailjet and similar options. While I really like Buttondown, I think the newsletter is now ready to grow out of it, and finding a better option for my needs is on the roadmap for 2023.
- Linode. Similarly, I didn’t want to go the AWS route. And Linode’s interface is much clearer than AWS — though it is not as feature rich. Linode got recently bought by Akamai, so I am not as attached to it as I used to be.
- Terraform. Infrastructure as code. I use it to create server instances, manage DNS for the domain names, create and manage buckets and keys.
- iCalendar RFC. Not the sexiest subject. But I had to reverse-engineer how calendar software behaves to get the newsletter to work the way I wanted. Did you know that the iOS calendar behaves differently if you serve an ICS file with a 2XX HTTP status code than if you serve it via a 3XX? I did not.
- JSONFeed. An alternative to RSS written in JSON.
- Micro.blog. An alternative to Twitter. Duh.
- Modern React web frameworks. I explored Next.js first, then Remix. Both are pretty amazing.
- DocC. The new documentation framework by Apple. I used Jazzy before, but DocC — albeit sometimes awkward to use — is much more complete. As illustrated by Simon Støvring’s talk during FrenchKit 2022, you can create amazing documentation with it.
- Xcode Cloud. First-party CI and automated distribution of apps. It seems to cover some common ground with Fastlane, very convenient to distribute the app I use to run the newsletter on my iPhone and iPad via TestFlight.
- TabularData. A new framework provided by Apple to organize and explore data.
- SwiftUI. I am sure you heard of it already 😉.
- The Composable Architecture. A 3rd-party architecture library that solved all the problems that were holding me back when I first got my toes wet with SwiftUI.
- OR-Tools library. Linear optimization library available in Python among others. Picking the right tools to do the right job is essential. I found this library to act like a Microsoft Excel solver.
Each of these tools would deserve their own post. I shouldn’t run out of inspiration for this blog next year.
The positive impacts on my paying job
🧰 A better set of tools I can use
Part of my job at Memo Bank is to write the iOS app that serves as the 2FA for critical operations. The app does not do much. But the things it does are critical. Our customers depend on it to pay salaries to their employees, pay taxes on time, and be safe with their transactions.
The app was bootstrapped with compatibility going up to iOS 12. Now that I got my hands dirty with SwiftUI and The Composable Architecture on my side projects, I feel comfortable adopting them in the app for upcoming features. That would not have been the case without the time I spent toying with them outside of work. I made many mistakes. I rewrote things multiple times. It is part of learning.
Could this time spent on my free time have been part of the job? Maybe. But I also like not having to be held accountable for anything when I explore and want to play around with new things. I do whatever I want, without having to justify my decisions to anyone else but me. I am in complete control of every decision. Freedom & Fun.
🤗 A greater empathy
“It should be easy, it is just a button.”
— Quite probably my past self, in a self-indulgent micro-agression towards some designer from my team. Who the hell did I think I was?
I wear every possible hat running this newsletter. I am a developer, a product manager, and a designer. I do customer support, manage the infrastructure, etc.
I get a glimpse of the struggles that every job comes with. I get reminded that good design is hard to get right, that keeping an infrastructure up takes effort, that making product decisions is hard. It is a useful humbling reminder that shit is hard to get right.
My tips and life lessons
🧱 Use a monorepo. Over time, I realized that using a monorepo for my projects was much more thrilling than having a million bunny projects with 5 commits each. The feeling of progress is much more satisfying.
🏎 Take shortcuts towards the fun. If you host your code on GitHub, don’t use an organization and don’t open-source what you are doing until you feel ready. For instance, at work, you should never leave secrets in your code. On a side project, why not? If stakes are low, leave the boring required things you write at work behind and sprint towards the fun parts.
⏱ How to find time for it? Any opportunity is good to take. My wife agreed to leave me off kids-duty on Thursday evenings. I try to write a little bit of code everyday, and when you work remotely, the lunch break is ideal for that. Over time, things build up and the output you get from a 5-minute slot grows.
Also, I recommend reading these tips from Antoine van der Lee. They are great to act as a guard rail against uncontrollable impulses to try this new thing. His point is to keep focus, realistic expectations and priorities straight.
Conclusion
Why are you still reading this? Go work on your side project!
-
I won’t discuss which term is best. I can’t put it better than Jason Kottke does: “it’s the sort of debate that 4th graders have on the playground”. ↩