11-26-23
Drawbacks of Moving to the Edge11-03-23
Lessons from llama.cpp10-29-23
On Mixing Client and Server10-22-23
Retrieval Augmented Generation10-20-23
Pitfalls of File-based Routing10-17-23
The Inner-Platform Effect10-12-23
Nagle's Algorithm10-03-23
Pitfalls of Database Migrations10-01-23
Lessons From Debugging09-27-23
Is Data Still a Moat?09-22-23
Good Enough Abstractions09-21-23
Automate (But Automate Last)09-02-23
TypeScript Type System Hacks08-23-23
Copy and Paste Libraries08-14-23
Why Tailwind CSS Won08-07-23
Majority Rule Developers08-02-23
Data Versioning07-15-23
Scale to Zero for AI Workloads07-14-23
Stop Overengineering07-11-23
Why Frameworks Fail07-05-23
Avoiding Footguns07-03-23
Myths About ORMs06-26-23
Platform Engineering vs. DevOps06-23-23
What Comes After Kubernetes?06-19-23
Merge Queues05-30-23
Templating Magic Isn't Free05-23-23
The Local Development Story05-07-23
On-Demand Package Manager05-04-23
llm.ts05-03-23
The Python Family of Languages05-02-23
WebGPU and the New OS04-29-23
React Component as the API04-23-23
The ptrace syscall04-22-23
Building a Kernel From Scratch04-08-23
The Path Dependence of YAML03-28-23
Kubernetes as a Dev Tool03-20-23
Framework-Defined Infrastructure03-19-23
The Missing Semester of CS03-16-23
On OpenAI's Kubernetes Cluster03-13-23
On Prompt Injection03-12-23
Local LLaMA on a Mac M102-21-23
Why DSLs Fail02-17-23
Interfaces for Uncertainty02-13-23
Blurring Language Boundaries02-07-23
Docker Without Docker02-06-23
Applications of Gall's Law02-04-23
Stack Shift01-30-23
The Frontend Bundling Cycle01-26-23
What Doesn't Fit in Git01-24-23
Workflow Engine Paradigms01-21-23
How to Version an API01-18-23
Rebuilding in Rust01-08-23
Fine-Tuning an OCR Model12-22-22
Backward Compatibility12-18-22
Vector Search12-16-22
Docker as a DevTool Platform12-13-22
Abstracting the Infrastructure12-10-22
An Ideal CI/CD System12-04-22
The Frontend Ouroboros11-30-22
Do Cold Starts Matter?11-29-22
Sharing a Notebook11-28-22
Fuzzy Databases11-17-22
Windows Subsystem for Linux11-13-22
LLMs for Code11-09-22
What are Containers?11-04-22
Mastering the Command Line10-29-22
Deploy Early, Deploy Often10-27-22
The Inner Dev Loop10-24-22
Kubernetes Interfaces10-22-22
Exploiting Protocols for Fun10-19-22
AI Scaling Laws10-11-22
Why Is NixOS Popular Again?10-10-22
Where Logic Lives10-07-22
eBPF File Watching10-06-22
Reentrancy Attacks10-05-22
Perceptual Hashing09-29-22
Thoughts on GitHub Actions09-23-22
Infrastructure Defined Software09-22-22
Tree Shaking09-21-22
Rust, C++, or Carbon?09-20-22
It's Just a Tarball09-15-22
When To Roll Your Own X09-13-22
GraphQL Trades Complexity09-12-22
TensorFlow vs. PyTorch09-10-22
SQLite Doesn't Use Git09-09-22
Materializing Results09-07-22
Performance Comes Last09-05-22
WASI vs. WASM09-04-22
Libraries > Languages08-26-22
Developer Platform Table Stakes08-20-22
Webhooks Aren't So Bad08-19-22
The Issues with Buildpacks08-17-22
Tradeoffs in API Design08-15-22
Cloud Native Localhost08-14-22
Towards Granular Compute08-07-22
Component-driven Markup08-01-22
The New Wave Frontend Toolchain07-27-22
Lisp and Spreadsheets07-24-22
Fault-Tolerant Design07-23-22
Non-Obvious Docker Uses07-21-22
Presentation Next to Code07-19-22
The Quick Uptake of ARM on Cloud07-18-22
Stacked Pull Requests07-14-22
The Story of CP/M07-11-22
The Remix IDE07-10-22
SSH: Less Relevant In the Cloud07-08-22
Smart Contract Immutability07-06-22
How Kubernetes Broke Git07-04-22
What Comes After Git07-03-22
A Look Into My Development Stack06-21-22
Least Common Denominator APIs06-18-22
Plaintext Protocols06-17-22
Thoughts on RSS06-14-22
Don't Use Kubernetes, Yet06-09-22
Are Platform Teams Dead?06-05-22
Fallacies of Distributed Systems05-31-22
Programming to the Interface05-27-22
ETL vs. Platform Extensibility05-25-22
Text to Image Diffusion Models05-23-22
A Universal Package Manager05-22-22
Smart Contract Language Runtimes05-21-22
A Short Primer on eBPF05-17-22
SQLite Renaissance05-16-22
PaaS Design Principles05-15-22
The Problem of Sharing Code05-12-22
Null Programming Philosophy05-11-22
Future of Passwords05-07-22
Taking on Good Technical Debt05-03-22
Miner Extractable Value05-02-22
{Java,Py}Script04-25-22
Merkle Trees04-20-22
Serverside, or Clientside WASM?04-15-22
Schema-driven Development04-13-22
Accidentally Turing Complete04-12-22
Why So Many Outages?04-11-22
Language Server Protocols04-04-22
Zero Knowledge Proofs04-03-22
Configuration-to-Code04-02-22
Engineering Against the Grain03-31-22
$ make docker03-25-22
Build-as-Code03-23-22
SaaS is the New Microservices03-20-22
Embrace. Extend. Extinguish.03-18-22
Developer Velocity03-17-22
API Warfare03-15-22
GitHub Isn't About Code03-14-22
youtube-dl and Google03-10-22
Blockchain Trade-offs03-07-22
Environment Parity03-06-22
Wire Protocols and APIs03-05-22
SPAs weren't a mistake02-28-22
Year 2038 Problem02-25-22
Squash, Merge, or Rebase?02-18-22
Spectrum of Reproducibility02-17-22
Shodan and Port-Knocking02-15-22
Compiled Configuration Stack02-12-22
Algorithmic Fairness02-09-22
Optimization is Fragile01-29-22
Software Half-Life01-26-22
Source Code Generation01-25-22
The Declarative Trap01-22-22
Software Mullets01-21-22
Embedded DevOps Teams01-18-22
Layer Above, Layer Below01-13-22
AWS is Not a Dumb Pipe01-05-22
VPN as a Dev Tool01-03-22
Pair Programming Doesn't Scale01-02-22
Increasing Bus Factor12-27-21
Developer Network Effects12-23-21
Lost Art of Arch Linux12-22-21
Hunting Bugs with Bisect12-18-21
Next-Gen Terminals12-12-21
Is Open Source Free Riding Bad?12-11-21
U-Shaped Utility of Monorepos12-09-21
Toolchain Sprawl11-30-21
On Centralization11-26-21
Netlify, Vercel, and AWS Amplify11-23-21
Shortcomings of Diff311-22-21
How Git Merges11-20-21
How to Comment Your Code11-19-21
The Terrible UX of Git11-17-21
GitHub's Missing Package Manager11-12-21
A Browser for Developers11-10-21
Open Infrastructure11-09-21
Open-sourced GPT-J11-07-21
Where is the Edge?11-05-21
The Next Design Systems10-27-21
Data Planes and Control Planes10-22-21
Scoping Developer Tools10-21-21
IDE as a Platform10-20-21
Agent vs. Agentless Future10-19-21
A Short History of the M1 Chip10-16-21
Top-Down JAMStack vs. Cloud10-15-21
The GitLab Upgrade10-12-21
Kubernetes in the Data Stack10-10-21
The Tarpit10-09-21
The Changelog Podcast #46310-08-21
Open Source Reckoning10-06-21
What is BGP?10-05-21
The Birth & Death of JavaScript09-30-21
What is RISC-V?09-26-21
Developer Experience09-21-21
The Problems with "Cloud-Prem"09-18-21
Laws of Software Evolution09-17-21
Infrastructure as SQL09-16-21
The Data Stack As a Snowflake09-15-21
How to Calculate a CIDR09-11-21
Software Treadmills09-10-21
The End of CI09-07-21
As We Thought08-30-21
SaaS Isolation Patterns08-29-21
Buying IPv4 Addresses08-24-21
What Low-Code Lacks08-23-21
Keep Your API Surface Small08-22-21
Nine Circles of Dependency Hell08-19-21
Tracking Cyclomatic Complexity08-16-21
DRY Considered Harmful08-15-21
Yak Shaving08-07-21
Coding Classical Latin08-05-21
Unexpected Developer Trends07-27-21
Kubernetes Maximalism07-23-21
Functions as a Service07-18-21
Code Poems07-17-21
Ship Thesean Software07-15-21
A Personal Internet07-14-21
Everything is a Graph07-10-21
GitHub Copilot07-04-21
Makers of Patterns: Part 207-03-21
Maker of Patterns: Part 107-02-21
What is WebAssembly?07-01-21
What is MicroSaaS?06-27-21
Code Transparency06-23-21
Live Programming06-19-21
The End of Per-node Pricing06-18-21
Software Wants to be Simple06-15-21
Declarative vs. Imperative06-14-21
Diseconomies of Scale at Google06-05-21
The Developer Economy06-03-21
Organic Cloud Infrastructure06-01-21
Docker Is a Compiler02-03-21
Docker Merge01-10-19
An Alternative to the Dockerfile01-01-19
The Heptagon of Configuration