fafa.dev

OVER THE LAST YEAR

The Layoff Email

On 16 September 2024, I received the layoff email every software engineer dreads. Prior to that date, I had taken notice of something even more disturbing. My passion for writing code had diminished by a lot. Aside this loss of enthusiasm for the craft, I felt cut off from the community and out of sync with the trends. Before starting the search for my next role, I resolved to re-ignite that spark.

I started by making a list of reminders to keep myself grounded during this period. At the top were:

The Motivation For LooP

With a renewed sense of purpose and a lot more free time on my hands, I decided to get back into a routine that let me write code just for the fun of it again. I started doing this and eventually got into the leetcode grind. After doing this for a while, I noticed a problem. While I understood the solutions to the problems I was solving, I struggled to retain these solutions long term because I was moving rather quickly and hardly ever went back to revise.

That realization, along with a couple of tweets I stumbled on, sparked my next project idea. I have long been a fan of personal productivity tools. In 2018, while learning python, I built this small pomodoro timer to help manage my time and boost my productivity. When the idea for LooP came to me, it instantly felt right. I got to work on it after mulling over the idea some more and listing out my reasons for taking it on.

I wanted

For the next two months or so, I worked daily on what I then referred to as "DSA Tracker". Each day taught me something new, not only about the web, but also about how much room I still have to grow as a software engineer.

The Recurse Center

During this period, a friend recommended that I consider joining the Recurse Center(RC) as a way to find like-minded peers that I could learn with. I thought this was a great idea so, I applied and got in. I took a break from LooP shortly after joining RC because the main functionality that I was interested in was complete, albeit a subpar implementation in my opinion. At RC, I spent my days learning alongside my batchmates, diving into C, distributed systems, Golang, WebRTC, and so much more.

Going into RC, I knew I wanted to stretch beyond the familiar. Web app development had started to feel repetitive, so I set my sights on electronics and embedded systems. Another one of my objectives while joining RC was to commit to writing more. This blog is my attempt at honoring that.

At RC, I was fortunate enough to meet a few peers who were deep into hardware. They introduced me to the ecosystem, shared their experiences, and pointed me toward tools like ESP-IDF and other resources that made the world of embedded systems feel more approachable.

I stocked up on a few ESP32 boards and started to spend my weekends surrounded by wires, LEDs, and breadboards. A few months earlier, I had also purchased a 3D printer, inspired by this YouTube video of a custom iPhone dock by designer and maker, Scott Yu-Jan.

I realized during this period that I didn't just want to write software. I wanted to build things, end to end. To make that possible, I needed to learn how to design hardware myself. I started teaching myself 3D modelling with Fusion 360. The learning curve was steep, but with consistent practice, all the pieces started to fit together.

The Remote Controlled Car

Having acquired this new skill, I wanted a challenge. So I decided to build something ambitious. A 3D-printed RC car powered by an ESP32 and driven with a PlayStation 3 controller. I spent a good amount of time researching, trying to piece together what it would take. Slowly, the picture formed. I needed to model the car's chassis from scratch and design a custom PCB to manage it’s power and logic.

Some weeks after I begun modelling the chassis, I attended a Recurse Center presentation on PCB design. That talk lit a fire under me. I almost immediately downloaded KiCad, dove in, and after weeks of tinkering, emerged with my very own PCB design. I felt unstoppable.

A few weeks later, the PCB arrived. By then, I had finished modelling, printing, and assembling the car’s chassis. With everything finally in place, I wired it all up, kept my fire extinguisher within arm’s reach, and held my breath as I connected the power supply.

assembly 1

The good news? Steering worked as expected. The bad news? The motor to run the wheels did not start at all. A few more throttle taps later, an IC on the TB6612FNG motor driver went boom. Undesirable as this was, I can't say I was too surprised. Something almost always goes wrong in V1. Upon further investigation, it turned out that the motor driver could not supply the current required by my DC motor under load. That stung because I was so excited to see my car move, plus I had already integrated the TB6612FNG into my custom PCB. I took it in good faith because it was my own fault for not thoroughly reading the datasheet. I learnt the lesson and continued my research on alternatives I could try.

I soon came across the CYTRON MD10C which, according to it's datasheet (this time read thoroughly), could easily handle my motor’s startup current demands and more. I placed an order for a couple of MD10Cs and waited about a week for them to arrive.

Cytron MD10C

Looping Back

In the meantime, since I had already made a good amount of progress on my hardware project, I shifted my focus back to software. Around that time, a fellow developer showed interest in LooP and suggested a few features that I felt would genuinely improve the experience for users.

This gave me a fresh wave of energy. Until then, LooP had been built primarily to meet my own needs, which left the user experience rough around the edges. Motivated by feedback, I set out to revisit the project and make it more robust.

That meant following best practices, writing proper TypeScript code, adding comprehensive tests, and paying closer attention to the overall user experience. Feel free to check out the project repo to see the progress so far. There are more improvements to come.

Alright, back to the car. The MD10C motor drivers finally arrived. Initially, I thought I would need to design a second PCB with the new motor driver integrated. Fortunately, I had exposed a few of the ESP32 pins via headers on my first board. This allowed me to make the required signal connections between the ESP and the MD10C. The only remaining challenge was how to route power to both the main board and the motor driver. I managed to do this with a screw terminal block I had lying around.

Electronics

The result? It worked flawlessly. The car finally ran as I had imagined and I was over the moon. Even my puppy couldn’t help but be fascinated. Here is a closer look.

As I built this, I learnt a lot about how a proper RC car should be designed and built. Armed with this knowledge, I’m already planning a V2. This time, with proper suspension and differentials for outdoor use as well as a more compact board to reduce the current tangle of wires in the chassis. I also intend to expand the sensor array, stream live telemetry to an onboard OLED display, and maybe even explore autonomous capabilities to make the car smarter and more self-reliant.

All modelled parts, as well as PCB design files can be found in this repository.

What Is Next For Me?

Job Search

After a year, I finally feel ready to begin the search for my next role. This time, I want to be more intentional about the work I take on. It matters to me that I’m contributing to something I genuinely care about. I believe this will bring the absolute best out of me. My current interests are in embedded and distributed web systems, so those will be my main focus areas as I search. Embedded systems roles are not as common, but I’m actively on the lookout. I would also be glad to contribute my skills to any web projects tackling meaningful problems that improve people’s lives in one way or another.

Product

I am more product-driven than ever. I'm keeping my eyes peeled for real challenges that I can build solutions for, and hopefully generate some return along the way. In the meantime, I’ll continue to sharpen my software engineering skills, explore embedded systems deeper, and pursue new hardware projects. I already have a few ideas brewing. The vision isn’t fully formed yet, but I trust it will take shape, and I’m excited to see what comes next.

Lessons Learnt

In hindsight, I realize that my unhappiness at my last job was due, in part, to the following reasons:

These lessons have helped me re-evaluate what job satisfaction truly means to me. It is about solving problems that impact lives positively, learning constantly, and being around people and work that inspire me. From here on, this clarity will guide every career choice I make.

Thank you for taking the time to read this. Going forward, I intend to write more about the things that I build so, do revisit if you enjoyed this. If you would like to connect, feel free to reach out on whichever platform you come across this post. Finally, if you know of any opportunities where my skills might be of value, I would be grateful for a referral.