---
title: 'In the News: September 20, 2026 (Extra 2)'
description: 'Will Larson defines the software factory pattern and names what had to change at Imprint before a goal loop could run: task state an agent can audit.'
canonical_url: 'https://darkfactory.dev/news/2026-09-20-extra-2'
markdown_url: 'https://darkfactory.dev/news/2026-09-20-extra-2.md'
collection: news
date_published: '2026-09-20T16:40:00-04:00'
date_modified: '2026-09-20T16:40:00-04:00'
---

# In the News: September 20, 2026 (Extra 2)


Will Larson published a first-person account of adopting the software factory pattern today. It
gives the pattern a one-sentence definition and a dated list of what had to change at Imprint
before the loop would run. Two smaller items follow: an experiment you can run that reports how much
the framing of an option changes what a typed decision model returns, and an argument for deleting
most of your MCP servers whose best part is not its headline.

## 1. A goal loop needs task state an agent can audit, and that is the expensive part

**[Trying the Software factory pattern.](https://lethain.com/software-factory-experiment/)** · Will Larson · Irrational Exuberance, September 20, 2026

Larson gives the pattern a one-sentence definition: "The software factory pattern is looping on a
broad goal, and then relying on the harness to drive progress towards that goal." His first
implementation is an agent skill called `/linear-project-loop`, which reads a Linear project and
audits its goal definition against two things: an RFC in Notion describing the goals and how they
are measured, and a Datadog dashboard or Snowflake queries that measure progress. If either is
missing, the loop iterates with you on creating it before doing any work. It then reviews the
project's metrics and issues, adds issues for newly identified work, updates the ones that moved,
and works the non-blocked tasks, which he says is usually writing a pull request, updating one,
pinging for review, or asking a clarifying question.

He also lists what changed at Imprint first: every engineer on Claude Code daily in January, roughly ten local workspaces each holding a checkout
of every repository in April so agents could open cross-repository pull requests, a company-wide
migration off Jira onto Linear in June, and in July an orchestrated harness "which internally we
call 'Agent Fleet', along the lines of Stripe's Minions." He attributes the term itself only
tentatively, writing that its AI-context origin is "slightly messy to attribute, but I think it
might be Justin McCarthy in February 2026's Software Factories And The Agentic Moment." The post
reports no measurement of the pattern's effect, and Larson says he is still running the loop locally.

**Why it matters:** The definition is cheap and the prerequisite is not. A loop that audits its own
goal has to read the goal from somewhere and write progress back, which is why the Jira migration
and the metrics access come before the loop in Larson's sequence rather than after it. His own
summary of that is the useful sentence: "all of the pieces here compound only to the extent that you
have the other pieces." If your project state lives in a tool your agents cannot read and update,
this pattern is not yet available to you, and the work in front of you is the migration, not the
skill.

## 2. How you present an option changes what a decision model tells you

**[jevchat](https://github.com/kyle-pena-nlp/jevchat/)** · `kyle-pena-nlp` · GitHub, posted to [Hacker News](https://news.ycombinator.com/item?id=49778162) September 20, 2026

jevchat generates text out of a typed decision model by asking it one question per symbol: given the
question and the reply so far, which symbol comes next. The options are an alphabet plus a stop
option, the model returns a probability for each, and a sampler draws from the normalised
distribution. The author is blunt about the vehicle, writing that "the idea is for fun, the cost is
somewhat impractical, and the results are hilarious," and that the implementation was written by an
agent from his description of the sampling strategies. Two of its findings are not about chatbots at
all. The repository reports that presenting each option as the resulting text, rather than as the
bare symbol a reader would have to append in their head, is "the single largest improvement in the
project": on character alphabets it claims roughly triple the top-1 rate and double the probability
mass landing on the right symbol, for fewer input tokens. Separately, the mode that skips
re-ordering the options is labelled the worst one, because the re-ordering is what cancels the
model's position bias. It ships a `bench` command that compares every mode against the API, and 158
offline tests, but the comparison table those figures point at did not load for us, so both are the
repository's claims and not numbers we read.

**Why it matters:** If you call a typed decision endpoint anywhere in a harness, to route work or to
grade an output, both findings transfer whatever you are deciding. Hand the model the finished
option instead of the fragment it would have to assemble, and shuffle the option order before you
ask. An unshuffled option list means part of what you are measuring is your own ordering.

## 3. An argument for deleting your MCP servers, and one thing to do instead today

**[Why MCP Was Always a Bad Idea](https://maharship.com/blog/why-mcp-was-always-a-bad-idea/)** · Maharshi Patel · September 14, 2026

Patel's case is that MCP was built for models that could not yet write and run their own code, that
most remote-service MCP servers "ultimately wrap APIs that already exist," and that models have now
learned to discover a CLI by running `--help`. He notes that the context-bloat workarounds sold by
Composio, MintMCP and Pipedream are useful in the short term and are still work spent on a layer he
thinks should go away. His prescription is one line: "We delete most of our MCP servers." No
measurement is offered for that, and the piece does not claim one. The concrete part is his second
proposal, that agents and servers content-negotiate over ordinary HTTP. He reports that a growing
number of documentation sites already honor `Accept: text/markdown`, and quotes an exchange in which
Vercel's Malte Ubl asks harnesses to also send the caller's preferred programming language in
`Accept-Language`, and Shopify's Tobi Lutke replies that Shopify docs will support it. We have not
verified that Shopify shipped it.

**Why it matters:** The deletion argument is an assertion and should be read as one. The header
convention is already running. If your harness fetches documentation, asking for Markdown costs
nothing and is honored today, and the language header is the same idea one step further. That is a
change you can make this week. Tearing out a working tool surface on the strength of an essay is not.
