I'm a programmer and I'm stupid

I've been writing code for money for 15 years. I've tried other roles — product management, analytics, testing — but they didn't stick. And over the years, I've learned that I'm pretty dumb. Unfortunately.

I haven't been diagnosed with any specific medical condition, but my mental capacity is very limited. I find even easier Leetcode problems challenging. Reading about a basic consensus algorithm makes my head explode. I can't really follow complex dependencies in a code base. I can't learn a fancy language like Rust (I tried, but honestly, it's too much). I hate microservices and modern frontends because there are so many moving parts, I can't keep track of them all.

So what do I do about it?

I use the simplest mainstream language available (Go) and very basic Python. I write simple (though sometimes verbose) code that is easy to understand and maintain. I avoid deep abstractions and always choose composition over inheritance or mixins. I only use generics when absolutely necessary. I prefer flat data structures whenever possible.

I introduce as few external dependencies as possible (ideally zero1). I design modules with clear APIs (not in a Robert Martin's definition of "clear"), but almost never extract them into microservices. I use JSON-over-HTTP APIs, but never GraphQL. I took the time to learn SQL and use it a lot2. I apply basic resilience patterns like timeouts, circuit breakers, and backpressure.

I try to use as few software components as possible. Ideally, just the application itself, SQLite or PostgreSQL for data storage, and Docker with a sprinkle of shell for deployments. Nginx/HAProxy as needed. No API gateways, no sharding, no distributed caches, no message queues, no NoSQL/NewSQL/Graph/whatever databases, no service discovery, no federation, no cloud native, no FAANG-level best practices.

I draw dependency graphs and sequence diagrams to understand legacy code. I write comments to remind future me why a certain function does what it does, or why a certain if branch is necessary. I write documentation, trying to make it concise and readable. I write examples, lots of them. Sometimes even interactive3.

The software I build seems to work okay. It won't impress a Google engineer, that's for sure. But it serves its users and the business reasonably well.

So being stupid kind of works for me.

 Subscribe to keep up with new posts.