I still remember my first on-call shift. It was a Friday night, I was three drinks in, and my phone started buzzing. Production database was down. My heart rate spiked. I had no idea what to do. That’s when I realized — nobody teaches you this stuff. You learn to code. You learn algorithms. But…
Category: Lessons Learned
Why I Stopped Using Docker for Local Development (And What I Use Instead)
I used to Dockerize everything. Every project, every service, every side hustle — straight into a Dockerfile. It felt right. “Works on my machine” solved, reproducible environments, production parity. What could go wrong? Turns out, a lot. At least for local development. The Docker Desktop Tax Docker Desktop is hungry. On my MacBook, it easily…
I Deleted 2000 Lines of Code and Everything Still Worked
Last month I was debugging a feature that should have taken two hours. It took two days. The code was a mess — sprawling functions, nested conditionals, and comments that hadn’t been updated since 2019. I’d had enough. I started deleting. What I Actually Deleted The original module was around 2,400 lines. After my “refactoring…
The Side Project I Abandoned Because It Was Too Well-Built
I spent three months building what I thought was a masterpiece. Clean architecture. Proper separation of concerns. Full test coverage. Everything I learned in my career, poured into this side project. Then I stopped working on it. Not because I got busy. Not because I lost interest. I stopped because it was too damn hard…
I Over-Engineered Everything and It Cost Me More Than I Thought
The Moment I Realized Something Was Wrong I spent three hours designing a “scalable” solution for a feature that would maybe get 100 users. Built a custom caching layer. Created an elaborate state management system. Added metrics and monitoring everywhere. It took two weeks to ship. The feature worked fine. Nobody noticed any of the…
What Debugging Taught Me About Problem Solving
I’ve spent more hours staring at error messages than I’d like to admit. But somewhere along the way, I realized debugging isn’t just about fixing code—it’s about thinking clearly when everything feels broken. The Frustration Is Real You know that feeling. You’ve been debugging for 3 hours. You changed something, broke something else, and now…
I Thought Message Queues Would Fix My Performance Problems – They Didn’t
Here’s a story about the time I over-engineered a simple problem and learned a hard lesson about message queues. What Happened It was 2022. I had an API endpoint that processed user uploads and sent confirmation emails. The endpoint was slow – sometimes timing out when thousands of users uploaded at once. My first thought:…
Why I Stopped Over-Engineering My Side Projects
How It Started As a backend developer, I used to treat every side project like a potential unicorn startup. I’d spin up a microservice architecture, integrate a message broker, add caching layers, and set up CI/CD pipelines — for a project that might never see a production user. It wasn’t just excitement; it was a…
Why I Stopped Over-Engineering My APIs (and What I Learned)
The Early Days of Over-Engineering When I first started building backend systems, I fell in love with architecture diagrams. Hexagonal design, CQRS, event sourcing—you name it, I tried to fit it into every project I touched. It made me feel like I was building something truly scalable and elegant. But in reality, I was creating…
Why I Stopped Over-Engineering My Backend APIs
How It All Started For years, I fell into the classic trap of over-engineering my backend APIs. Every project began with ambition: perfect abstractions, layered architecture, and all the design patterns I had recently read about. It looked stunning in theory, but in practice — the complexity became a nightmare. It wasn’t that these patterns…









