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