$ cat tooling.md
Tooling
I’m not a logo-list person, but I can tell you what I use, why, and what I’d avoid if I have the choice.
What I reach for by default
Python for almost anything that involves business logic, automation or data processing. It has its issues, but the ecosystem and development speed are hard to beat.
Go when I need something fast, concurrent and with self-contained binaries. It’s tedious to write compared to Python, but the result is predictable and production surprises are fewer.
Docker always. Reproducibility is not optional. If something behaves differently locally than in production, that’s a headache waiting to happen.
Terraform / OpenTofu for infrastructure. IaC without properly managed shared state (remote state, locking) feels irresponsible at any non-trivial scale.
PostgreSQL as the default relational database. Solid, predictable, with capabilities most projects never come close to needing. I switch to something else only when there’s a concrete reason to.
Linux on the server. Not up for debate.
What I use with judgement
Kubernetes when the problem justifies it. If you have three services and predictable traffic, it’s probably overkill. If you’re managing multiple client clusters with different requirements, it makes sense. I’ve operated both scenarios.
Kafka for real streaming and decoupling systems with variable production rates. For a simple queue, there are simpler options.
Elasticsearch when search is a first-class requirement. Not as a database, not as a SQL replacement.
Ansible for machine configuration and bootstrapping. I’ve seen it grow into a hell of roles and variables. I keep it scoped.
What is on my radar
Nix / NixOS for reproducible development environments. The promise is real, the learning curve too.
Temporal for durable workflow orchestration. More solid than reinventing state machines with message queues.
What I avoid when I can choose
Over-engineered stacks for the size of the problem. Microservices when a well-structured monolith works. Premature abstractions that make code harder to understand with no real benefit.
Tools that solve problems I don’t have yet.