11-26-23Drawbacks of Moving to the Edge
11-03-23Lessons from llama.cpp
10-29-23On Mixing Client and Server
10-28-23Infrastructure as Code Will be Written by AI
10-22-23Retrieval Augmented Generation
10-20-23Pitfalls of File-based Routing
10-17-23The Inner-Platform Effect
10-15-23Why Is the Frontend Stack So Complicated?
10-12-23Nagle's Algorithm
10-07-23Incentives Behind Programming Languages
10-03-23Pitfalls of Database Migrations
10-01-23Lessons From Debugging
09-27-23Is Data Still a Moat?
09-22-23Good Enough Abstractions
09-21-23Automate (But Automate Last)
09-07-23Raft: The Distributed Systems Algorithm
09-03-23Technical Metrics to Track in Engineering Orgs
09-02-23TypeScript Type System Hacks
08-23-23Copy and Paste Libraries
08-14-23Why Tailwind CSS Won
08-07-23Majority Rule Developers
08-02-23Data Versioning
07-29-23Git Merge Strategies and Algorithms
07-15-23Scale to Zero for AI Workloads
07-14-23Stop Overengineering
07-11-23Why Frameworks Fail
07-05-23Avoiding Footguns
07-03-23Myths About ORMs
06-26-23Platform Engineering vs. DevOps
06-23-23What Comes After Kubernetes?
06-19-23Merge Queues
06-02-23Practical Dependency Management for Developers
05-30-23Templating Magic Isn't Free
05-27-23Prompt Engineering is Configuration Engineering
05-23-23The Local Development Story
05-21-23The New Tax on Engineering Against the Grain
05-09-23Why Declarative Build Systems Aren’t Popular
05-07-23On-Demand Package Manager
05-05-23ReLLM: Exact Structure for Large Language Model Completions
05-04-23llm.ts
05-03-23The Python Family of Languages
05-02-23WebGPU and the New OS
04-29-23React Component as the API
04-25-2316 Lessons from the Tanenbaum–Torvalds Debates
04-24-23Tanenbaum–Torvalds Debates, Part 1
04-23-23The ptrace syscall
04-22-23Building a Kernel From Scratch
04-08-23The Path Dependence of YAML
03-31-23Reflections on 10,000 Hours of DevOps
03-28-23Kubernetes as a Dev Tool
03-20-23Framework-Defined Infrastructure
03-19-23The Missing Semester of CS
03-16-23On OpenAI's Kubernetes Cluster
03-13-23On Prompt Injection
03-12-23Local LLaMA on a Mac M1
03-06-23Applications, Services, and Workflows Overload
02-21-23Why DSLs Fail
02-17-23Interfaces for Uncertainty
02-13-23Blurring Language Boundaries
02-07-23Docker Without Docker
02-06-23Applications of Gall's Law
02-04-23Stack Shift
01-30-23The Frontend Bundling Cycle
01-29-23Type-Safe API Calls: tRPC vs. gRPC
01-26-23What Doesn't Fit in Git
01-24-23Workflow Engine Paradigms
01-23-23Prompt Engineering Shouldn't Exist
01-21-23How to Version an API
01-18-23Rebuilding in Rust
01-16-23The Problem with Drag-n-Drop Infrastructure
01-08-23Fine-Tuning an OCR Model
12-22-22Backward Compatibility
12-18-22Vector Search
12-16-22Docker as a DevTool Platform
12-14-22LAION, The Pile, and more datasets
12-13-22Abstracting the Infrastructure
12-10-22An Ideal CI/CD System
12-04-22The Frontend Ouroboros
11-30-22Do Cold Starts Matter?
11-29-22Sharing a Notebook
11-28-22Fuzzy Databases
11-26-22Technical Posts Overview and Roundup
11-22-22Why Do Configuration Changes Cause Outages?
11-17-22Windows Subsystem for Linux
11-13-22LLMs for Code
11-12-22What is a Token? A Technical Explanation
11-09-22What are Containers?
11-04-22Mastering the Command Line
10-29-22Deploy Early, Deploy Often
10-27-22The Inner Dev Loop
10-24-22Kubernetes Interfaces
10-22-22Exploiting Protocols for Fun
10-19-22AI Scaling Laws
10-11-22Why Is NixOS Popular Again?
10-10-22Where Logic Lives
10-07-22eBPF File Watching
10-06-22Reentrancy Attacks
10-05-22Perceptual Hashing
10-01-22The Promise of Write Once, Run Anywhere
09-29-22Thoughts on GitHub Actions
09-23-22Infrastructure Defined Software
09-22-22Tree Shaking
09-21-22Rust, C++, or Carbon?
09-20-22It's Just a Tarball
09-17-22Google Infra For Everyone Else in 2022
09-15-22When To Roll Your Own X
09-13-22GraphQL Trades Complexity
09-12-22TensorFlow vs. PyTorch
09-11-22Recursive-length Prefix (RLP)/Simple Serialize (SSZ)
09-10-22SQLite Doesn't Use Git
09-09-22Materializing Results
09-08-22The Lost Art of System Administration
09-07-22Performance Comes Last
09-06-22Two Approaches to Prompt Engineering
09-05-22WASI vs. WASM
09-04-22Libraries > Languages
08-30-22The Commoditization of Large Language Models: Part 2
08-27-22It's Harder to Read Code Than Write It
08-26-22Developer Platform Table Stakes
08-20-22Webhooks Aren't So Bad
08-19-22The Issues with Buildpacks
08-17-22Tradeoffs in API Design
08-15-22Cloud Native Localhost
08-14-22Towards Granular Compute
08-12-22The Unreasonable Effectiveness of Makefiles
08-10-22Developers Should Deploy Their Own Code
08-07-22Component-driven Markup
08-05-22Will v8 Isolates Coexist With Containers?
08-04-22The End-to-End Principle in System Design
08-02-22Open-Source and Quadratic Funding
08-01-22The New Wave Frontend Toolchain
07-30-22A First-Class Language Package Manager
07-27-22Lisp and Spreadsheets
07-25-22Defensible Machine Learning Model Naming
07-24-22Fault-Tolerant Design
07-23-22Non-Obvious Docker Uses
07-22-22Pull Request is Now the Unit of Review
07-21-22Presentation Next to Code
07-19-22The Quick Uptake of ARM on Cloud
07-18-22Stacked Pull Requests
07-14-22The Story of CP/M
07-11-22The Remix IDE
07-10-22SSH: Less Relevant In the Cloud
07-08-22Smart Contract Immutability
07-06-22How Kubernetes Broke Git
07-05-22Commoditization of Large Language Models
07-04-22What Comes After Git
07-03-22A Look Into My Development Stack
06-29-2216 Bell-Curve Opinions on Engineering
06-28-22History of Version Control Systems: Part 3
06-27-22History of Version Control Systems: Part 2
06-26-22History of Version Control Systems
06-22-22How to Use GitHub Copilot Effectively
06-21-22Least Common Denominator APIs
06-20-22Every Sufficiently Advanced Configuration Language is Wrong
06-18-22Plaintext Protocols
06-17-22Thoughts on RSS
06-14-22Don't Use Kubernetes, Yet
06-09-22Are Platform Teams Dead?
06-05-22Fallacies of Distributed Systems
06-02-22A Napkin Architecture of Ethereum Interfaces for Developers
05-31-22Programming to the Interface
05-27-22ETL vs. Platform Extensibility
05-25-22Text to Image Diffusion Models
05-23-22A Universal Package Manager
05-22-22Smart Contract Language Runtimes
05-21-22A Short Primer on eBPF
05-17-22SQLite Renaissance
05-16-22PaaS Design Principles
05-15-22The Problem of Sharing Code
05-12-22Null Programming Philosophy
05-11-22Future of Passwords
05-10-22Request for Product: Typescript Docker Construct
05-08-22Code Managed Service is Coming For Static Sites
05-07-22Taking on Good Technical Debt
05-06-22Elevator Data Structures and Algorithms
05-03-22Miner Extractable Value
05-02-22{Java,Py}Script
04-25-22Merkle Trees
04-20-22Serverside, or Clientside WASM?
04-15-22Schema-driven Development
04-13-22Accidentally Turing Complete
04-12-22Why So Many Outages?
04-11-22Language Server Protocols
04-10-22Plan9: Everything is (Really) a File
04-05-22Scaling Ethereum: Horizontal/Vertical
04-04-22Zero Knowledge Proofs
04-03-22Configuration-to-Code
04-02-22Engineering Against the Grain
03-31-22$ make docker
03-27-22Elliptic Curve Cryptography for Beginners
03-25-22Build-as-Code
03-23-22SaaS is the New Microservices
03-20-22Embrace. Extend. Extinguish.
03-18-22Developer Velocity
03-17-22API Warfare
03-15-22GitHub Isn't About Code
03-14-22youtube-dl and Google
03-12-22Blockchain Trade-offs: Part 3 – Incentives
03-11-22Blockchain Trade-offs: Part 2 - Privacy
03-10-22Blockchain Trade-offs
03-07-22Environment Parity
03-06-22Wire Protocols and APIs
03-05-22SPAs weren't a mistake
03-04-22Latency Numbers You Should Know (2022)
02-28-22Year 2038 Problem
02-27-22Software Convention in Consistency
02-25-22Squash, Merge, or Rebase?
02-18-22Spectrum of Reproducibility
02-17-22Shodan and Port-Knocking
02-15-22Compiled Configuration Stack
02-12-22Algorithmic Fairness
02-11-22Why TypeScript for Infrastructure?
02-09-22Optimization is Fragile
01-29-22Software Half-Life
01-26-22Source Code Generation
01-25-22The Declarative Trap
01-22-22Software Mullets
01-21-22Embedded DevOps Teams
01-19-22Technical Perfection and Irrelevance
01-18-22Layer Above, Layer Below
01-14-22Code or Issues in DevOps Platform(s)?
01-13-22AWS is Not a Dumb Pipe
01-05-22VPN as a Dev Tool
01-03-22Pair Programming Doesn't Scale
01-02-22Increasing Bus Factor
12-27-21Developer Network Effects
12-23-21Lost Art of Arch Linux
12-22-21Hunting Bugs with Bisect
12-19-21The Real Fix for Log4j Isn't a Patch.
12-18-21Next-Gen Terminals
12-12-21Is Open Source Free Riding Bad?
12-11-21U-Shaped Utility of Monorepos
12-09-21Toolchain Sprawl
12-04-21If It Can Be Compiled, It Will Be
12-03-21Every DevOps Company is an Observability Company
11-30-21On Centralization
11-26-21Netlify, Vercel, and AWS Amplify
11-23-21Shortcomings of Diff3
11-22-21How Git Merges
11-20-21How to Comment Your Code
11-19-21The Terrible UX of Git
11-17-21GitHub's Missing Package Manager
11-16-21The Collision Course of Databricks and Snowflake
11-12-21A Browser for Developers
11-10-21Open Infrastructure
11-09-21Open-sourced GPT-J
11-07-21Where is the Edge?
11-05-21The Next Design Systems
10-27-21Data Planes and Control Planes
10-22-21Scoping Developer Tools
10-21-21IDE as a Platform
10-20-21Agent vs. Agentless Future
10-19-21A Short History of the M1 Chip
10-17-21Alternative Data on Developer Products
10-16-21Top-Down JAMStack vs. Cloud
10-15-21The GitLab Upgrade
10-14-21Takeaways From JetBrain's Developer Survey 2021
10-13-21Templating: When to Move Along the Heptagon
10-12-21Kubernetes in the Data Stack
10-10-21The Tarpit
10-09-21The Changelog Podcast #463
10-08-21Open Source Reckoning
10-06-21What is BGP?
10-05-21The Birth & Death of JavaScript
09-30-21What is RISC-V?
09-26-21Developer Experience
09-25-21Knuth and McIlroy Approach a Problem
09-22-21The Unbundling of the Software Developer
09-21-21The Problems with "Cloud-Prem"
09-19-21Remote Developer Environments are Cool Again (Kind of)
09-18-21Laws of Software Evolution
09-17-21Infrastructure as SQL
09-16-21The Data Stack As a Snowflake
09-15-21How to Calculate a CIDR
09-12-21Frustrations of Modern Development
09-11-21Software Treadmills
09-10-21The End of CI
09-09-21Ten Things I Look For In a Code Review
09-07-21As We Thought
09-01-21An Overview of Docker Desktop Alternatives
08-31-21Your Integration Tests are Too Long
08-30-21SaaS Isolation Patterns
08-29-21Buying IPv4 Addresses
08-26-21Incremental Compilation in Build Systems
08-24-21What Low-Code Lacks
08-23-21Keep Your API Surface Small
08-22-21Nine Circles of Dependency Hell
08-19-21Tracking Cyclomatic Complexity
08-17-21One Month of Using GitHub Copilot
08-16-21DRY Considered Harmful
08-15-21Yak Shaving
08-11-21Growing Your Open Source Project: Part 3 – Users
08-10-21Growing Your Open Source Project: Part 2 – Community
08-09-21Growing Your Open Source Project: Part 1 – Contributors
08-08-21Service Reliability Math that Every Engineer Should Know
08-07-21Coding Classical Latin
08-06-21Confessions of an Internal Tool Builder
08-05-21Unexpected Developer Trends
08-02-21Reflections on 10,000 Hours of Programming
07-30-21How Multiplayer Data Structures Work
07-27-21Kubernetes Maximalism
07-25-21The IKEA Effect in Software Development
07-23-21Functions as a Service
07-20-21Open-Source and Firm-Specific Training
07-19-21In Defense of the Jupyter Notebook
07-18-21Code Poems
07-17-21Ship Thesean Software
07-15-21A Personal Internet
07-14-21Everything is a Graph
07-12-21Package Managers and Developer Productivity
07-10-21GitHub Copilot
07-04-21Makers of Patterns: Part 2
07-03-21Maker of Patterns: Part 1
07-02-21What is WebAssembly?
07-01-21What is MicroSaaS?
06-30-21Jevons Paradox and Software Efficiency
06-27-21Code Transparency
06-26-21Machine Learning Operations (MLOps), Convergent or Divergent?
06-23-21Live Programming
06-19-21The End of Per-node Pricing
06-18-21Software Wants to be Simple
06-15-21Declarative vs. Imperative
06-14-21Diseconomies of Scale at Google
06-05-21The Developer Economy
06-04-21APIs Will Disrupt Rpa. This Is Obvious to Engineers.
06-03-21Organic Cloud Infrastructure
06-01-21Docker Is a Compiler
03-14-21ScapeNet: Real-time object detection in RuneScape
02-03-21Docker Merge
07-08-20Virgo: a Graph-based Configuration Language
02-22-196 Open Source Licenses That You Shouldn't Use
01-10-19An Alternative to the Dockerfile
01-01-19The Heptagon of Configuration
10-22-18Should Your Developers Work in the Cloud?
10-11-18Fast Kubernetes Development with File Sync and Smart Rebuilds
10-06-18Unit Testing with the Kubernetes Client Library