Writing
Notes from the work.
- Product
It's Time to Change the Way We Consume Music
Streaming solved access and broke almost everything else: discovery, ownership, and how artists get paid. My opinions, from someone who spent years designing and building listening experiences at Pandora and now works on royalty data.
Music · Product7 min read
- Product
The Coming Intranet
The open web is splitting into gated pockets: robots.txt walls, login walls, paid APIs and private licensing deals. What the data shows, where it complicates the story, and what builders and readers should do about it.
Open web · AI · Data · Business8 min read
- Engineering
The Consolidation of Code Over Time
Codebases don't stay sprawling forever. Given enough years, they converge or they die. What one product's repos taught me about monorepos, deleting more than you add, and why the best month of a codebase can be the month it gets smaller.
Architecture · Codebases · TypeScript · Leadership7 min read
- Leadership
The Snake Eating Its Tail: Growth at All Costs, and What Builders Can Do
When growth becomes the goal rather than the result, companies start consuming the things that made them worth growing: their products, their customers' trust, and their people. How that shows up inside product and engineering orgs, and the small, practical ways builders can push back.
Leadership · Product · Business7 min read
- Leadership
The Tech Job Exodus Isn't New: When Opening the File Stopped Being Enough
Around 2012 and 2013, knowing how to operate the tools stopped being enough to hold a job on the web. You had to be able to build. The AI shift feels like that again, only faster. What I saw then, what's different now, and what I'd do about it.
Careers · AI · Front-end · Leadership6 min read
- Product
Why Music Money Gets Lost at the Border
A song can be streamed in dozens of countries and still pay its writer almost nothing, not because nobody owes them, but because the money can't find them. A follow-up to my music post, on metadata, registrations and why global catalogues leak royalties.
Music · Data · Product5 min read
- Product
The Schema Is the Skeleton, the Network Is the Bloodstream
Building software keeps getting cheaper. What stays scarce is a clean, modular data model and an existing web of customers, partners and channels that will carry the product. Why I think that pairing is the nucleus of most winning formulas, and what the research says.
Architecture · Data · Business · Product9 min read
- Engineering
Don't Install Yesterday's Release
Most malicious package releases are caught within hours. A one-day waiting period before installing anything new costs almost nothing and sidesteps a whole class of supply-chain attacks. Here's how I set it up, and where the exceptions go.
Security · Infrastructure · Next.js6 min read
- Delivery
One Command to a Running App
A setup guide with twenty steps is a list of ways to fail. I've started treating 'clone, run one command, see the app' as a feature of every codebase. Here's what goes into that command, and the design choices that make it possible.
Delivery · Infrastructure · Codebases6 min read
- Engineering
Fail Closed, Capture Before You Act
Two rules sit at the center of a governance runtime I've been building: when in doubt, the answer is no, and the record is written before anything happens. Here's what they mean in practice, and why they matter more as agents start taking real actions.
Architecture · Security · Agents7 min read
- Leadership
Write Down Why, Not Just What
A decision log tells you what was chosen. A decision dossier tells you why, what was rejected and what it costs. Here's the format I use, and the bug it found that every other document had missed.
Product · Architecture · Leadership6 min read
- Product
Shipping a Real Product in 24 Hours
Why I still build products against a one-day clock, and the habits that make it work: cutting scope hard, using the same stack every time, letting agents do the heavy lifting, leaning on a design system, and agreeing on what 'done' means before I start.
Product · Prototyping · Agents · Design systems8 min read
- Engineering
Nothing Goes Live Because It Exists
In my agent rig, prompts, routes, skills and even fine-tuned models all start in shadow. Promotion is a separate, evidence-backed step that a person takes. Here's the lifecycle, and why it matters more as the number of moving parts grows.
Agents · AI · Local LLMs · Delivery6 min read
- Projects
The Stealth Build: Cleaning HL7 and C-CDA Before Anyone Trusts It
For months I've been quietly building a pipeline that takes raw HL7 v2 messages and C-CDA documents, repairs them, maps their codes to standard vocabularies, and turns them into FHIR and OMOP. Why healthcare interop data is so messy, and the approach that's working.
Healthcare · Interoperability · Data · AI8 min read
- Projects
A Terminal as a Portfolio
I rebuilt mg.design as an interactive terminal. You type commands, it answers. Here's why a hard constraint like "it's a terminal" made the design easier, not harder, and what it takes to make a fake shell feel real in the browser.
Front-end · Next.js · Prototyping5 min read
- Engineering
The Art of the Rock Tumbler: Polishing Loops for Code and Agents
A rock tumbler doesn't make a stone smooth in one pass. It uses coarse grit, then finer grit, then polish, and checks between stages. That's how I build agent loops in Starship: bounded retries, deterministic gates, and lessons that are only allowed to hurt once.
Agents · AI · Architecture · Delivery7 min read
- Engineering
Why I Run My Own Model Fleet
Starship runs its coding and planning agents on a small fleet of Apple Silicon Macs I own. Here is when local models beat the cloud, what it cost me in operational lessons, and where I still reach for a hosted model.
AI · Agents · Architecture · Local LLMs6 min read
- Engineering
The Agent Loop That Ships Its Own Code
How Starship's coding agents go from a planned task to a merged pull request without a human driving each step, and the gates, retries and postmortems that make that safe to leave running.
AI · Agents · Architecture · Delivery6 min read
- Engineering
Skills, Standards and Context: What My Agents Know, and How Fresh It Is
A coding agent is only as good as what it's handed. Here is how Starship curates its skill library, enforces standards, and keeps the context it feeds models grounded and current, including where that loop was still open.
AI · Agents · Architecture · Local LLMs6 min read
- Engineering
A Heartbeat Instead of a Job Framework
My healthcare pipeline's ingestion runs on a two-minute heartbeat, a claim-and-enqueue sweep and a stateless worker. It's less clever than a job framework, and that's why I trust it.
Architecture · Infrastructure · Data6 min read
- Engineering
Find the Ceiling Before You Tune
I spent a lot of time tuning a pipeline worker before doing five minutes of arithmetic. The real throughput ceiling wasn't in the code. It was a regional CPU quota. Here's what I'd do first next time.
Infrastructure · Data · Architecture6 min read
- Engineering
Faster Runtime, Identical Verdict
Performance work on a data pipeline is only safe if it can't change the answers. Here's how golden files and output-equivalence gates let me speed up a clinical pipeline without moving a single score.
Data · Architecture · Delivery · Healthcare6 min read
- Design
A Quiet Brand in Ten Tokens
For the Midwest site I wanted something dark, quiet and credible. The whole visual system fits in ten colour tokens and a short list of rules. Here's why a small palette and a few hard rules beat a big design system for a brand like this.
Design systems · Front-end5 min read
- Engineering
Four Years of One Product's Data Pipelines
ZoomProp's property data stack went from a scheduler on a single server, to a pile of scripts, to software-defined assets with a shared data model. Looking back across four years of repos, here's what changed, what stayed the same and what I'd do first next time.
Data · Architecture · Codebases6 min read
- Engineering
Two Databases, One Rule
In the healthcare platform I'm building, patient data lives in its own database and nothing else does. That one rule shapes auth, sync, queries and how I think about risk.
Healthcare · Architecture · Security · Data6 min read
- Engineering
One Table, Four Audiences
The clinical data pipeline I've been building shows records to four very different kinds of user. Instead of four tables, there's one pattern: server-side pagination, state in the URL and a single scoping rule applied on the server. Here's how it fits together.
React · State management · Healthcare · Front-end5 min read
- Engineering
Terminology Is the Hard Part
Parsing clinical documents is the easy half. The hard half is working out what every code inside them actually means. Here's how one bad crosswalk dragged my lab mapping down to about 20%, and what fixed it.
Healthcare · Interoperability · Data7 min read
- Engineering
Teaching a Model to Write Parsers
Public records live on thousands of county and city websites, each built differently. Writing a scraper for every one by hand doesn't scale. So I built a tool that visits a site, works out how its search actually behaves, scores whether it's worth automating, and has a model draft the parser. Here's how it's put together and where the model stops.
AI · Data · Architecture6 min read
- Design
Swapping a Component Library Without Stopping the Product
Moving a React app from MUI to shadcn-style primitives sounds like a rewrite. It doesn't have to be. Here's the approach I set up: codemods for the boring parts, a thin layer of your own components, and a migration that ships one screen at a time.
Design systems · React · Front-end5 min read
- Engineering
The Key Trail: The Easy Way to Run Form-Heavy CMSs
Let the route's params pick the data, the state path and the form. In a form-heavy CMS or admin tool, a new screen becomes one route plus one field array, with no new endpoint and no new form code.
Forms · State management · Architecture · Front-end3 min read
- Design
Designing and Building the Same Feature
For five years my job titles had both halves in them: Interaction Designer/Developer at Pandora, then Design Engineer at eBay. Here's what changes when the person who designs an interaction is also the person who builds it, and why I think the role matters more than its title suggests.
Design systems · Front-end · Careers7 min read