I've built a lot of developer tools (minikube and skaffold to name a few). But I'm often asked – what does my personal development stack look like?
Hardware: The M1 Macbooks are fast. At the same time, I miss my Arch Linux and i3 tiling window manager, my day-to-day consists of a lot more than just coding (emails, spreadsheets, docs, calls). I don't want to spend time maintaining my snowflake Linux distro (although I keep around an Arch server in my closet with a few GPUs for training the occasional model.
Platform/Architecture: ARM isn't bad – most of my deployments target linux/arm64, which I cross-compile in Docker Desktop. Even though I helped build minikube, I don't have the time to debug issues anymore, so I use Docker Desktop.
IDE: I use Visual Studio Code. It's lightweight, language-agnostic, and simple to use. Writing plugins isn't intuitive, but I've written some simple ones to add automation to frequent tasks.
Git Flow: I use skaffold to have a "docker-compose"-like experience for all my projects. Using skaffold dev
gives me an instant hot-reloaded environment for all my services – backend, frontend, databases, messages queues, and more. Although most of the time, I choose to only develop on a few services and route the rest to a development environment in the cloud.
I use GitHub Actions for CI/CD – often reusing similar logic that I've bundled into Makefiles (dating myself). For deployment, I use AWS CDK to deploy most of my projects – for pet projects done manually and for more serious projects done through GitHub Actions.
Network/Database: I use Tailscale to connect my personal machines as well as as a router to my VPCs hosted in AWS. I used to use Headscale, but I mostly don't want to deal with it anymore.
For development or just general tinkering, I make extensive use of SQLite. It solves non-concurrent state management for the majority of things. Sometimes I even use it in integration tests suites, but I've been burned with that before. The best part is that it can usually easily be shifted around – scp
it to a different machine, check it into version control with git lfs
or put it in S3.
VS Code even has a lightweight SQLite table UI plugin that you can use to query right next to your code.