top of page
Search

Goal-Oriented vs. Procedural AI: Control the Outcome, or Control the Path?

  • Writer: Mark Kendall
    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.

 
 
 

Recent Posts

See All

Comments

Rated 0 out of 5 stars.
No ratings yet

Add a rating
Post: Blog2_Post

Subscribe Form

Thanks for submitting!

©2020 by LearnTeachMaster DevOps. Proudly created with Wix.com

bottom of page