Opinionated, long-form narrative writing with an agenda
Loose notes on things I don't entirely understand yet
A catalogue of design patterns gathered from observation and research
Interesting links, papers, and tiny thoughts
Conference talk slides, transcripts, and videos
Podcast episodes I've been a guest on
Books I've read and recommend
Books I like the idea of having read
I am making this website. This is the first entry. I might add some back-dated ones later.
Frontend Forward, Seattle
Why shared artefacts beat clever instructions when humans and models work together
A lovely little write-up on how vibe code and legacy code are roughly the same thing: code that nobody understands...
The original 1989 paper still reads as a better description of how cross-functional teams actually coordinate than most...
Loose notes on keeping a running log of what I read and why it changed my writing
AI Engineer Europe, London
Tooltips and popovers without a single line of JavaScript. I have been waiting for this for about a decade...
UX Brighton, Brighton +2
Changelog
The technical layer is easy. The agreement between people is the hard part
A tiny thought: the constraint of a page I cannot resize forces decisions that an infinite canvas lets me defer forever...
An old paper that deserves a second life now that every product ships with a model inside it...
A note on planning fallacy, buffers, and the social function of a deadline
Rereading this fifteen years later. Almost everything it warned about happened, and almost none of the remedies were tried...
On notification fatigue, ambient signals, and the case for tools that respect your attention
Syntax
What survived contact with real users and what quietly got dropped
On agreeable assistants, flattery, and the case for more intellectually challenging companions
What changed, what broke, and what I would never hand to a model again
Chat boxes make everything possible and nothing obvious
Design Details
On the asymmetry of attention, memory, and accountability
Why I stopped publishing to timelines and started tending a slow, imperfect collection of notes
An amateur ethnography of the fifteen-minute ritual
Strange Loop, St. Louis
Future of Coding
Creating a subtle, peripheral, and synchronous sense of shared space on the web
Declarative systems reward a different kind of thinking
The most successful end-user programming environment ever built, and what we keep failing to learn from it
Notes on who command palettes are really for
Shop Talk Show
On making the invisible machinery of software visible enough to argue with
Giving people a visible, useful trail of where they have been over an exploratory journey
A loose argument for writing the README first
IndieWebCamp, Portland +1
Building toward the thing you can show someone on Friday
Software Engineering Daily
Shareable, browser-based documents that can compute and run code
Treating every input field as a question you are asking a stranger
Applying interaction design principles to the most expensive software your company runs: people talking
If language models can drive any screen, what is left for a designer to design?
Notes on vocabulary, metaphors, and the words that leak into the interface
How snippets, templates, and boilerplate quietly shape what we think is possible to build
Command bars you can summon from anywhere with a keyboard shortcut
JS Party
Small areas within a graphical interface where users can read and write simple programmes
Why I download everything I intend to read and what it does to my attention
JSConf, Berlin
Latency is not always a bug. Sometimes it is the only thing giving you room to think
On the joy of writing software that only has to work for you
People reappropriating existing software for purposes it was never designed for
A newly revived philosophy for publishing personal knowledge on the web
Metamuse
Revealing complexity only as someone demonstrates they are ready for it
Notes from five years of publishing half-formed ideas on the open web
Making every action reversible so people can explore without fear
Defining terms where they appear instead of sending people to a glossary
Showing where collaborators are looking and working in real time
Pretending an action succeeded before the server agrees, and recovering gracefully when it does not
Using the moment before any data exists to show people what the tool is for