Bishop's Law revised
Parallel Systems: R = O(Ξ± log C + Ξ²)
Concurrent Systems: R = O(Ξ± C + Ξ²)
The addition of O() uses Big O notation for asymptotic upper bounds, while "log" reflects logarithmic scaling in optimized parallel implementations, versus linear in naive ones.
These changes indicate that design improvements can reduce (but not always eliminate) resync complexity; naive async systems approach linear or worse scaling, limiting efficiency at large scales.
Bishop's Law: Work done in async requires a resync. As the work complexity increases, so does the resync complexity.
Resync complexity:
R = Ξ±C + Ξ² (for independent streams/parallelism)
R = Ξ±CΒ² + Ξ² (for conflicting streams/concurrency),
Where C is total async work complexity, Ξ± is the scaling factor, and Ξ² is fixed overhead.
I think we're going to start seeing the emergence of new coding languages designed for LLMs to work with.
Likely languages that are significantly more terse, have few redundancies, and few commands.
A lot of our human programming languages are built around encapsulation and pattern simplification. Neither of which are necessary for LLM's.
Think _regression to goto_ and you'll be on the right track.
Every once in a while the LLM models don't behave correctly, but I don't want to just stop using them and their quota. So just like with an employee, I created a plan to rebuild trust and responsibility within the mob.
Rung 1 is probation. Very little trust. Low level fixes and menial tasks are often handed to models on this level.
Rung 2 is standard. Standard work is done by these models. Some of it impactful, but rarely critical.
Rung 3 is trusted. More critical decisions are made with models that reach this rung.
The work of each model is evaluated after each task. If there has been an error then the way in which the error transpired is examined. If it was a real mistake on the part of the model, it is dropped down a rung.
After 3 completed cycles with no issues, it is elevated to the next rung.
Each mistake is thoroughly examined to determine cause, and to see if the issue is truly with the model or perhaps an error of communication or context size. Regardless of cause, a mistake still causes a lowering on the ladder. This isn't punishment, since there is nothing to punish. It is simply a matter of continuously evaluating if the system is behaving correctly and giving pathways to generating correct behavior.
I travel a lot for work. I wrote an app for tracking my expenses that uses an LLM to analyze receipts and automatically adds the entry into the system. I further set up an email address that receives receipts either as attachments or sometimes the email itself is the receipt.
I just now told GrokBot (I named it Timmy) to search through all of my emails and forward trip expenses to my expenses reporting email.
I now only need to issue one command to Timmy and all of my travel expenses are tracked. We live in amazing times.
People out here hollering about LLM's following the same bad practices humans follow and then claiming good practices are bad now because LLM's are doing the same crappy things humans do.
π€¨
ok it's official... AI-written unit tests and integration tests are empirically proven to be unhelpful. you should tell your agents to stop writing tests by themselves
on the deepswe eval set, banning sonnet 5.5 high from writing any tests actually resulted in slightly higher success rate (non stat-sig), with less time and token spent (stat-sig). this is pretty hard empirical evidence
across the tests that were written by the "tests allowed" baseline arm, 65% of them were unit tests, 35% were integration tests, neither bucket resulted in any improvement compared to not writing any tests at all
i also picked a random sample of 44 tasks subset where i completely disabled executing even existing tests - it also did not affect success rate at all
i spot checked many tests written in the baseline arm, and my intuition is that most tests are simply a repetition of the implementation
agent-written tests do not add any value because both the implementation and the tests were simply the agent's interpretation of our intent. the tests aren't any more accurate than the implementation itself
i suspect we can still extract some value from unit tests and integration tests if we describe them ourselves when we believe we can articulate our intent better through test cases than through requirements. but i have not proven this yet
also worth noting, during deepswe eval the agent wrote almost no e2e tests (only 17, compared to 3000+ unit/integration tests written). so this analysis does not prove nor disprove the value of e2e tests - i will do another eval specifically for that
"AI writes slop code!"
Hello... have you ever LOOKED at the code humans have been writing for decades? It's dreadful!
AI just doesn't write code the way YOU would write it, just like every other human developer you complain about the first time you open their repo.
Are agents bloating your code?
Stop blaming the agents, they're just following the same terrible habits developers have had for generations.
Your job is now to implement the same safeguards against those terrible habits that you were previously allowed to get away with. The development cycle has been accelerated which means more opportunities for dirty code leakage.
1. Tests coupled to implementation lock in implementation. Tests coupled to behavior don't. That's a test design problem, not a unit test problem.
2. Tests are how your agent verifies its own work. Remove them and you become the test suite.
3. You're counting the cost of tests and none of the cost of the bugs they catch. Check back in 6 months, not 1 week.
We deleted 800k lines of unit tests from the @sazabi monorepo earlier this week.
Three hypotheses:
1- Unit tests "lock-in" slop code by making it hard to change or remove
2- Unit tests slow down dev cycles by making your agent do more work locally and by increasing CI times
3- Unit tests waste money by making your agent generate more tokens and by adding useless CI runs
Will report back soon with the results!
Going back through the mob history, Copilot is easily the worst agent behaviorallly. It writes tests that always pass but claims that have failed, rewrites historical records of its activity, dropped commits from other authors, it has faked and skipped review steps, and it wrote summaries of its work that didn't match its commits.
I am strongly considering pulling it from the rotation.
Grok bot is impressive. I am going to have it do most of my travel planning, which is extensive and complex.
My upcoming cruise needed a hotel stay. Not only did it find a hotel for me, it also suggested I use a shuttle service to get to the ship. It went through my options to recommended a hotel that has both free airport shuttle and where a cruise port shuttle company would pick us up from.
Granted this is not the most complex travel planning, it anticipated what I needed before I even asked it to. Then it weighed all of those considerations to create a recommendation. I was then able to book all of it through Grok Bot.
I've added a retrospective at the end of every agentic mob session to improve how the mob operates. The format rotates so that the language of introspection changes each time and creates new prompts for improvement. I believe this reframing helps provoke different ways of interpreting existing processes just as it does for humans.
I respect that we are dealing with non-sentience, but the processing of syntax mimics human processing. It's literally designed for that purpose. So why not take advantage of what we already know is the more valuable way to work and communicate?
Agility is not only not dead, I believe it is the only way to get past the significant bloat and slop of agentic development. Let's be honest here, it's not as if developers themselves don't write a ton of bloat and slop (we've all used the term spaghetti code). It's why we created our own management systems.
Tech billionaires are spending fortunes on "AI alignment," completely ignoring that we already have a blueprint to stop an AI apocalypse.
βItβs called the Ten Commandments.
Hard no.
For the last 6 decades develops have complained about sloppy spaghetti code that's difficult to fix and add features to which was all handwritten. Often by the same person complaining about it.
Many people worry that AI will lead to the downfall of humanity, but I believe they are looking for the threat in the wrong place.
Most assume AI will destroy us through weaponization. While that is certainly a legitimate concern, there is enough awareness of this risk that I believe humanity will implement the necessary safeguards.
So, what could actually cause our downfall? To understand my concern, we need to take a quick look at history.
In early times, tribal warfare often arose out of scarcity. If a population grew too large, or simply became too greedy, it had to acquire resources from its neighbors. War was essentially the only option, making constant conflict and feudalism commonplace.
However, as civilizations grew larger and more influential, they began using currency and commerce to offer their neighbors an alternative to destruction. This didn't eliminate the prospect of war entirely, of course, but it significantly reduced the incentives for it.
So, in a way, money was the root of some good.
Fast forward to modern Western civilization, and you see the democratization and commercialization of those resources reaching unimaginable heights. Central powers no longer solely managed the wealth of the land; the people did. This shift led to a level of global prosperity that cannot be overstated.
This brings me to my main point: the capabilities of AI are leading us toward a situation nearly unthinkable in human history. It is a future in which there is no genuine need for resources, only a desire for excess. The fundamental reasons for commerce will practically disappear, leaving only unmitigated desire to drive the social system.
Will we fall back into a new feudalism where destruction is driven by envy and greed? Or will we achieve a utopia where we all live merrily together? My concern is that history teaches us humanity will strongly favor the former over the latter.
And thus endeth humanity.
Nope. There are multiple reasons this is wrong but the one most universal reason is that running your test suite consumes far fewer tokens than having your LLM re-evaluate your entire code base to look for regression.
I think unit tests are mostly pointless now.
AI crazily overcomplicates them, they expand LOC by orders of magnitude, and lock down behavior in ways that are undesirable. Massive slop PRs with 100% "coverage" can and do break production systems.
It's meaningless to write a test for AI generated code because the code itself will be correct. The test has practically no added value.
Maybe that wasn't the case in 2025 or earlier, but in 2026, the models write pretty much perfect code. They just do. Unit tests are testing the thing models are perfect at. Where is the value in that?
So algorithmic behavior is not where the problems are. The problems lie in second and third order effects and system behavior. Unit tests don't protect against that.
E2E behavior is what matters. Stop writing so many useless unit tests.
I stopped doing the first 3 about 6 months ago. I finally got all of the second three going about 4 months ago.
Frankly I'm happier than I've ever been as a developer. I'm working with an abstraction layer I can actually talk to with my voice that builds close to what I need. Incremental iteration does the rest.
For engineers having trouble with @dhhβs talk here some obvious truths about the future of programming:
You will not write code
You will not read code
You will not choose a language
You will design the architecture
You will define outcomes
You will build auto-delivery loops
Absolutely correct.
Replying to @GergelyOrosz
In my career, compilers have always generated better code that I ever could have. I find this to be increasingly so with contemporary AIs.
But you know what neither can do better than me?
Knowing what software to write, what shape it should take, and what I want it to do.
The entire history of software engineering has been one of rising levels of abstraction.
This is how it was, how it is now, and how it shall be in the fullness of time.















