posts

Writings and notes, strong opinions loosely held. Newest first. Older stuff is rougher; I’m leaving it up anyway.

# 2026
Apr 23 How to make SSE token streams resumable, cancellable, and multi-device 9 min
Apr 20 All your agents are going async 8 min
Feb 28 You are the bottleneck #ai #agents #dev 4 min
Feb 24 If code is cheap, intent is the currency #dev #ai 6 min
Feb 11 A chatbot's worst enemy is page refresh #ai #system-design 7 min
Feb 9 Only use agents for tasks you already know how to do #ai #agents 3 min
# 2025
Nov 27 SSE sucks for transporting LLM tokens #realtime #ai 5 min
Nov 15 So you want to build AI agent group chat? #ai #system-design 4 min
Feb 6 Patterns for building realtime features #realtime #dev 6 min
# 2024
May 3 Phone call asymmetry #gripes #comms 2 min
Apr 30 Every programmer should know #dev 1 min
# 2023
Nov 23 How to adopt Realtime updates in your app #realtime #system-design 7 min
Nov 16 You don't need CRDTs for collaborative experiences #collaboration #system-design 7 min
Nov 4 Giving up my smartphone - Duoqin F22 Pro #hardware #tools 5 min
Oct 20 Do developers really want to give over their data? #database #dev 2 min
Oct 5 So you want to build Miro and Figma style collaboration? #system-design #dev #collaboration 6 min
Aug 23 Streaming data aggregation #system-design 10 min
Aug 17 The egg test: a model for reversible and irreversible decision making #mental-model 2 min
Aug 8 Standard lib structured logging in Go 1.21 #go #dev 6 min
Jul 31 So, you want to deploy on the edge? #database #data #sqlite 10 min
Jul 10 Theory of a program #dev #software 2 min
Apr 3 Radical and incremental change #software #mental-model 5 min
Feb 17 Writing confidently with ChatGPT 4 min
# 2022
Nov 22 Backend for the Frontend, and incentives #dev 4 min
Oct 10 Aggregates: one piece of code design 4 min
Aug 2 Please don't write "point of view" #writing #gripes 3 min
Jul 29 Debugging Linkerd for mislabelled route metrics 8 min
Jun 25 Addicted to on-call 3 min
Jun 20 Tragedy of the codebase commons #mental-model 5 min
Jun 9 Consistently executable interviews 3 min
May 19 usable java setup vim #vim #tools #java 4 min
May 12 docker login error on m1 #dev #docker 1 min
May 3 power distance in comms #comms #feedback #mental-models 2 min
Apr 27 penduluming #mental-models 3 min
Apr 25 santander cycles app 1 min
Mar 18 email workflow 3 min
Jan 31 change the battlefield #mental-model 7 min
Jan 18 focus on what is, then what to do about it #comms 3 min
Jan 14 when to share your mental model #mental-model #comms 2 min
Jan 10 who wrote this shit? #learning 2 min
Jan 5 connecting the dots requires listening #team 3 min
# 2021
Dec 21 product ideation is dysfunctional #gripes #product 4 min
Nov 23 bridge the gap in differences, with the right language #comms 2 min
Oct 29 positive and negative freedoms #team #comms #mental-model 3 min
Oct 21 failure demand #mental-model #mvp 4 min
Oct 18 don't design a system to avoid a component you don't understand #system-design #mental-model 1 min
Oct 7 vuepress search h4 #tools #dev 1 min
Sep 24 know your frogs 🐸 #mental-model 2 min
Sep 6 habit tracker #habits 2 min
May 25 explain using analogies #mental-model #team #comms 4 min
Mar 15 prefer regular adhoc meetings #meetings #team 3 min
Mar 2 notion: set full width off 🙏 #notion #gripes 2 min
Feb 16 object storage pricing #tools #dev 2 min
Feb 12 time complexity #dev 5 min
Jan 5 custom annotation naming #dev 1 min
Jan 4 estimate, predict, forecast #team #delivery #mental-model 3 min
# 2020
Dec 8 mfa key recovery #mfa #tools 2 min
Dec 4 inclusion #team 1 min
Oct 5 naming is hard #software #dev 2 min
May 28 syncthing #tools 5 min
Apr 15 hyperoptic ipv6 #internet #ipv6 2 min
Apr 9 video conferencing #tools #comms 3 min
Mar 26 what makes a good software engineer? #dev 7 min
Mar 22 pr checklist #checklist #code 4 min
Mar 2 mvp service level objectives #decision #design-patterns #product #software #mvp 3 min
Feb 17 beware anecdotal evidence #decision #team 2 min
Jan 29 data modelling in saas apps #dev 6 min
Jan 20 effectiveness as an engineer #team #dev 2 min
Jan 16 brooks law, hierarchy, and async comms #team #comms 3 min
# 2019
Dec 11 experienced engineers pattern match 3 min
Nov 26 short vs. long lifetime structs #code 6 min
Oct 27 go 1.13: errors.As(...) #go #dev 2 min
Jun 20 the power and danger of consistency #team 5 min
May 2 high performing teams burnout together #team 2 min
Apr 29 metrics for team contributions #git 2 min
Apr 26 kubernetes generated names #kubernetes 2 min
Apr 11 docs requirements #dev #git 2 min
Mar 29 git: co-authored by #git 3 min
Mar 25 micromanagement #team #gripes 3 min
Mar 25 go get private repo #go 1 min
Mar 20 Keeping a logbook with vim #vim #dev 4 min
# 2018
Dec 16 2018: reading list #list #dev #books 4 min
Nov 25 the cost of extrinsic motivators #team #mistakes #learning 4 min
Oct 27 options make decisions #dev 3 min
Sep 20 Limitations of EKS #kubernetes 3 min
Sep 4 go concurrency correctness #go #design-patterns 7 min
Aug 29 proverb driven development #dev #mental-models 4 min
May 13 go's anonymous functions in loops #go #mistakes 6 min
Apr 20 programming mental models #learning #dev #mental-model 5 min
Mar 14 working with me #dev #learning 3 min
Feb 25 go ast got visitor pattern wrong #go #design-patterns #gripes 5 min
Jan 6 libraries considered harmful #dev #gripes #mistakes 6 min
# 2017
Dec 19 slack @here is bad for your team #team #gripes #slack 2 min
Nov 13 mastering golang taught me java #go #learning 7 min
Jul 15 on meetup talks #dev #learning 4 min
May 28 building blocks of go services #go #dev 5 min
May 18 function as an interface #go #design-patterns 2 min
May 10 golang gotchas #go #mistakes 6 min
Apr 24 structs and named types #go #design-patterns 4 min
Apr 14 deepend #learning #dev 4 min
Apr 5 patterns in go #design-patterns #go 5 min
Mar 26 developer abc #dev #learning 3 min
Mar 20 downtime #learning #dev 2 min
Mar 15 don't fear the junior engineer #learning #dev 3 min
Mar 9 hello world 1 min