Wondering what the actual verification loop looks like once you start taking these systems to production.
Wondering what the actual verification loop looks like once you start taking these systems to production.
In short:
- they are very powerful
- beginners feel like they are just as good as experts
- but they can cause a LOT of damage if you don't know what you are doing
- experts will get way more done and beginners may cut off a limb or drop a tree on their car
0 - https://x.com/alexpotato/status/2090872063464509912?s=20
For every property of the system, implement a mock that simulates a system that works, and multiple variations with forseeable bugs (models are fairly good at predicting possible bugs). Then, write a unit tests that pass on the working simulation and fail on the buggy simulations.
This way model ensures reasonably well that the unit tests test what they're supposed to. Then, you use those tests as a verification to guide the model to implement the functionality.
This approach relies on the assumption that the model can design a reasonable architecture composed of independently-testable modules. In my experience, frontier models should be able to do that.
Now it is obvious to me how important this work is
Deploy to the staging cluster, have the LLM monitor with read access to the logs. Opus is… better than a human at looking at logs and comparing timings and checking for warnings and errors.
If it passes a small load test there, deploy to the live cluster and actively monitor. If it doesn’t fall over under load, is faster, is still correct, not throwing errors it works good enough.
Does much more matter? This produced a fairly large performance improvement. Verification in this case is the process of running it under load and double checking the code isn’t doing anything truly wacky.
User facing apps are harder to validate, sure, but you can easily have an LLM looping looking for errors, log issues, etc.
For home apps, this is more validation than you would have personally done
We ended up building our own test platform to reduce the human bottleneck in the verification loop.
Takes the form of a hermetic test environment that run all our code and infra in a way that matches production. Our tests interact with it from the ”outside”, e.g. by driving a browser, a terminal or making API calls.
We still have coding agents writing those tests but the big difference is that we record the browser and the API calls and can review and verify through a UI without having to do any manual testing. It also serves as a regression test suite with E2E coverage, which is kind of a must to avoid coding agents making assumptions and breaking things.
Not a huge fan of the term ”software factory” but working like this I actually think it’s achievable.
While doing local development where your environment is already setup and dependencies are installed doing something like this seems viable after the initial effort.
But how would this work in a software-factory setup, where coding agents run on fresh VMs or when using something like Claude Code on the web? How do you quickly recreate the required environment and dependencies there?
The future might be parallel attempts and selecting the best-of-N solutions.
The only thing we've truly got left realistically is deciding what to build and making all the product decisions on how it should work.
So that's what I'm trying to enjoy the most now and then when I'm done planning and writing the spec I just delegate to my orchestration engine and walk away while it builds.
It spawns fresh agents to implement, then verifies mechanically (test/lint/build etc.), then fans out multiple reviewers across different providers/models, all those findings go into a triage step with an agent who is given standardized context of previous triage and review rounds and who deduplicates issues and writes guidance for fixing issues fully, then a fix agent gets spawned , then a post-fix verification agent and then back to review until no more issues are found.
For a large feature it can work for a day or more uninterrupted and contrary to just using something like /goal or having an agent orchestrate the whole process, the code stays on track and gets delivered as close to the spec as possible.
All this repetition is necessary if the goal is to be able to generate tons of code and maintain quality while not needing to review everything yourself.
I think vision models will come more into play for validating things. It’s the most like consciousness, and less like - as you put it an LLM validating its own assumptions.
It’s at least an independent way of analyzing the work (as glyphs and images).