A Software Engineer Plays Quant: Building a Market-Data Research Stack in Python

For most of my career I built the plumbing of finance from the engineering side — feed handlers, order books, low-latency messaging, the systems that carry trading decisions without ever making them. I knew the microstructure cold and the strategy not at all. That division of labour is normal and mostly correct: the quant researches the signal, the engineer builds the system that executes it at scale. I’m starting a series of side projects that deliberately cross that line. Not to become a quant — I have no illusions about competing with people who do this full-time with better data and better maths. The goal is narrower and more interesting to me: what does market-data analysis look like when a software engineer does it? What does the engineering discipline I’ve spent fourteen years accumulating buy you when you point it at financial time series in Python? This first post is about the part nobody writes about because it isn’t exciting: the research foundation. Get this wrong and everything built on top is sand. ...

May 13, 2026 · 8 min · MW

Migrating a Production Service from Zap to slog: Notes from the Trenches

log/slog shipped in Go 1.21 in August 2023. It’s now been in the standard library for two years, and most production Go services I encounter are still on zap or zerolog. That’s not inertia — it’s a reasonable position. The third-party loggers are battle-tested and fast, and “the standard library now has one too” is not by itself a reason to migrate a working system. We migrated one of our services anyway. This post is about why, what the migration actually involved, and the honest accounting of what we gained and what we gave up. ...

October 7, 2025 · 7 min · MW

Context Engineering: What the Term Actually Means and What It Doesn't

Sometime in early 2025, “prompt engineering” stopped being the term people used and “context engineering” took its place. Like most renamings in this field, it was half marketing and half a genuine shift in what the work actually is. The marketing half is noise. The genuine half is worth understanding, because it names a real engineering problem that I spend a meaningful fraction of my time on. This post is about the real part: what context engineering is when you treat it as engineering rather than as a LinkedIn phrase. ...

August 19, 2025 · 9 min · MW

Go 1.23 Range Over Functions: What It's For and What It Isn't

Go 1.23 stabilised range over function iterators, a feature that had been in the rangefunc experiment since 1.22. It’s the most significant addition to the range statement since channels were added. The reaction has been mixed: people who needed it find it elegant; people who didn’t need it find it confusing. Both reactions are reasonable. Here’s what it actually does and where it belongs. ...

June 18, 2025 · 5 min · MW

Evaluating LLM-Integrated Systems: What Works and What Doesn't

The large US technology company builds systems where LLM calls are in the critical path. These systems are hard to test in the traditional sense — the outputs are probabilistic, the failure modes are subtle, and the “correct” answer for many queries doesn’t have a binary definition. After two years of building and evaluating LLM-integrated systems, here’s what actually works. ...

May 7, 2025 · 6 min · MW

Distributed Consistency Models: What Your Service Actually Guarantees

At the large US tech company, the hardest design review conversations were almost never about which database to use. They were about what consistency guarantee the system needed, and whether the proposed design actually provided it. “Eventually consistent” is not a useful answer to “what does this service guarantee?” It describes the best case for a wide range of behaviours, some of which are harmless and some of which can cause correctness bugs in production. ...

April 16, 2025 · 6 min · MW

AI-Native Development: What It Actually Means to Use These Tools Well

I’ve been writing software since 2012. The introduction of capable AI coding assistants in 2022–2023 is the largest change in the texture of day-to-day development work I’ve experienced. Not because it writes code for me — it mostly doesn’t — but because it changes the cost structure of certain tasks in ways that compound. This post is about where I actually find leverage, and where the tool gets in the way. ...

March 5, 2025 · 6 min · MW

Staff Engineer or Engineering Manager: On Choosing the Road That Doesn't Come Back

Somewhere around year eight or nine, the question stops being hypothetical. Both paths are available. The organisation is large enough that both exist as genuine roles, not just titles. You have to actually decide. I’ve been close to this decision twice. The first time, at the startup, it was resolved by circumstance — there was no EM role to take, so staff-track it was. The second time, in a larger organisation, it was a real choice. Here’s the framework I used and what I’d change about it. ...

January 22, 2025 · 5 min · MW

Building with AI Coding Tools: What Actually Changes and What Doesn't

I’ve been using AI coding assistants heavily since 2023 — first Copilot, then Claude, then a combination. At this point, not having them feels like losing a limb. But the way I use them now is different from how I started, and the difference is mostly about understanding what these tools are good at and building habits that work with their strengths. ...

January 22, 2025 · 6 min · MW

Cross-Team Technical Alignment at Scale

At the large US technology company, no single team controls the entire system. A feature that touches payments, identity, and platform teams requires coordination across three codebases, three on-call rotations, and three sets of priorities. Getting technical alignment across teams without creating bureaucratic overhead is an active engineering problem. ...

November 20, 2024 · 6 min · MW
Available for consulting Distributed systems · Low-latency architecture · Go · LLM integration & RAG · Technical leadership
[email protected]