A Tool Pile Is Not a Product
There is a particular trap technical people fall into when a problem is still fuzzy. We start collecting tools.
Not because we are dumb. Usually the opposite. If you understand enough pieces of the ecosystem, you can see all the interesting ways the thing might be solved. A pipeline here. A notebook there. Some serving layer. Some vector database. Some orchestration. A dashboard. Maybe a queue. Maybe a little workflow engine, because of course this is getting out of hand.
Before long you have a very impressive pile of parts and no obvious answer to the boring user question:
What do I do first?
That is the moment the air goes out of the balloon. The stack may be powerful. The docs may be correct. The architecture diagram may even look nice, which is how you know somebody was avoiding the hard part. But if a user cannot tell how the work starts, what decisions belong to them, what the system owns, and what happens next, they do not have a product. They have homework.
My Time In The Kubeflow Mines
I learned this one the expensive way while writing Kubeflow for Machine Learning.
Kubeflow was not a bad idea. It was, in many ways, a very good idea. Machine learning work had escaped the notebook and needed somewhere to live. People needed pipelines, repeatability, serving, metadata, notebooks that ran in a real environment, and some way to move from "I trained a model on my laptop" to "this thing participates in production without everyone holding their breath."
That is a real problem. Also, Kubernetes was right there, wearing its little hard hat, ready to make everything both possible and annoying.
The trouble was that Kubeflow was not one thing. It was a collection of things. Useful things, but still things. Even a basic example could wander through several services before the reader got to the part they actually cared about. And because the project was moving while we were writing the book, some of the ground kept shifting underneath us.
This is not a dunk on Kubeflow. Open source infrastructure is hard. Writing a book about moving open source infrastructure is also hard, and occasionally a good way to discover new facial expressions.
But it burned a lesson into my brain: a platform is not a path.
The Demo That Actually Helped
The most useful part of the book, at least to my mind, was not "here are all the buttons in the platform." It was the medical imaging demo.
We built a workflow around low-dose CT scan denoising. The system used Apache Spark and Apache Mahout to decompose CT images and reduce noise. The operator could control how much denoising happened, and a doctor stayed in the review loop.
That mattered because the workflow had a shape.
An image came in. Compute happened. Math happened. A control changed the output. A human reviewed the result. The system did not pretend the tool pile had magically become medicine. It put the tools in service of a path a person could understand.
That is the difference. "We have notebooks, pipelines, serving, training, and metadata" is a platform inventory. "A doctor can review a denoised scan with control over the amount of denoising" is a workflow.
One is a parts list. The other is a product-shaped thought.
The Missing Layer
The missing layer between tool and product is usually not another tool. I know. Very rude of reality.
The missing layer is the set of decisions that makes the work legible:
- What starts the workflow?
- What information is required before the system should do anything?
- What defaults are safe?
- Where does human judgment enter?
- What happens when the input is weird, missing, stale, or obviously cursed?
- Who owns the output?
- Where does the result go?
- What does "done" mean?
These are not glamorous questions. They do not photograph well for conference slides. They are also most of the product.
A tool pile hides this work by making it look like progress has happened. You can point at the components. You can say "we use X for orchestration and Y for serving and Z for evals." Fine. Great. I too enjoy nouns.
But a user does not experience your nouns. They experience the handoff. They
experience the missing default. They experience the weird exception that nobody
owned. They experience the part where five tools are technically connected and
somehow the work still lands back in a spreadsheet called final_v7_real.xlsx.
Agent Work Has The Same Problem
This is why I get twitchy around agent projects that start with a catalog of capabilities.
The agent can search the web. It can write emails. It can inspect a repository. It can open a ticket. It can update a CRM. It can summarize a call. It can call sixteen APIs and then confidently tell you something that requires a lawyer, a doctor, or at least a tired adult with calendar access.
Neat. What is the job?
If the job is "help with sales" that is not a job. That is a weather system. If the job is "every Monday morning, inspect these sources, compare changes in competitor positioning, draft a demand signal brief, mark uncertain claims, and send it to the founder for review" now we are somewhere.
The second version can be built. It has inputs, outputs, review, ownership, and a cadence. It gives the agent a lane. It gives the human a real place to apply judgment. It gives the system a way to fail visibly instead of spraying confidence around the office.
This is the whole trick with bespoke systems. You are not trying to win a framework beauty contest. You are trying to build the smallest useful machine that makes a real workflow easier to run.
The Practical Test
Here is the test I keep coming back to:
Can a smart user look at the system and know where to start, what will happen next, and where their judgment belongs?
If no, you do not have a product yet. You have a tool pile.
The answer is not always to simplify the technical system. Sometimes the backend really does need multiple moving parts. Kubeflow needed multiple moving parts because production machine learning work has multiple moving parts. Agents that touch real business systems will also need retrieval, permissions, logs, review states, retries, and a bunch of other unsexy plumbing.
The point is that the user should not have to mentally assemble the product from the plumbing.
Build the path. Pick the defaults. Name the handoffs. Put review where review belongs. Cut the tool list down until every remaining part has a job in the workflow.
If the stack resolves into a thing someone can run, great. If it only resolves into a diagram, congratulations on your diagram.
