While I write about various things I find interesting, specific technical topics tend to be recurring themes. So, as both a way to organize the posts for a future long-form synthesis and for the influx of new subscribers, an overview and roundup of posts I've written over the last two years.
On Docker. One of my areas where I've gone deep technically. Docker is interesting because it solves three different problems – (1) a runtime to execute workloads in a distributed system, (2) a packaging format for production artifacts, and (3) a developer tool.
- Non-obvious Docker uses
- An alternative to the Dockerfile format (code)
- Docker Merge (code)
- Docker as a generalized build system or Docker as a compiler
- Different types of software containers
- An Overview of Docker Desktop Alternatives
On cloud strategy. This is only the iceberg of cloud penetration. There are significant workloads to be lifted from on-premise data centers and net-new use cases. However, all types of dynamics are at play – cost advantages, distribution channels, and developer experience.
- AWS is Not a Dumb Pipe
- Why Did Heroku Fail?
- Low-end AWS Disruption
- The Cloud Cost Era
- The Problems with "Cloud-Prem"
- SaaS Isolation Patterns
- The Cloud Tax Implications
- Cloud Repatriation or Not?
- Cloud Native Localhost
- Don't Be Scared of Cloud Lock-in
- The Quick Uptake of ARM on Cloud
- IaC: Strength or Weakness for Cloud Providers?
On version control, package management, and other software workflows. Shipping code has never been more of a coordination problem. How do you share and reuse code quickly and efficiently? So much happens between a developer writing code and that code making it to production.
- What Comes After Git
- A Universal Package Manager
- GitHub's Missing Package Manager
- History of Version Control Systems: Part 1, Part 2, and Part 3
- Package Managers and Developer Productivity
- Is GitHub a Social Network?
- The End of CI
- Your Integration Tests are Too Long
- Thoughts on GitHub Actions
- GitHub Isn't About Code
- Code or Issues in DevOps Platform(s)?
On WebAssembly. WebAssembly can be useful on the client – as a runtime that opens up the web to other LLVM-based languages. It can also be useful on the server – as a granular runtime that is more lightweight than a container.
- What is WebAssembly?
- Extending Applications with WebAssembly
- WASI vs. WASM
- Serverside, or Clientside WASM?
- Towards Granular Compute
- Will v8 Isolates Coexist With Containers?
- The Promise of Write Once, Run Anywhere
- {Java,Py}Script
- UGC: User-Generated Code
On infrastructure-as-code. As cloud standardizes APIs, we can start to treat infrastructure as code. Of course, this opens up entirely new workflows – embedding infrastructure into CI, easy replication of entire stacks for preview environments, staging environments, reproducible infrastructure, and more. Still, a lot to figure out.
- Infrastructure Defined Software
- Why TypeScript for Infrastructure?
- Infrastructure as SQL
- Request for Product: Typescript Docker Construct
On software configuration. Configuring software is changing due to clouds, runtimes (Docker and WebAssembly), and infrastructure-as-code.
- Virgo: a Graph-based Configuration Language
- The Heptagon of Configuration
- Why Do Configuration Changes Cause Outages?
- Every Sufficiently Advanced Configuration Language is Wrong
- Configuration-to-Code
- So Easy You Could Run It Yourself
On Kubernetes. A complex yet essential part of the software stack. I worked on Kubernetes open-source at Google, so I'm biased. But I like to think that I provide a nuanced view of it.