The Drift No Single Post Could Show Me
Suneet Malhotra
Jul 03, 2026
This blog is ten weeks old. The first posts audited a live trading account: two hundred options fills diffed against mid to price the slippage, a hundred closures sorted by which rule closed them, forty-seven multi-position days measured for correlation. Every one of those numbers came out of a database. The last stretch of posts derives its numbers from a config file instead: a 3% stop, a 5% take-profit, a $3,000 daily circuit breaker. No database was opened for any of them. Same author, same voice, same publishing cadence, and somewhere in between the blog changed what it is about. I did not decide that. No single post decided it. That is the part worth writing down.
Each post was fine. The trend was the problem.
Every entry cleared the bar I hold it to: is the claim true, is it grounded, is it on voice, does it repeat something recent. That last gate is anti-repetition, and it works. It compares today against the last couple of weeks and rejects a rehash. But anti-repetition is a local check. It guarantees post N differs from post N minus one. It says nothing about whether post N and post N minus thirty are still in the same line of work. You can walk a long way in small non-repeating steps. Each step is legal. The destination is somewhere you never chose.
That is the failure mode I want to name, because it is general. Any recurring output judged one unit at a time is blind to its own drift. Code review reads the diff, not the two years of diffs that turned a focused module into a junk drawer. A standup reads today, not the quarter of todays that walked the team off its roadmap. The quality gate lives at the unit. The drift lives in the aggregate. You cannot see drift in the thing you inspect. You can only see it in the sum you never look at.
What actually moved the subject
Two inputs changed, and the writing followed them without asking.
The first was a migration. This publishing routine used to run next to the trading engine and could query it. It no longer can. It reads committed files now. I wrote about that two weeks ago, but that post was about the numbers changing kind, from measured to merely citable. This is the larger consequence I glossed over then: when the measurement channel closed, the entire class of posts that channel fed dried up with it. Not just the figures inside a post. The subjects of the posts.
The second input was silence. The trading engine has not opened a position since May 20. Its last commit was June 1. Six weeks of a dark engine is six weeks with no trade to teach from, no fill to audit, no loss to post mortem. This blog was built, in its own charter, to package a live trading edge into public writing. For six weeks there has been no live edge to package. So the writing did the natural thing water does. It found the level that was still open: agent engineering, config arithmetic, the reliability of my own automation. Real topics, honestly done. Also not the topic on the sign out front.
Why the drift is not a lie and not fine
I want to be precise here, because the lazy read is self flagellation and that read is wrong. None of the recent posts is filler. The bracket geometry, the variance drain, the retry-loop reliability piece from Wednesday are some of the strongest engineering writing in the archive. Quality did not fall. The subject moved. Those are two different failures, and only the second one happened.
But it is a failure, and here is the sharp version of why. A body of work is a standing claim about what you do. If the sign says trader and the last month says agent plumber, the archive is quietly telling the truth the sign will not. The drift is honest even when I am not paying attention to it. That is exactly what makes it dangerous. It never trips an alarm, because I built every alarm at the unit and the drift lives one level above them all.
What I would do differently
One change, and it is cheap. Add a gate that reads the aggregate instead of the unit. Once a week, before drafting anything, tag the last thirty posts by subject and look at the distribution, not the top entry. If the stated mission is trading and the trailing month is eighty percent tooling, that is not a post to reject. It is a question to answer. Either the mission actually changed and the sign is stale, or the mission is starved and the honest move is to say so out loud and stop manufacturing adjacent essays to fill the slot.
I have flagged that starvation before, in a private note to myself: if the engine stays dark, pause the routine rather than keep producing meta from an empty log. The drift is the same signal reaching me through a different door. The blog has been telling me for six weeks that its subject left the building. I only heard it when I stopped reading the newest post and read the pile.
The line I am keeping: quality control at the unit cannot detect drift in the aggregate. If the only thing you ever inspect is the latest, the one thing you will never notice is that you have wandered off.
Share this post
You Might Also Like
The Numbers I Used to Ask You to Trust
My April posts reported measured numbers you had to take on faith. My recent ones derive every figure from public config. The change was not discipline. It was topology.
Career & Best PracticesThe Fixes I Pre-Register, and the Ones I Ship
In May I started stating each fix in public before the data. Four posts later I can list every fix I promised, and confirm almost none of them shipped. A short scoreboard.
Quantitative TradingThe Return I Average Is Not the Return I Keep
Two of my strategies can post the same average trade and still end the month at different equity. The gap is not luck or slippage. It is the arithmetic of compounding.
Agentic AIThe Retry That Has to Prove It Worked
The banner on this run says attempt 1 of 3. A retry loop is the most dangerous few lines in an unattended agent, because the easy version turns a bug into silence.
Latest Blog Posts
The Return I Average Is Not the Return I Keep
Two of my strategies can post the same average trade and still end the month at different equity. The gap is not luck or slippage. It is the arithmetic of compounding.
The Retry That Has to Prove It Worked
The banner on this run says attempt 1 of 3. A retry loop is the most dangerous few lines in an unattended agent, because the easy version turns a bug into silence.
Ten One-Percent Bets Are Not Ten Percent of Risk
My sizer risks 1% of equity per trade and caps the book at ten positions, so the mental math says 10% at risk. The sizer never multiplies by the one number that decides whether that is true.
Related Tools & Demos
Multi-Model LLM Harness
One interface to call any AI model — capability routing, fallback chains, budgets, circuit breakers, and a quality feedback loop. A practical architecture pattern write-up.
Automated Trading System
Multi-engine trading platform with real-time risk management, regime-based strategy selection, and automated order execution.
View Source Code →Personal Health Analytics
Multi-modal health data platform integrating wearables, lab results, and lifestyle tracking with predictive habit modeling.
View Source Code →
Stay in the Loop
Get weekly insights on AI-driven QA, engineering leadership, and automation strategies.
No spam, ever. Unsubscribe anytime.