Field notes.
Deep dives into system architecture, engineering practices, and lessons learned building scalable products — with the occasional detour into life beyond the terminal.

Native or Hybrid? Why I Would Build GroceryTrack Native from Day One
I built the GroceryTrack iOS app in Flutter to ship fast, and it took a week. Six months later I rewrote it in SwiftUI in about a day. The native build is less than half the size, builds 3x faster in CI and runs on 4 dependencies instead of 43. A shared codebase never made Android free, and with agents, native was no slower to build. I no longer think Flutter or React Native is the fast way to prototype.
Two Tools for the Human in the Loop
I shipped two small, local, single-purpose tools in one week. Bogyman tells me which coding agent is waiting on me, on what, and for how long. Tinycap turns what is on my screen into a small file I can drop into a pull request. Both exist because the job left to the person is supervision.
What Changed in LLMs, 2017 to 2026
Five products turned the language model from something you talk to into something that acts for you. Each one handed the model a job a person used to do — and handed the person a new one back.
Product Bets and the Reflection of Engineering Inside a Product Org
Three days at a Product Summit — 1H reflection, 2H big bets, and a day of open proposals — left me with more questions about engineering than about product. Notes on the gaps between top-down and bottom-up, early and burned-out AI adopters, and what a "bet" actually is.
The Engineer Becomes the Editor
I built a three-platform AI product alone for $725 of tooling and under $45/month to run. The interesting part was never the speed — it was what it changed about how I would lead a team.
Building GroceryTrack: From a Pile of Receipts to Users I Never Expected
How I went from idea to a live receipt-scanning app in one day, and what 444 receipts, the first 100 users, and an unexpected Canadian audience taught me about building in the LLM era.
Share Packages, Not Applications: 3 Years of a Multi-Brand Next.js Monorepo
Three years modernizing a multi-brand healthcare platform — what I learned about monorepos, GraphQL gateways, and why sharing packages beats sharing apps.
My 2025 Reflection: A Year of AI, Exploration, and Growth
Personal reflections on 2025: navigating the AI revolution, rediscovering photography, traveling across continents, and finding balance in a year of rapid change.
Chasing Stories Across the British Isles
A Winter Journey Through the UK and Ireland: Exploring London, Edinburgh, Dublin, and More
The Toolbox For Principal Software Engineers
What I've learned about building systems, patterns, and clarity in a multi-brand environment
The Field Guide for Learning Swimming as an Adult
From zero laps to 1000 yards: A practical, honest guide to learning swimming as an adult, including what gear to buy, how to structure lessons, and what actually works.
Why Re-Platforming Matters: A Strategic Guide to Technology Transformation
A comprehensive guide exploring when, why, and how organizations should approach re-platforming initiatives to drive business growth and technological advancement.
Leading Without Authority as an Individual Contributor
How individual contributors can lead effectively without formal authority—through influence, expertise, and collaborative strategies.
Takeaways From GraphQL Summit 2022
GraphQL Summit 2022 takeaways: the 5 talks I recommend from 22, including Netflix and Fidelity on Apollo Federation, Reddit’s supergraph and Apollo Router 1.0.
Bye 2021, Hello 2022
Moving to the suburbs, running half the days of the year, baking sourdough and getting a driver's license — what I started in 2021 and want to try next.
SEO: The Secret Sauce for Making Online Grocery Shopping Popular
Single page apps and search crawlers don't mix, and grocery adds store-level assortment on top. Weighing SSR, NoScript tags and prerendering for bots.
Order Status, The Long Awaited Feature
Shipping Order Status at Peapod: push notifications, invoice emails, and a 30-minute ETA in place of a two-hour window, plus what the usage data showed.
2017 Year At A Glance
A year of meal kits, food waste and a grocery co-op, alongside shipping Order Status at Peapod, starting a hackathon and mentoring our first interns.
When The Night Is Falling, We Need The Dark Theme
I injected CSS into an Electron build of Peapod.com to give it a night mode. What inverted badly, and the Chrome extension it eventually turned into.
What Are The Two Hard Things In Computer Science?
Naming things and vertically centering things. Four ways to center in CSS — absolute, table cell, flexbox and grid — with tradeoffs, plus BEM naming.
TD, Or Not TD, That Is The Question
Our order confirmation email broke only in the Android Gmail IMAP app. The fix was swapping semantically correct TH cells for TD. HTML email has no standard.
A Not-so-brief Landing Page History of Peapod
Peapod took grocery orders in 1989 with no browser required. A visual tour of its landing page from the MS-DOS blue screen through the flat UI era.
Web Accessibility: Designing The User Experience With All Users In Mind
Why Peapod audits for WCAG 2.0 Level AA, and how we shipped it: site-wide high-contrast mode, full keyboard navigation, and tested VoiceOver support.
Cooking & Coding
A year of cooking unfamiliar cuisines taught me what engineering does: you get good by practicing, reading and failing. Plus the daily rules I set.
Why Scala Can Help You to Build a More Reliable Service
Coming from C, Java and PHP, I assumed languages were interchangeable. Immutable variables and first-class functions in Scala changed my mind.
Printable, Shareable and Responsive Design of Certificate
Bootstrap made the certificate responsive in minutes; printing it took much longer. Why DOMPDF, TCPDF and jsPDF fell short, and how media queries fixed it.
HowdyBarber: A scripting way to check my barber's availability
My barber's booking system had no public API, so I scripted the undocumented one behind their web app — and found it had no authentication at all.
How I used Docker for LaTeX On macOS Yosemite/Sierra
MacTeX is a huge download. How I compile .tex files from any editor with one Docker command, updated for the 2026 rebuild with latexmk and XeLaTeX.
New essays, in your inbox.
Get notified when I publish on engineering, product thinking, and the occasional life lesson. Two posts a month at most — no spam, unsubscribe anytime.