The Tools I Actually Use Every Day as a Developer

My daily tools are not interesting.

That is mostly the point.

I have tried enough shiny workflows to know how quickly tools can become the work. A new editor setup, a new task system, a new terminal theme, a new note app, a new dashboard for the dashboard. It all feels productive for a few hours. Then I still have to do the actual work.

These days I want tools that disappear.

Terminal

The terminal is still the centre of most work.

Git, SSH, Docker, Ansible, Hugo, tests, logs, file movement, quick checks. Most of the useful feedback comes through a shell. It is fast, scriptable, and works the same on small machines, servers, and the Pi cluster.

I do not need it to look clever. I need history, completion, readable output, and commands I can copy into notes when something needs to be repeatable.

The terminal is also where bad assumptions show up quickly. If a deployment needs six careful manual commands, it probably needs a script or a playbook. If I cannot explain the command later, it probably needed a note.

Codium

For editing, I mostly use Codium.

It is familiar, quick enough, and good at the boring things: search, Git diffs, Markdown, project navigation, and small refactors. I do not spend much time tuning it now. A few extensions are useful. Too many extensions turn the editor into another system to maintain.

The main thing I want from an editor is low friction. Open the repo, find the file, make the change, run the check.

Anything beyond that has to earn its place.

Git

Git is not optional background plumbing. It is part of how I think.

Small commits make work easier to review. Clear messages preserve the reason behind a change. Branches give me space to try things without turning the main line into a scratchpad.

I care more about the discipline around Git than any clever Git trick. A good commit message is more useful than remembering an obscure flag I use twice a year.

Browser

The browser is documentation, testing, research, dashboards, and occasionally the thing trying to distract me from all of those.

I keep it boring too. A few pinned tools, docs when needed, and local services while testing. I try not to turn the browser into a second operating system full of tabs I feel guilty about closing.

Tabs are not a knowledge base. If something matters, it goes into the repo, a README, or a blog post.

Docker

Docker is useful because it gives me a repeatable boundary.

For local development, it keeps dependencies contained. For the homelab, it lets services run consistently across machines. Compose is still my default for small things. Swarm is there when the work needs to span multiple nodes.

I try not to pretend containers solve every problem. They do not fix bad storage, missing backups, unclear configuration, or an application that is awkward to run. They just make packaging and runtime behaviour more predictable.

That is still valuable.

Ansible

Ansible earns its place because I forget things.

If a machine needs setup steps, those steps should not live only in my head. A playbook gives me a repeatable path back from failure. It also makes changes reviewable, which matters when the thing being changed is the system that runs the services I rely on.

I do not love YAML, but I do love not rebuilding machines from memory.

Notes and README files

The most useful tool is often a plain text note.

A README that says how to deploy something. A short troubleshooting section. A command that restored a backup. A sentence explaining why a service has a weird setting.

That kind of note saves more time than most productivity apps.

I used to underestimate this. Now I treat documentation as part of the toolchain. Not big formal docs. Just enough context for future me to re-enter the project without swearing at past me.

What I avoid

I avoid tools that create a new habit before they solve a real problem.

That includes task systems with too much structure, note apps that need constant grooming, dashboards I do not check, and development tools that are impressive but fragile.

The question is not “is this tool good?” Lots of tools are good.

The question is:

Will this reduce friction in work I already do?

If the answer is no, I leave it alone.

The stack is boring on purpose

My daily stack is terminal, Codium, Git, browser, Docker, Ansible, and plain notes.

Nothing there is exciting. That is why it works. The tools are not trying to become the project. They help me build, debug, deploy, and remember.

That is all I want from them.