
Goal-Oriented vs. Procedural AI: Control the Outcome, or Control the Path?
- Mark Kendall
- 1 day ago
- 7 min read
Goal-Oriented vs. Procedural AI: Control the Outcome, or Control the Path?
One of the most important decisions in agentic engineering is surprisingly simple: do you tell the AI what you want, or do you tell it exactly how to get there?
As developers move from prompting into serious agentic engineering, it is easy to assume that more orchestration means a better system.
More agents. More tools. More workflow stages. More validation. More handoffs.
Sometimes that’s exactly what the system needs.
Sometimes it’s just more things that can break.
The distinction comes down to two fundamentally different ways of directing an AI system:
Goal-oriented engineering controls the outcome. Procedural engineering controls the path.
Understanding when to use each — and, more importantly, how to combine them — is becoming a core skill for developers building production AI systems.
Goal-Oriented: Tell the System What Success Looks Like
A goal-oriented instruction describes the desired result without unnecessarily prescribing the steps required to achieve it.
For example:
Implement the requested feature.
Preserve the existing architecture and coding patterns.
Reuse existing shared capabilities.
Do not introduce new dependencies unless required.
Modify only the files necessary to satisfy the requirement.
All existing and new tests must pass.
Return the changed files, test results, and any unresolved risks.
Notice what is missing.
We didn’t tell the AI which file to open first.
We didn’t tell it what search command to run.
We didn’t tell it which class to inspect.
We didn’t tell it how many tool calls to make.
We defined:
Intent + Context + Constraints + Success Criteria
The agent determines the implementation path.
That is the heart of goal-oriented engineering.
It is also one of the reasons an intent file can be so powerful. Instead of attempting to write a giant procedural script describing every development action, we describe the desired state of the system and the boundaries within which the agent is allowed to operate.
Procedural: Tell the System How to Get There
Now consider a different instruction:
1. Retrieve the Jira requirement.
2. Retrieve the architecture documentation.
3. Search the repository for the existing adapter.
4. Analyze the adapter implementation.
5. Send the findings to the architecture agent.
6. Send the approved architecture to the implementation agent.
7. Generate the implementation.
8. Run the tests.
9. If tests fail, return the failure to the implementation agent.
10. Run the tests again.
11. Run security validation.
12. Generate the pull-request summary.
This is procedural.
We’re no longer just defining the destination.
We’re defining the route.
And sometimes that is exactly what we need.
A regulated workflow may require specific validation stages.
A deployment pipeline may require an approval before production.
An external API operation may require authentication before another operation can occur.
A financial transaction may require strict sequencing.
Those are legitimate reasons to control the path.
But procedural control comes with a cost.
Every Step Is Another Place to Fail
This is the architectural reality that is easy to overlook.
Suppose a goal-oriented agent receives:
Analyze this adapter and determine whether it complies
with the architecture and security requirements.
Conceptually, the system has one major responsibility:
GOAL
↓
AGENT
↓
RESULT
Now compare that with:
GOAL
↓
RETRIEVE REQUIREMENTS
↓
ANALYZE REPOSITORY
↓
ARCHITECTURE AGENT
↓
SECURITY AGENT
↓
IMPLEMENTATION AGENT
↓
TEST AGENT
↓
VALIDATION AGENT
↓
RESULT
Each arrow represents another contract.
Each contract introduces possible failure.
The requirement retrieval can fail.
The repository search can return incomplete context.
A subagent can return malformed output.
A schema can fail validation.
A tool call can time out.
An agent can receive insufficient context.
A retry can create duplicate work.
One stage can misunderstand the output of the previous stage.
State can become inconsistent.
The orchestrator itself can make the wrong routing decision.
More procedure does not automatically create more reliability.
Beyond a certain point, additional orchestration creates additional failure modes.
The Hidden Cost of Procedural AI
The obvious cost is complexity.
The less obvious cost is ownership.
When you define the path, you now own the path.
A procedural workflow may require you to manage:
sequencing
state
context transfer
tool availability
agent permissions
structured-output schemas
validation
retries
timeouts
partial failures
rollback
idempotency
observability
error propagation
That can absolutely be justified.
But it should be justified by the problem — not simply because the technology allows us to build it.
Structured Output Is NOT Procedural Orchestration
This distinction trips developers up.
Consider this instruction:
Find token-validation vulnerabilities in /src/auth.
Use read-only tools.
Do not modify the repository.
Return:
{
"severity": "...",
"file": "...",
"line": 0,
"finding": "...",
"evidence": "..."
}
That is still largely goal-oriented.
We’ve constrained:
the objective
the scope
the available tools
the output contract
But we have not prescribed the reasoning path.
The agent can determine how to perform the investigation.
Structured output controls how the result is communicated.
Procedural orchestration controls how the work is performed.
Those are different concerns.
Tools Don’t Automatically Make Something Procedural Either
The same applies to tools.
Giving an agent access to:
search_repository
read_file
query_jira
query_confluence
run_tests
doesn’t automatically make the workflow procedural.
We could still say:
Determine whether this implementation satisfies the requirement.
Use the available tools as necessary.
Do not modify the repository.
Return your findings with supporting evidence.
The agent chooses which tools to use and when.
That’s goal-oriented tool use.
Compare it with:
Call query_jira.
Pass the result to query_confluence.
Search the repository using the requirement ID.
Read the first three matching files.
Run the architecture analyzer.
Pass its output to the security analyzer.
Now we’ve prescribed the execution path.
That’s procedural.
The Best Architecture Is Often Both
This is where things become interesting.
Enterprise AI systems don’t necessarily have to choose between goal-oriented and procedural architectures.
They can combine them.
Consider:
INTENT
│
▼
PLAN
│
▼
IMPLEMENT
│
▼
VALIDATE
The top-level workflow is procedural.
We have deliberately decided that planning happens before implementation and validation happens afterward.
But each stage can remain goal-oriented.
Planning Agent
Produce the smallest safe implementation plan
that satisfies the intent while preserving the
existing architecture.
Implementation Agent
Implement the approved plan.
Preserve existing repository patterns.
Modify only the files required.
Do not introduce new shared abstractions unless necessary.
Validation Agent
Determine whether the implementation satisfies
the intent, acceptance criteria, architecture,
security requirements, and tests.
Return evidence for each conclusion.
Notice what we’ve done.
We control the important sequence.
But we don’t micromanage the local reasoning.
That gives us a powerful pattern:
Procedural outside. Goal-oriented inside.
The Coordinator Controls the Journey
This becomes especially useful in coordinator-worker architectures.
The coordinator might control:
Analyze
↓
Plan
↓
Implement
↓
Test
↓
Validate
That sequence is intentional.
But the workers receive bounded goals.
Coordinator
│
├── Architecture Worker
│ Goal + Scope + Tools + Output Contract
│
├── Implementation Worker
│ Goal + Constraints + Acceptance Criteria
│
└── Validation Worker
Goal + Evidence Requirements
The coordinator decides who does what and when.
The worker decides how to accomplish its assigned goal.
This separation is extremely important.
It prevents the coordinator prompt from becoming a thousand-line instruction manual while still preserving governance over the overall workflow.
When Should You Add Procedure?
Procedure should solve a specific problem.
Add procedural control when you need things such as:
Deterministic sequencing
Operation B cannot occur until operation A succeeds.
Approval gates
Implementation cannot proceed until a human or system approves the plan.
Specialized agents
Security analysis must be performed by an agent with a restricted tool set.
External side effects
Database writes, deployments, financial transactions, or production changes require tighter control.
Auditability
The organization must demonstrate that specific validation steps occurred.
Recovery
The workflow must know where to resume after a failure.
Security boundaries
Certain agents must not have access to particular tools or data.
Expensive operations
You want explicit control over when costly models, APIs, or infrastructure are invoked.
These are architectural reasons for procedure.
“Because we can orchestrate agents” isn’t.
Use the Minimum Necessary Procedure
This leads to a principle that deserves to become part of modern agentic engineering:
Use the minimum necessary procedure required to safely achieve the intent.
Start with:
INTENT
↓
RESULT
If the system can safely and reliably accomplish the objective that way, great.
If you need more control:
INTENT
↓
PLAN
↓
IMPLEMENT
↓
VALIDATE
Stop there if that solves the problem.
Don’t automatically turn it into:
Retrieve
↓
Search
↓
Classify
↓
Transform
↓
Delegate
↓
Merge
↓
Validate Schema
↓
Retry
↓
Call Tool
↓
Revalidate
↓
Implement
↓
Test
↓
Analyze
↓
Approve
unless the business requirement actually requires those stages.
Every new box needs a reason to exist.
Intent-Driven Engineering Fits Naturally Here
This distinction helps explain why intent-driven development can work so well with modern coding agents.
An intent file defines:
WHAT we want
WHY we want it
WHAT constraints apply
WHAT must remain unchanged
WHAT success looks like
The agent discovers:
HOW to accomplish it
That’s a fundamentally goal-oriented contract.
But production engineering still requires governance.
So the surrounding system can provide just enough procedure:
INTENT
│
▼
ORCHESTRATOR
│
┌──────────┼──────────┐
▼ ▼ ▼
ANALYZE IMPLEMENT VALIDATE
│ │ │
└──────────┼──────────┘
▼
RESULT
Inside those boundaries, the agents retain autonomy.
That is very different from attempting to encode every development action into a giant workflow.
A Practical Mental Model
Think about the layers separately.
Intent
Primarily goal-oriented.
Defines what needs to become true.
Orchestrator
Often partially procedural.
Controls important sequencing, delegation, approvals, and recovery.
Subagents
Usually goal-oriented within a tightly defined scope.
Each gets the minimum context and tools required to accomplish its responsibility.
Tools
Perform deterministic operations.
Search a repository. Query an API. Read Jira. Execute tests. Write a file.
Structured Output
Defines contracts between stages.
It allows one agent’s result to become reliable input for another agent, workflow, tool, or application.
Put together:
INTENT
"What must happen?"
│
▼
ORCHESTRATION
"What must happen in what order?"
│
▼
AGENTS
"What goal does each worker own?"
│
▼
TOOLS
"What deterministic actions can they perform?"
│
▼
STRUCTURED CONTRACTS
"How does reliable information move between them?"
That is a much cleaner architecture than treating everything as one enormous prompt.
The Developer’s Decision
Before building another workflow stage, agent, tool call, or orchestration rule, ask:
Do I actually need to control this path, or do I only need to control the outcome?
If you only care about the outcome, define the goal, constraints, context, and success criteria.
Let the agent work.
If the path itself matters, introduce procedure.
And if only part of the path matters, control that part and leave the rest goal-oriented.
That may be the sweet spot for enterprise agentic systems:
Govern what must be governed. Structure what must be structured. Orchestrate what must be orchestrated. Leave everything else goal-oriented.
Because the objective isn’t to build the most sophisticated agentic workflow possible.
It’s to build the simplest reliable system capable of satisfying the intent.

Comments