All Journal entries

Journal #9 · 12 September 2026 · 6 min read

Running is not the same as ready.

A system can be running and producing real evidence without yet being ready for UAT, release, production or the next meaningful action.

AI agentsProduction readinessProduct work
A hand-drawn bicycle on a repair stand with its rear wheel spinning in orange motion lines while the detached front wheel rests beside the empty fork.

I have become much more careful with the word “ready.” Not because I think teams use it carelessly, but because I have seen how easily a real sign of progress can turn into a much bigger claim than the evidence actually supports.

A service is responding. A job completed. An automated process produced the expected output. A deployment succeeded.

Something is undeniably running. It is tempting to look at that and say: good, it is ready. I have made that jump myself.

The problem is that “running” and “ready” answer different questions. Running tells me that something is executing or technically present. Ready tells me that I have enough reason to take some next action. And that immediately creates another question: ready for what?

Ready for internal testing is different from ready for UAT. Ready to deploy is different from ready to release. A workflow can be technically operational without being ready for another system or person to depend on it. Something can even be running in production while still exposing gaps that make the broader product or process not quite ready for the way we actually intend to use it.

That distinction sounds obvious when written down. In practice, I keep finding versions of it.

One of the clearest examples came from an automated development workflow I was working on. I watched a run complete successfully and produce the output I expected. That mattered. It proved that a significant part of the execution path worked. The process had run, the expected artifact existed, and the technical activity itself was real.

But the next step required more than the existence of an output. Before that output could safely become the basis for another action, I needed to know that it represented the right state and that the next part of the workflow could actually rely on it. The run completing successfully did not establish that by itself.

Nothing had necessarily failed. The successful run was not a false signal. I had simply been asking it to answer a question it was never capable of answering. It told me that execution had completed. It did not tell me that everything required for the next decision was ready.

I have seen the same thing around deployments. A successful deployment can tell me that a version of the software reached an environment and started correctly. A responsive endpoint can tell me that the service is alive. Automated tests can give me evidence about the behaviours they cover.

All of those are useful facts, but none of them automatically establishes release readiness, UAT readiness or production readiness. Those are broader claims, and the evidence needed depends on what is supposed to happen next.

This matters because our status language tends to collapse these boundaries. “Is it working?” “Is it ready?” “Can we go?”

They sound like binary questions. Product development usually is not binary at those boundaries.

Sometimes the accurate answer is that it is ready for internal testing but not yet for users. Sometimes it is ready to deploy but not ready to release. Sometimes the system itself is running correctly while the surrounding workflow still depends on manual intervention that we would not accept in normal operation.

And sometimes all I really know is that it ran. That is not a weak status. It is just a narrower one.

I also do not think readiness should mean perfection. If I waited until every uncertainty disappeared, very little would ever move forward. There will always be residual risk, assumptions and things that only become visible under real use.

For me, readiness is closer to an evidence question: do I know enough about this particular state to justify the next meaningful action? That makes readiness contextual rather than absolute. The same product can be ready for one thing and not ready for another without any contradiction.

This has become particularly noticeable as more of my work involves AI agents and automated workflows. An agent responding correctly to a prompt is evidence that something works. An agent completing a sequence of actions is stronger evidence of capability. Seeing the whole process run successfully can be genuinely impressive, especially when a task that previously required repeated human involvement starts moving on its own.

But AI agent production readiness is a different claim. Once I expect an agent to operate as part of a real workflow, I care about more than whether it can complete the happy path. Reliability matters. I need to understand what happens when something ordinary goes wrong, and I need enough visibility to distinguish a successful action from something that merely looks successful.

That does not mean every AI workflow needs layers of controls before it can be useful. It means the evidence has to match the consequence of the next action. An agent drafting something for me to review has a very different readiness threshold from an agent whose output another system will immediately act on.

I think part of the confusion is that activity is much easier to see than readiness. A running process gives us a response, a green status, an artifact, a completed task or a deployment record. Something changed from not running to running, and that feels concrete.

Readiness sits one level above that. It requires connecting those technical observations to the actual decision we are about to make. That connection is easy to skip, especially when development is moving quickly.

I have noticed this even in my own language. When something finally starts working after a difficult implementation problem, my first reaction can still be, “great, it works.” Usually that statement is true. What I now try to avoid is silently extending it to “therefore, we can move on.”

Sometimes we can. Sometimes the successful execution is exactly the evidence we needed. Sometimes it is only the beginning of the evidence.

This is also why I have become more comfortable giving statuses that sound slightly less satisfying but are more precise: “ready for internal testing,” “deployed, but not yet ready for release,” or “the workflow is running; I still need evidence for the next handoff.” Those statements leave some uncertainty visible. I think that is useful. They tell me not only what has happened, but also how far I can reasonably trust that evidence.

It is a small change in wording, but it changes the way I think about progress. I no longer see “running” as a weaker version of “ready.” They describe different things. Running is an observation about activity. Ready is a judgment about whether the available evidence is sufficient for a particular next action.

I still want to see the service come up. I still want the job to finish. I still want the deployment to succeed and the automated workflow to produce the expected result. Those are real milestones, and each of them can remove important uncertainty.

I just try not to make them prove more than they actually prove. Because once the next action changes, the meaning of “ready” changes with it.