Blog

Spec-driven development is getting slow

Full spec-and-review ceremony on every task slowed the build to a crawl, so I forked superpowers into two speed lanes. The audit put a number on it: 27 subagent runs for 11 tasks, one fix loop eating 22 percent of them. Upstream shipped its own router a day after my routing change, so the problem was real.

Building an autoresearch lab I can actually watch Featured

For the past six weeks a machine I built has been doing part of my quant research for me. It proposes a hypothesis, writes the strategy itself, backtests it across twelve out-of-sample windows, and tells me which ideas are dead. It has run around 700 experiments and nothing has survived holdout. That reads like a verdict on autoresearch and it is not one, it is a verdict on my harness.

ta v2.0.0: three libraries on one audited spec

ta v2.0.0 ships ta.js, ta.py, and ta.go on the same major version, with the same indicator set audited end-to-end against textbook formulas and a comparative benchmark in each language. Pure-JS ta.js wins 66 of 67 cross-library cases at 100k bars; pure-Go ta.go wins or ties everything in its field. The Python story is more complicated, and the post is honest about why.

Two weeks of agentic coding into a paywalled SaaS category

Hourly went live on the Mac App Store today, alongside the direct download from this site. It is free, local, no account, no paywall behind any feature. I built it in roughly two weeks with agentic coding tools as the cheapest empirical test I could run on whether agentic coding has actually started to break a paywalled SaaS category.

Magento's _cl tables had 902 million rows

Magento 2's indexer architecture is not built for an 800K-product catalog with daily supplier-feed updates. The _cl changelog tables grow faster than the cron can drain them, and eventually something gives. This is the nightly reindex-and-truncate cron I now run, why the order of operations matters, and why none of the Magento experts I asked found this in six months.

A hundred technical indicator functions in JavaScript

ta.js is my first open-source project — around a hundred indicator functions in JavaScript, first commit 2020-08-24, v1.17.0 shipped earlier this week. I started it because I needed the indicator functions for my own work anyway and writing each of them turned out to be the cleanest way to learn them. I published it because if anyone actually used it, they might open issues on the ones I had gotten wrong, and that scrutiny loop was cheaper than anything I could have built for myself.

A diamond painting shop the code could not save

I launched a custom diamond painting webshop on mijndiamondpainting.nl in early 2026, made one sale, and shut the shop down inside a month. The reason it died was not anywhere in the code. The supplier was in China, the product was personalized, and there was no version of that combination where door-to-door delivery survived the math at a €22.95 entry price.

The adoption gap

I was skeptical during GPT-3.5 and GPT-4. Chat in a sidebar was autocomplete with extra steps — useful for a paragraph here, not for the actual work of building software. What arrived a year later was a different primitive: agentic coding loops, where the model drives a small set of tools instead of just producing text. Almost everything on this blog was built with an agent next to me, and the honest read is that it widens the developer-skill gap before it narrows.

A research pipeline for the internet-shaped part of the decision

I built a research pipeline to help me pick a Dutch e-commerce niche to launch into. Version 1 pointed me at one. I launched a webshop on it, made a sale, and shut the shop down for reasons the pipeline had no way to see. Version 2 was built with more rigor and I trusted it less, because by then I had learned which layer of the problem a pipeline like this doesn't touch.

An agent built around not calling the LLM Featured

Most agent frameworks default to call the model again. This post is about a personal agent built around the opposite default — do we actually need to call the model this time? — and the four pieces (main loop, scheduler, provider layer, setup flow) that fall out of taking that question seriously. The project is currently shelved; the parts that survive into the next iteration are the scheduler, the preprocessor pattern, and the provider abstraction.