
The Deterministic Mindset: How to Build Better AI Systems Without Overengineering Them
- Mark Kendall
- 1 day ago
- 7 min read
The Deterministic Mindset: How to Build Better AI Systems Without Overengineering Them
The biggest mistake in modern AI architecture is not using too little AI.
It is using too much.
Once teams discover Claude, Claude Code, agents, subagents, MCP servers, skills, hooks, orchestration, tool calling, and multi-agent workflows, the temptation is immediate:
Use all of it.
Build the coordinator. Add the research agent. Add the validation agent. Add the security agent. Add the review agent. Add another agent to resolve disagreements among the agents.
Before long, a problem that could have been solved with a few clear rules has become an expensive, difficult-to-debug autonomous system.
That is where the deterministic mindset becomes essential.
The goal is not to remove intelligence from the system.
The goal is to place intelligence where it creates value—and use predictable software everywhere else.
The core principle is simple:
Use deterministic software for what must be predictable. Use AI for what genuinely requires interpretation, judgment, synthesis, or adaptation.
That one distinction can improve architecture, reduce cost, simplify operations, and make AI systems far more reliable in production.
What Deterministic Means
A deterministic component follows explicit rules.
Given the same input and the same state, it should produce the same result.
Examples include:
validating a JSON schema
checking whether required fields are present
enforcing identity verification
blocking a refund above an approval threshold
limiting retries
rejecting unauthorized access
running tests before deployment
routing based on a known status code
recording an audit event
preventing writes to protected files
These are not tasks that require creativity.
They require consistency.
Claude may help interpret what a user wants, but once a requirement becomes known and enforceable, traditional software should usually take over.
The cleanest way to remember this is:
Claude interprets. Software enforces.
That is not a limitation of AI.
It is good architecture.
The Kitchen-Sink Problem
A team receives a requirement:
Process an incoming report, validate it, store valid records, and send invalid records to a review queue.
The process is fixed. The rules are known. The inputs are structured.
One team builds this:
Report Agent
↓
Validation Agent
↓
Storage Agent
↓
Review Agent
↓
Coordinator Agent
Another team builds this:
Download
↓
Validate
↓
Store
↓
Route failures
The second design is usually better.
It is cheaper, faster, more observable, and easier to test.
The first design may look more sophisticated, but sophistication is not the goal.
Reliability is the goal.
A mature AI architect does not ask:
How many AI capabilities can we fit into this solution?
A mature AI architect asks:
What is the least complicated architecture that will reliably satisfy the requirement?
That is the deterministic mindset.
Start With Normal Software
Before introducing an agent, ask:
Can this be solved with ordinary code, configuration, validation, permissions, or a workflow?
If the answer is yes, start there.
Use Claude only where the problem contains uncertainty or unstructured information.
Consider a customer message:
I was charged twice and need this fixed.
Claude can add real value by:
interpreting the request
identifying duplicate billing as the likely issue
extracting account details from the conversation
asking for missing information
summarizing the customer’s problem
explaining the resolution clearly
But deterministic systems should handle:
whether the account exists
whether the charges are actually duplicates
whether the customer has been verified
whether a refund has already been issued
whether the amount requires approval
whether the refund transaction succeeded
The model can interpret the situation.
It should not be allowed to reason around financial controls.
Deterministic Outside, Agentic Inside
The strongest production systems often combine deterministic controls with targeted agentic reasoning.
A sound architecture may look like this:
Deterministic input validation
↓
Claude interprets intent
↓
Deterministic authorization
↓
Claude selects an appropriate action
↓
Deterministic tool execution
↓
Structured result validation
↓
Claude explains the outcome
↓
Deterministic audit and completion checks
This is stronger than:
Give Claude every available tool
↓
Tell it to be careful
↓
Hope it follows the rules
The second approach may work in a demonstration.
The first approach is designed for production.
Guidance Is Not Enforcement
This distinction matters across the entire Claude ecosystem.
A prompt may say:
Always verify identity before issuing a refund.
A CLAUDE.md file may say:
Always run tests before completing a change.
A skill may say:
Follow this security review methodology.
These instructions are valuable.
But they are still guidance.
They influence model behavior. They do not guarantee it.
When something must happen every time, use a mechanism the model cannot bypass.
That may include:
hooks
CI gates
authorization services
schema validators
permissions
interceptors
approval workflows
transaction rules
policy engines
A prompt can request compliance.
A gate can require it.
That difference is one of the most important concepts in AI architecture.
Where Claude Code Capabilities Fit
The deterministic mindset does not reject Claude Code features.
It gives each feature a clear job.
Use CLAUDE.md for durable repository guidance:
coding conventions
architectural boundaries
standard commands
testing expectations
pull-request practices
repository-specific knowledge
It helps Claude work consistently.
But mandatory controls should still be backed by CI, permissions, hooks, or application logic.
Skills
Use skills for reusable methods and specialized knowledge.
Examples include:
security reviews
architecture assessments
repository readiness checks
production observability reviews
performance analysis
migration planning
A skill teaches Claude how to approach a class of problems.
It does not automatically create a hard control.
Slash Commands
Use slash commands for repeatable, explicit workflows.
Examples:
/review-security
/check-release
/generate-tests
/assess-repository
Commands improve repeatability and user experience.
They should not be confused with programmatic enforcement.
Subagents
Use subagents when work benefits from:
isolated context
specialized instructions
restricted tools
parallel execution
independent review
Do not create a subagent simply because the feature exists.
A subagent should solve a genuine boundary problem.
Hierarchical Agents
Use hierarchical agents only when the task truly contains multiple layers of responsibility.
For example:
Primary Orchestrator
├── Architecture Lead
│ ├── Integration Specialist
│ └── Data Specialist
├── Security Lead
│ ├── Identity Specialist
│ └── Policy Specialist
└── Delivery Lead
├── Test Specialist
└── Deployment Specialist
This can be appropriate for a broad enterprise assessment.
It would be excessive for a small, fixed process.
Hooks
Hooks are one of the clearest expressions of deterministic control.
A prompt can say:
Run the tests before finishing.
A hook can enforce:
The workflow cannot complete successfully unless the tests pass.
That is the difference between recommendation and control.
MCP Servers
MCP gives Claude access to tools, resources, and prompts.
But tool availability does not mean unrestricted tool use.
An MCP tool should still be protected by:
input validation
authorization
rate limits
structured errors
approval requirements
idempotency safeguards
audit logging
Claude can request an action.
The surrounding system decides whether the action is allowed.
A Practical Architecture Decision Ladder
A disciplined architect can use a simple sequence of questions.
1. Can ordinary code solve the problem?
If yes, use ordinary code.
2. Is the process fixed?
Use a deterministic workflow.
Receive → Validate → Transform → Store → Notify
3. Is judgment required at one specific point?
Insert Claude only at that point.
Receive → Claude classifies → Deterministic routing
4. Can one agent handle the task?
Use one agent.
5. Are there independent specialist tasks?
Use a coordinator with subagents.
Coordinator
├── Research Agent
├── Security Agent
└── Cost Agent
6. Are the steps dependent?
Use a pipeline.
Extract → Classify → Validate → Summarize
7. Do specialists need to challenge one another?
Allow limited peer-to-peer collaboration.
8. Must a rule always be followed?
Enforce it programmatically.
This ladder prevents a team from jumping directly to the most complicated solution.
Deterministic Workflow Versus Agentic Workflow
The difference is not whether AI is present.
The difference is where control lives.
A deterministic workflow has known steps and explicit transitions.
Input
↓
Validation
↓
Transformation
↓
Approval
↓
Execution
An agentic workflow allows the model to decide what action should happen next based on context.
Request
↓
Claude evaluates
↓
Claude selects a tool
↓
Tool result returns
↓
Claude decides whether to continue
Both are useful.
The problem begins when an agentic loop is used for a process that did not require judgment in the first place.
Use deterministic workflows when:
steps are known
rules are stable
outputs are structured
decisions are repeatable
compliance matters
errors must be easy to diagnose
Use agentic workflows when:
the path cannot be known in advance
user intent is ambiguous
information must be synthesized
tool selection depends on context
the system must adapt to novel situations
judgment is central to the task
The best architecture may combine both.
The Closer You Get to Production, the More Deterministic You Should Become
Early in a workflow, Claude may have significant freedom.
It may interpret a request, explore options, compare approaches, or generate a plan.
But as the system approaches production, the boundaries should tighten.
A useful pattern is:
Intent
↓
Interpretation
↓
Plan
↓
Structured tasks
↓
Validated implementation
↓
Deterministic gates
↓
Production
The closer the workflow gets to:
money
customer data
security
compliance
deployment
irreversible actions
production state
the less freedom the model should have.
This does not reduce the value of Claude.
It protects the value Claude creates.
The Deterministic Mindset in Intent-Driven Engineering
Intent-Driven Engineering begins with human intent.
That intent may be incomplete, ambiguous, or spread across Jira, Confluence, Figma, source code, business rules, and conversation history.
Claude is exceptionally useful at bringing that intent together.
But the process should become more structured as it moves downstream.
Human intent
↓
AI interpretation
↓
Clarified requirements
↓
Implementation plan
↓
Structured tasks
↓
Code and tests
↓
Automated validation
↓
Deployment controls
This leads to an important IDE principle:
Intent should be interpreted intelligently, but execution should become progressively more deterministic as it approaches production.
That is how intent becomes executable without becoming uncontrolled.
Do Not Confuse Complexity With Capability
A multi-agent system is not automatically more capable than a simple workflow.
A hierarchical architecture is not automatically more mature than one agent.
A long prompt is not automatically safer than a gate.
A larger context window is not automatically better than focused context.
More retries are not automatically more reliable than bounded retries with escalation.
More autonomy is not automatically better than controlled execution.
Architecture is not a contest to use the most advanced features.
It is the discipline of choosing the right amount of complexity.
The Production Test
When comparing two technically valid solutions, ask:
Which one is easier to test?
Which one is easier to observe?
Which one is cheaper to operate?
Which one fails more safely?
Which one is easier to explain?
Which one has fewer unnecessary handoffs?
Which one preserves clear ownership?
Which one enforces critical rules outside the prompt?
Which one will still make sense six months from now?
That is the production mindset.
And increasingly, it is also the certification mindset.
The strongest answer is often not the answer with the most agents.
It is the answer with the clearest boundaries.
The Rule to Carry Forward
When designing with Claude, Claude Code, agents, subagents, MCP, skills, hooks, and orchestration, remember this:
Choose the least agentic architecture that reliably solves the problem, and enforce critical requirements outside the prompt.
That does not make the system less intelligent.
It makes the system more trustworthy.
And trust—not novelty—is what turns an AI demonstration into an enterprise capability.
:::
This one would pair well with a clean architecture visual showing AI judgment in the center and deterministic controls surrounding it.

Comments