Every few months someone asks me what tools I use, usually after seeing something I've built. I always hesitate because the honest answer is boring and the interesting answer would be a lie. So here's the honest one.
Editor
VS Code with about six extensions. Vim keybindings (VSCodeVim), ESLint, Prettier, GitLens, and a theme called Catppuccin Mocha that has been on my screen so long it's become invisible. I've tried Neovim twice. Both times I lost more time to configuration than I saved in editing speed. VS Code works. The iteration speed of switching tools has a real cost.
Terminal
Windows Terminal on Windows (obviously), with a WSL2 Ubuntu instance for everything that matters. I do not use PowerShell for development work except when I have to. Fish shell for interactivity, Bash for scripts because I don't want my scripts to require Fish. Starship prompt because it shows me what I need — git branch, exit code, whether Node or Python is active — without asking me to configure much.
# ~/.config/starship.toml
format = """
$directory$git_branch$git_status$nodejs$python
$character"""
[character]
success_symbol = "[❯](bold green)"
error_symbol = "[❯](bold red)"
[directory]
truncation_length = 3
truncate_to_repo = falseDatabase GUI
TablePlus for MySQL and PostgreSQL. I used DBeaver for a while. TablePlus is faster to open, faster to query, and the UI doesn't feel like a Java application from 2008. Worth the price.
API testing
Mostly just the terminal. curl with jq for quick checks. For anything involving a session or complicated auth flow I'll open Bruno — an open-source alternative to Postman that stores collections as plain files in your repo, which means they show up in git diff and work with your existing tooling. I switched to it about a year ago and haven't looked back.
Monitoring
UptimeRobot for uptime checks (free tier covers everything I need), Grafana Cloud for dashboards, and a Telegram bot for alerts. The bot integration is maybe ten lines of bash. I get a message when a server disk fills up, when a site goes down, and when a server's load average spikes. Three checks. They're enough.
The best monitoring setup is the one that pages you when something is actually wrong and is silent the rest of the time. Alert fatigue is real and it will eventually train you to ignore your own alerts.
The one thing I wish more people used
Git aliases. Most people type full git commands by hand. I have `git st` for status, `git lg` for a readable one-line log, `git uncommit` for undoing the last commit without losing the changes. Each alias saves maybe two seconds. Across a day of active development, that adds up to nothing measurable. But it reduces friction, and reducing friction matters for flow.
[alias]
st = status --short --branch
lg = log --oneline --graph --decorate --all -20
uncommit = reset --soft HEAD~1
aliases = config --get-regexp aliasNone of this is novel. If you came here hoping to discover some secret tool that would change how you work, I'm sorry. The secret is using fewer tools, knowing them well, and being honest about what you actually open versus what you tell people you use.