Home AI Learning, Basics & Education AI Tools, Productivity & Business Use Future AI, Trends & Advanced Concepts AI News, Risks & Industry Updates Tools About Contact
AI Tools, Productivity & Business Use

How to Build AI Agents That Actually Reach Production

Mayank 08 Mar 2026 36 min read

Introduction

The reality is simple: building an agent that works in a notebook is easy; building one that stays operational, auditable, and legally defensible is a different beast entirely—and that’s exactly where most of the hidden cost and technical debt live.

What is an AI Agent?

What is an AI Agent?
An AI agent is an autonomous software “worker” that can perceive its environment, reason toward a goal, and take actions—often multiple steps—on your behalf, not just answer a single prompt.

Core idea

Core idea
Think of it as a self-driving script: you give it a high-level objective (for example, “Close this support ticket” or “Procure a vendor for this requirement”), and the agent figures out which APIs, documents, or humans to talk to, then executes the sequence instead of waiting for you to click each step.

What makes it more than a bot

What makes it more than a bot
Unlike a traditional bot that follows fixed rules, an AI agent can:

Decide when to call a tool, retry, or ask for clarification.

Adapt over time as it sees new data or user feedback, adjusting its plans rather than just flipping a few flags.

Real-world flavor

Real-world flavor
In practice, that might be an agent that:

Scans an inbound customer email, looks up past tickets, checks SLAs, and drafts a resolution for an agent to approve.

Or an internal “ops agent” that monitors a cloud bill, finds oversized resources, and runs a resize script with a human approval guardrail.

So for our context, an AI agent is not just a chat interface; it’s a small, goal-driven miniature process layer that can persist, plan, and act across systems—exactly the kind of construct that starts to look like “real” production software, not just a prompt.

Demo vs Production

Demo vs Production
Demo AI and production AI are not the same system at different times; they are fundamentally different beasts, optimized for different pressure points and constraints. The “demo-to-production” jump is where most agents quietly die, because the environment is no longer friendly, and the stakes are real.

1. What the demo hides

  1. What the demo hides
    A demo agent is built to win a meeting, not to survive a Monday-morning traffic spike. It runs on:

Curated, clean inputs: short, well-formed prompts, no typos, no abuse, no edge-case jargon.

Limited, perfect integrations: mocked APIs, known endpoints, no latency, no downtime.

Low load: one or two users, no concurrency, no queue backlogs, no cascading failures.

Behind the scenes, the code is usually a single monolith, with minimal logging, no retries, and no fallback logic—just the “happy path” wired end-to-end. That’s enough to show: “Can this agent do X?” but not “Can this agent do X, 24/7, without breaking something critical?”

2. What production actually demands

  1. What production actually demands
    Production AI is defined by constraints, not features:

Real users, messy inputs: Long-form emails, typos, half-structu­red forms, legal language, and even deliberately adversarial prompts.

Real-time, noisy systems: APIs that time out, third-party services that throttle, database locks, and rate-limited tools.

Scale and cost: Hundreds or thousands of concurrent requests, where each extra LLM call or database scan multiplies latency and cloud bills.

At this level, subtle weaknesses explode:

Agents looping on failed steps because there’s no clear “last known state.”

Hallucinated approvals or fabricated data because the system never validates tool outputs.

Cost spikes from repeated retries or parallel agent instances processing the same ticket.

3. Demo architecture vs production architecture

  1. Demo architecture vs production architecture
    A common trap is to “polish the demo” until it looks good in production. That rarely works.

Demo architecture (what you see in the meeting):

All-in-one script: agent, LLM call, tools, and UI glued together.

No real authentication, no role-based permissions, no audit logs.

A single, static model, no fallbacks, no A/B testing.

Production architecture (what actually survives):

Layered services: separate orchestration, tool callers, state management, and observability.

Clear data contracts: well-defined schemas between agent steps and downstream systems.

Buffering and queues: message queues or task runners to manage backpressure and graceful degradation.

In practice, this means you’re not “iterating the demo into production” but rebuilding with production constraints as the starting point.

4. The “20% vs 100%” rule

  1. The “20% vs 100%” rule
    A working demo often represents only about 20% of the engineering needed for production-ready AI. The remaining 80% is invisible in a slide:

Proper error handling, retries, and meaningful fallbacks.

Observability: traces, logs, metrics, and lineage across every tool call and LLM answer.

Guardrails: content-safety filters, policy checks, and compliance-aligned outputs.

This is why the differentiator is not “Can it do the task?” but “Can it do the task safely, repeatedly, and cheaply, even when the world is broken?”

5. Practical implications for your agents

  1. Practical implications for your agents
    To build agents that actually reach and stay in production, you must design for failure from day one:

Treat the demo as a feasibility spike, not the skeleton of the product.

Bake in mechanisms for:

State persistence and recovery (so a crashed agent can resume, not restart).

Input sanitization and boundary checks (so garbage input doesn’t cascade into garbage decisions).

Cost and latency controls (budget caps, model-routing, caching, and graceful timeouts).

In short, the core insight is this: demo AI is art directed for the boardroom; production AI is engineered for everything that can go wrong. If you design your agent thinking only about the clean-path demo, you’re not building for production—you’re just building a showpiece.

Types of AI Agents

Types of AI Agents
There are two main lenses to understand “types of AI agents”: one rooted in classic AI theory (simple reflex, model-based, goal-based, utility-based, learning agents), and another grounded in how people actually build and ship agents today (functional, workflow, autonomous, and multi-agent systems). For a production-focused audience, the practical taxonomy is more useful.

1. Functional / Tool-Wrapping Agents

  1. Functional / Tool-Wrapping Agents
    These are the “dumb but reliable” workers that glue an LLM to one or two well-defined systems. They don’t plan, don’t learn, and rarely have memory; they just convert a natural-language prompt into a structured API call or internal workflow.

What they do:

Turn a user request like “Check my latest invoice status” into a REST call to an ERP or billing API and return a short, formatted answer.

React to events (new email, ticket, webhook) and trigger a fixed sequence: parse, route, tag, and maybe draft a reply.

Why they matter in production:

They’re easy to test, monitor, and harden because the behavior is mostly deterministic.

Good starting point for any stack: you can later add memory or planning on top of this layer.

2. Workflow / Goal-Based Agents

  1. Workflow / Goal-Based Agents
    This is what most teams picture when they say “AI agent”: a system that can break a high-level goal into steps and orchestrate tools until the goal is met.

What they do:

A support-ticket agent that: fetches conversation history, checks SLA, runs a triage classifier, then either drafts a reply or escalates to a human.

An HR-onboarding agent that schedules a laptop, creates accounts, sends welcome emails, and tracks missing steps across systems.

Key traits:

They maintain an internal state or plan (e.g., “Step 1 complete, Step 2 pending”).

They can backtrack or retry when a step fails, instead of stalling on a single API call.

3. Utility-Based / Optimizing Agents

  1. Utility-Based / Optimizing Agents
    These agents don’t just reach a goal; they care how well they reach it, balancing multiple objectives like cost, speed, risk, or quality.

What they do:

A cloud-cost agent that decides whether to resize a VM, move workloads, or wait for a batch job, trading off latency vs savings.

A pricing agent that considers profit margin, competitor price, and inventory to suggest a final quote.

Why they’re harder in production:

The “utility function” (how you weight cost vs latency vs risk) must be explicit and auditable.

If the weights are off, the agent can do something technically optimal but business-stupid, like over-cutting costs and breaking SLAs.

4. Learning / Adaptive Agents

  1. Learning / Adaptive Agents
    These agents change behavior over time based on feedback, logs, or explicit rewards.

What they do:

A customer-support agent that learns which canned replies get fewer follow-ups and surfaces those more often.

A recommendation-style agent inside a procurement workflow that learns which vendors are preferred for which categories based on historical approvals.

Trade-offs in production:

They’re powerful but require clear feedback loops, drift monitoring, and rollback mechanisms.

Without guardrails, they can overfit to noisy data or optimize for metrics that don’t match real-world goals.

5. Multi-Agent Systems (Teams of Agents)

  1. Multi-Agent Systems (Teams of Agents)
    This is the “orchestra” layer: instead of one agent doing everything, you have specialized agents that coordinate, delegate, and supervise each other.

What they do:

A “manager” agent that routes incoming requests to sub-agents (billing, HR, IT) and reconciles their outputs.

A trust-and-verify setup where one agent drafts an action and another agent reviews it against compliance rules before execution.

Why this matters at scale:

It lets you decompose complexity: each agent can be simpler, tested independently, and swapped out.

It also introduces coordination overhead (synchronization, dead-letter queues, negotiation protocols), which is often the hidden cost in real-world deployments.

In practice, most production-ready AI systems are hybrids: a functional agent sits at the edge, a goal-based or utility-based agent handles the core automation, and multi-agent coordination wraps around higher-value workflows. The right choice is not about “the smartest” type, but about which level of complexity you can afford to operate, monitor, and govern.

Single-Agent vs Multi-Agent

Single-Agent vs Multi-Agent
A single-agent system and a multi-agent system are not just scaling options; they represent fundamentally different engineering trade-offs in complexity, reliability, and operational overhead. The right choice depends less on “how cool” multi-agent sounds and more on how messy, risky, and multi-domain your real-world workflow actually is.

Single-Agent: Simpler, but quickly brittle
A single agent is one unified reasoning loop: the same model, memory context, and tool-calling logic handles the entire task from start to finish. This keeps complexity low because everything lives in one execution path: debugging means reading one trace, and changes rarely ripple across “other agents” because there aren’t any.

Where it shines is in narrow, well-defined use cases:

Simple automations like summarizing an email, classifying a ticket, or filling a standard form.

Sequences that fit inside a single context window and don’t cross strong security or compliance boundaries (for example, one team’s internal assistant).

The downside kicks in when the workflow grows:

As steps multiply, the agent’s reliability drops fast because each extra LLM call or tool interaction compounds error rates.

You can’t easily isolate failures: if something goes wrong in “step 4”, the whole agent either fails or has to re-read everything from the beginning, which is expensive and fragile at scale.

Multi-Agent: More complex, but more resilient
A multi-agent system splits the problem into specialized agents that coordinate, delegate, and sometimes verify each other’s work. Instead of one agent doing everything, you might have a “routing” agent, a “data-fetching” agent, a “compliance check” agent, and an “executor” agent, each with its own tools, memory scope, and guardrails.

This architecture becomes valuable when:

Workflows cross multiple domains (billing, HR, security) and need clear separation of concerns, both for code and for compliance.

You want to parallelize or pipeline parts of the workflow; for example, one agent can kick off multiple data-gathering threads while another watches for risk-scoring thresholds.

The real benefit is that failures can be localized:

If the data-fetching agent fails, the orchestrator can retry that agent or fall back to a simpler behavior without re-running the whole chain.

Specialized agents can be tuned, monitored, and rolled back independently, which is critical for production systems that must be patched without breaking the entire automation layer.

When to choose which (practical view)
Stick with single-agent if your workflow is: short, self-contained, and mostly within one domain, and you want fast iteration with minimal coordination cost. It’s often the right “Phase 1” architecture, even if you plan to split agents later.

Reach for multi-agent when:

The workflow is long, multi-step, and high-value (e.g., procurement, onboarding, risk-adjusted recommendations).

You need strong isolation between functions—say, a “business-logic” agent can’t talk directly to a payment gateway, only to a “payments” agent that enforces rules.

You anticipate that different teams will own different parts of the stack and need clear API-style boundaries.

In practice, the rule of thumb is this: start with a single, well-designed agent; only move to multi-agent once the single-agent architecture starts fighting you on reliability, cost, or governance. The “higher reliability” of multi-agent isn’t automatic; it emerges only when coordination, observability, and failure-mode design are baked in from the start.

Step-by-Step: Build Your First AI Agent

Building your first AI agent is less about the “perfect” stack and more about nailing a tight, well-scoped loop that you can harden into production. The six-step framework you listed is a great spine; here’s how each step really plays out in practice, backed by real-world patterns from early-stage agent projects.


Step 1: Define the Task (with constraints)

“Summarize emails” is a good starting point, but in reality you need to sharpen it into a constrained business task. This means:

Narrowing the scope: “Summarize only internal support emails, not all of Gmail.”

Defining inputs and outputs explicitly: “Input: raw email body + subject; Output: 3-bullet summary + one-line suggested action.”

Good practice is to perform a “shadow test”: manually do the task 5–10 times, write down every step, and then turn that into a checklist. If the human process is already messy, the agent will amplify that chaos unless you explicitly codify the rules.


Step 2: Use an AI Model (and treat it as a tool)

Starting with ChatGPT (or Claude, Gemini, etc.) is extremely common, but the key is to treat the model as a tool in a larger pipeline, not as the whole system. Common patterns:

Wrap the LLM behind a thin service layer (e.g., a Python function or API endpoint) that standardizes how it receives prompts and returns structured JSON, not free-text.

Pin a specific model version (e.g., gpt-4-0125-preview) so behavior doesn’t drift unpredictably between deployments.

At this stage you’re not “training” the model; you’re just calling it inside a script and iterating on prompts and input formatting.


Step 3: Add Logic (Input → Process → Output)

The “logic” layer is where most demos die and agents start to look like real software. For an email-summarization agent, this usually means:

Input handling:

Validate and sanitize the email (e.g., strip HTML, check for attachments you care about, reject malformed messages).

Processing:

Preprocess the text (truncate if too long, chunk if enormous), then inject a structured prompt template that tells the agent exactly what to output (e.g., “Return a JSON with summary, action_suggestion, and urgency”).

Output post-processing:

Parse the model’s JSON, validate required fields, and fail fast if the structure is broken.

This step is where you start thinking like a backend engineer: the agent has an API-like contract with the world, not just a chat bubble.


Step 4: Add Memory (when it actually matters)

Memory is often overused early on; in many first-trip agents, a simple “no-state” pattern is enough. But once you cross into multi-step workflows, memory becomes a first-class concern:

Short-term memory:

Pass a small conversation history or recent context via the model’s message array, but don’t let it grow unbounded.

Long-term memory:

Store important facts in a database or vector store (e.g., “user preferences,” “past ticket summaries”) and selectively inject them into specific prompts.

Crucially, memory should be scoped to the use case: “I remember this conversation for 24 hours” is cleaner and safer than “I remember everything, forever.”


Step 5: Add Validation (the production secret sauce)

Most tutorials skip or underplay validation, but this is where agents start to survive real-world use. For your email-summarization agent, validation might include:

Content-safety checks:

Run outgoing summaries or suggested actions through a lightweight classifier or rule-based filter to block PII, offensive language, or unauthorized actions.

Business-rule checks:

Cross-check that the suggested action is within the allowed list (e.g., “only suggest ‘escalate to L2’ if the ticket is tagged as ‘critical’”).

Output-structure validation:

Ensure the JSON schema matches expectations before passing it to the next service. If the agent gets malformed, return a clear error instead of silently corrupting state.

At this point the agent is not just “smart”; it’s defensive.


Step 6: Deploy the Agent (as a service, not a toy)

Deploying is not simply “run the script on a laptop”; it’s about packaging the agent as a service that can be versioned, monitored, and rolled back. Typical patterns:

Expose the agent behind a REST API or gRPC endpoint so that web apps, Slack bots, or internal tools can call it reproducibly.

Wrap it in a simple orchestration layer (e.g., a Celery-style task runner or a no-code workflow like n8n) that can retry failed executions and log each step.

Instrument it:

Logs: what prompt was sent, what tools were called, what output was returned.

Metrics: latency, error rate, LLM-token usage, and business-level outcomes (e.g., “how often was the summary actually used by the agent?”).

The goal at this stage is to treat the agent like any other microservice: versioned, observable, and upgradable, so you can iterate without breaking production.

Putting it together, the “step-by-step” loop is really a discipline—you start stupidly simple (“summarize emails”), then deliberately add constraints, validation, and deployment plumbing so the agent behaves less like a demo and more like a small, autonomous worker in your system.


Real Example

A clean, concrete example of an AI agent that actually reached production is an internal “Email-to-Ticket” agent used by a mid-sized SaaS support team. Instead of engineers or agents manually copying and pasting customer emails into their ticketing system, a single-agent workflow sits between the mail server and the helpdesk, turning raw emails into structured support tickets with minimal human touch.

How it works in practice
When a customer writes to support@, the agent does the following in one flow:

Ingest & clean the email:

Pull the raw message via an IMAP or webhook integration.

Strip HTML, signatures, and noise, then extract key fields: subject, body, sender, and any attachments.

Classify and route:

The agent calls an LLM with a strict prompt:

“Given this email, output JSON with issue_type (e.g., billing, bug, onboarding), priority (low/medium/high), and assignee_group (e.g., billing-team, infra, front-end).”

If the model’s confidence is below a threshold, the agent defaults to a “needs review” bucket instead of auto-assigning.

Create a ticket:

The agent posts a structured ticket to the helpdesk (e.g., Zendesk, Jira Service Management) with:

A short AI-generated summary of the email.

The parsed type, priority, and suggested team.

A link back to the original email for context.

Validation and guardrails:

Before closing the loop, the agent runs lightweight checks:

No PII leakage in the summary (e.g., masks full credit-card-like strings or bank-account-style patterns).

No negative-sentiment-only actions (e.g., automatically escalating every complaint without human review).

Why it made sense as a first agent
This workflow is a near-perfect fit for a “first-trip” agent because:

The task is narrow: only inbound support emails, not all of company comms.

The success metric is clear: faster ticket creation, fewer manual copy-paste errors, and better routing.

In real deployments of similar agents, teams report:

30–60% reduction in first-contact handling time.

Dramatically fewer misrouted tickets, because the agent learns patterns from past assignments and feedback-based corrections.

What this teaches for production
The “real” lesson from this example isn’t the fancy LLM block; it’s that the agent is built as a small, opinionated service sitting between two systems (email → ticket-ing) with clear contracts, validation, and escape hatches. That’s the pattern you should copy: start with a specific, measurable workflow, harden it with checks, and then layer on memory, multi-agent coordination, or learning once the basic loop is stable and observable.


Why Most AI Agents Fail in Production

Most AI agents never truly stabilize in production—not because the models are “stupid,” but because teams treat them like fancy chatbots instead of complex distributed systems. Industry surveys suggest roughly 80% of enterprise AI projects never leave pilot, and even among those that ship, a large share work poorly once real users and real data hit the system. The core problem is that the gap between demo and production is structural, not just a matter of “tuning the prompts.”

1. They are treated as models, not systems

A big reason agents fail is that engineers spend 90% of their time on the LLM and 10% on everything else: tooling, interfaces, state, retries, and monitoring. The demo runs against a clean, curated API and a well-shaped dataset, while production systems are full of legacy formats, null fields, rate limits, and undocumented behaviors. The moment the agent hits a poorly-documented endpoint or a field that’s empty in half the records, the whole workflow can cascade into a broken experience.

2. The “compounding error” problem

Even if each step in an agent’s workflow is 95% reliable, those small error rates multiply across multiple LLM calls and tool interactions. In a 10-step workflow, a 95%-accurate step still leaves you with a less than 60% chance of completing the full chain successfully. In demos, teams see the happy path; in production, the long tail of edge cases makes agents either fail outright or drift into incorrect, silently wrong behavior that users only catch later.

3. Missing guardrails and fallback logic

Most early agents are built for the “normal” case and have no real strategy for the exceptions. When a user uploads a malformed attachment, types half-sentence prompts, or contradicts themselves mid-conversation, the agent often loops, hallucinates, or generic-errors instead of escalating to a fallback path. Production-viable agents need to know their own “unknowns”: clear thresholds where the system decides, “This is out of scope; route to human, log a ticket, or ask for clarification,” instead of guessing confidently.

4. Ignoring real-world, adversarial inputs

Users aren’t QA testers; they’re messy, creative, and sometimes adversarial by accident. They paste half-forms, use slang, skip steps, and repurpose the agent in ways the designers never imagined. If the agent’s design hasn’t explicitly anticipated partial data, mixed intents, or testing-the-boundaries behavior, it will fail in subtle ways that are hard to debug remotely. Examples include agents that hallucinate valid-looking order IDs or tracking numbers that perfectly match the format but don’t correspond to real records, which looks fine until someone tries to use them.

5. Weak or missing observability

Unlike traditional monoliths, AI agents are probabilistic and stateful, making failures harder to reproduce and trace. Many teams ship agents with only basic logging, no structured traces of the full chain (prompt → tool calls → outputs), and no clear metrics for drift, hallucination, or latency. Without observability, you can’t distinguish between “the model drifted” and “the API started returning different formats” or “users changed how they phrase requests.” This opacity turns production incidents into guesswork, killing trust faster than any broken feature.

6. Wrong or over-ambitious use cases

Not every workflow is suited for an AI agent, and many failures are actually use-case mismatches disguised as technical issues. Teams deploy agents into high-stakes, high-empathy, or highly regulated contexts—such as delicate customer-experience negotiations or compliance-critical approvals—where the cost of being off-even slightly outweighs the automation benefit. In these cases the agent doesn’t fail because the architecture is broken; it fails because it was never the right actor for the role.

7. Scaling and infrastructure mismatch

Many agents are built on notebooks or cloud-function prototypes that never confront real-world scale. Once thousands of concurrent users hit the system, latency spikes, token costs skyrocket, and tooling starts to tip over under load. Without proper queuing, caching, model-routing, and throttling, even a well-designed agent can become unusable or financially unsustainable.

In short, most AI agents fail in production because they’re treated as isolated experiments, not as engineered components of a larger system. Success requires designing for error compounds, adversarial inputs, and operational drift from day one—and treating observability, integration, and fallbacks as first-class design concerns, not last-minute add-ons.

Key Components of Production-Ready AI Agents

Key Components of Production-Ready AI Agents
Production-ready AI agents aren’t just “prompt + model + button”; they’re engineered systems with several core components holding them together. These components span the stack: from high-level architecture down to error handling, observability, and governance.

1. Clear orchestration and planning layer

  1. Clear orchestration and planning layer
    A production agent needs a central “brain” that knows what to do, not just how to respond. This layer is responsible for:

Breaking a high-level goal into concrete steps (e.g., “resolve this ticket” → fetch history, triage, draft reply, ask for approval).

Routing tasks to the right tools or sub-agents, deciding when to retry, escalate, or stop.

In practice, this looks like a stateful orchestrator (often backed by a task queue or workflow engine) that persists the plan and can resume or roll back when something fails.

2. Tooling and integration fabric

  1. Tooling and integration fabric
    Agents are only as useful as the tools they can talk to. A production-grade agent must have:

A curated set of APIs and services (CRM, billing, ITSM, databases) exposed as well-defined tools, not raw raw-request scripts.

Clear contracts: what inputs each tool expects, what outputs it guarantees, and how it fails (429, 500, timeouts, schema changes).

This layer is where many demos crumble in production, because the integration has no resilience, no retry strategy, and no mapping between real-world data formats and the agent’s expectations.

3. Memory and context management

  1. Memory and context management
    Memory is the difference between “stateless chatbot” and “coherent worker.” For production agents, this usually means:

Short-term context: a controlled conversation history that the model can see but doesn’t let grow into a memory-bloat catastrophe.

Long-term memory: a database or vector store that remembers user preferences, past decisions, and business rules, which the agent can query and inject selectively.

Without proper memory design, agents either forget crucial context (“Why did we decide this last week?”) or get overwhelmed by irrelevant history.

4. Safety, validation, and guardrails

  1. Safety, validation, and guardrails
    A production-ready agent is one that can fail safely, not just elegantly. Critical components here include:

Input validation: checking for malformed data, missing fields, or clearly out-of-scope requests.

Output filtering: scrubbing PII, blocking unsafe actions, and enforcing business rules before the agent executes or replies.

Content-safety and policy checks, ideally layering rule-based filters with lightweight classifiers so the agent can’t ship harmful or non-compliant content.

These guardrails are not “one-off” modules; they are embedded into every step of the agent’s workflow.

5. Observability and monitoring

  1. Observability and monitoring
    You cannot manage what you cannot see. Production agents need:

Structured logs of every execution: prompt, tools called, intermediate outputs, and final decision.

Metrics and traces: latency per step, LLM-token usage, error rates, and drift-like spikes in hallucinations or failures.

With this in place, you can debug incidents, spot performance degradation, and distinguish between model drift and integration breakage.

6. Versioning, CI/CD, and governance

  1. Versioning, CI/CD, and governance
    Treating agents like code means applying the same discipline you’d use for any service: versioning, testing, and deployment gates. Important practices include:

Versioning prompts, tool-configurations, and workflows so you can roll back when a small wording change breaks the whole chain.

CI/CD-style pipelines that run automated tests, cost estimates, and security checks before letting an agent variant reach real users.

This is what separates “prototypes that break when you ship them” from “production-ready agents that can evolve safely over time.”

In sum, the key components of a production-ready AI agent are: a disciplined orchestration layer, robust tooling and memory, explicit safety guardrails, deep observability, and the same CI/CD and governance habits you’d expect from any mission-critical service. Build the agent around these pieces from day one, and it stands a real chance of surviving beyond the demo.


Tools for Building AI Agents

Tools for building AI agents fall into two broad buckets: full-powered frameworks and low-code / no-code platforms. The right choice depends on whether you want deep control over the agent’s internals or faster, UI-driven experimentation.

1. Agent-focused frameworks (for developers)

  1. Agent-focused frameworks (for developers)
    LangChain is arguably the most widely used open-source framework for building custom agents from scratch. It gives you ready-made components for tools, memory, prompts, and reasoning, so you can wire together a full-stack agent in Python without reinventing the wiring. AutoGen, backed by Microsoft, specializes in multi-agent workflows and conversational agents that can coordinate several specialized “participants” in a single task. Both are popular for research, POCs, and internal tooling because they’re flexible, extensible, and deeply integrated with the broader LLM ecosystem.

2. Low-code / no-code agent builders

  1. Low-code / no-code agent builders
    For teams that want to ship agents quickly without writing much code, tools like n8n, Botpress, and Voiceflow are common. n8n is a no-code workflow automation platform that lets you plug an LLM node into a broader pipeline of HTTP calls, databases, and CRMs, effectively turning it into an agent. Botpress lets you design conversational flows visually, attach memory and tool-calls, and deploy agents straight to chat channels. These tools are especially useful for support, IT, or marketing agents where the logic is mostly routing and transforming structured data, not exotic planning algorithms.

3. Enterprise agent platforms

  1. Enterprise agent platforms
    Enterprises that need scalability, governance, and deep integrations often lean on platforms like Moveworks Agent Studio, Google Vertex AI Agent Builder, and OpenAI GPTs. These tools bake in enterprise-grade features such as role-based access, audit logs, and pre-built connectors to ServiceNow, Workday, Slack, and Teams. They usually follow a “low-code + managed infra” model, which lets business analysts and internal devs build agents without managing the underlying servers, but at the cost of less low-level control.

4. New-style automation and “agent-first” tools

  1. New-style automation and “agent-first” tools
    A newer wave of tooling focuses on treating the agent as the default worker, not an add-on. Gumloop, for example, lets you describe an agent in plain language and then automatically wires it into tools and workflows, including built-in LLM access and MCP integrations. Other tools in the “agent-first” orbit include Relay.App, Claude Code, and Devin-style dev-agent stacks, which are geared toward automating workflows across dev, ops, and internal tooling rather than just chat.

5. Supporting tools around the agent

  1. Supporting tools around the agent
    Beyond the agent core, you’ll usually need:

A code editor or IDE (like Cursor) that understands agent-style code and can help generate prompts and tool-bindings.

An observability layer (traces, logging, latency and cost dashboards) to see how the agent is actually behaving in production.

A deployment layer—whether it’s a simple API wrapper, a cloud function, or a full-stack app built with tools like Streamlit—so the agent can be called consistently from web, Slack, or internal systems.

In practice, most teams start with a high-level framework or low-code builder (LangChain, AutoGen, n8n, or an enterprise platform), then add custom tooling, observability, and deployment glue on top to make the agent truly production-ready.


Simple AI Agent Workflow

Simple AI Agent Workflow
A simple AI agent workflow is a tight, repeatable loop that turns a real-world trigger into an automated action, with just enough reasoning and checks to stay reliable. It’s not a sprawling research project; it’s a small, opinionated pipeline that answers “Who starts it, what happens inside, and what comes out?”

1. Trigger and input capture

  1. Trigger and input capture
    Every workflow starts with a clearly defined trigger: an event or user gesture that wakes the agent. This could be:

A new email arriving in a support inbox.

A form submission on a website.

A command issued in a Slack channel or a button clicked in a dashboard.

The agent first captures structured, sanitized input: fields you care about (e.g., subject, body, user ID, priority flag) and ignores or flags anything that looks like noise or malformed data. This is the last line of defense before the agent even thinks about using an LLM.

2. Reasoning and planning (the “brain” step)

  1. Reasoning and planning (the “brain” step)
    Once the agent has clean input, it runs a reasoning step that is scoped to its job. For a simple workflow, this usually means:

Classify the input: is it a billing question, a bug report, or something that needs a human?

Decide what tool or tools to use: read a ticket, search a knowledge base, create a draft, or do nothing and just route for review.

The key is making this plan very constrained; a “simple” agent rarely does deep search or complex multi-step improvisation. It uses a small, fixed set of actions, and there’s a clear “stop condition” (e.g., “if confidence is low, route to human”).

3. Tool execution and transformation

  1. Tool execution and transformation
    After planning, the agent calls one or two tools in sequence:

A database query to fetch related records.

An API to create a ticket, send an email, or update a field.

An LLM call to rephrase the raw input into a clean summary or action item.

Each tool should be idempotent where possible (calling it twice with the same parameters doesn’t break anything) and should return data in a predictable, documented format. The agent then transforms the tool outputs into a unified, business-level result, not a raw JSON dump.

4. Validation and guardrails

  1. Validation and guardrails
    Before the agent’s decision is considered final, it runs a quick validation layer:

Check for required fields (e.g., “user ID missing” or “no SLA tag set”).

Scrub or flag PII-like patterns and filter out unsafe or invalid actions.

Compare against business rules (e.g., “don’t offer refunds above 100 unless flagged by a manager”).

If anything fails, the agent either escalates to a human, logs a warning, or returns a “safe” minimal response instead of pressing on blindly.

5. Output and handoff

  1. Output and handoff
    The final step is how the agent closes the loop:

Creating a ticket with a concise summary and clear next step.

Sending a templated but personalized reply back to the user.

Updating a dashboard or database field so the outside world can see the agent’s work.

Optionally, the workflow may loop back: if the user replies, the agent re-enters the loop with updated context, but the same constraints and guardrails still apply.

In practice, a “simple AI agent workflow” is not a free-form conversation; it’s a narrow, well-bounded sequence: trigger → clean input → classify/plan → call tools → validate → produce a controlled output. That structure is what makes it tractable to monitor, debug, and scale without exploding into chaos.


Beginner → Advanced Roadmap

Beginner → Advanced Roadmap
Moving from “I’ve seen an AI agent demo” to “I can build and ship production-grade agents” is a structured journey, not a magic leap. The beginner→advanced roadmap is really a ladder of increasing complexity: first you learn to wire a simple loop, then you add resilience, then you start designing systems that manage multiple agents, errors, and users over time.

1. Beginner: One-job, script-style agents

  1. Beginner: One-job, script-style agents
    At the start, your goal is not to build a “perfect” agent but to ship a “one-job” agent that can reliably do a single, well-defined task. Typical patterns:

A support-email summarizer that reads a ticket, infers type and priority, and writes a short reply.

A form-processor that turns a free-text request into a structured database record.

At this stage, you’re focused on:

Picking a platform (no-code like n8n or Agentforce or a framework like LangChain) and learning how to:

Define a clear input → LLM call → structured output loop.

Attach one or two simple tools (e.g., a database read and a notification API).

Learning debugging: reading logs, seeing what the model actually received, and noticing when prompts drift or tools return unexpected formats.

The mindset is: “Make one workflow robust before you try to make ten.”

2. Intermediate: Multi-step, stateful agents

  1. Intermediate: Multi-step, stateful agents
    Once you’re comfortable with a single loop, you level up to multi-step workflows that maintain state and plan. This is where you start thinking like a backend engineer, not just a prompt-tweaker. Key skills:

Orchestration and planning:

Breaking a goal (“resolve this ticket”) into a sequence of steps, each with a clear input contract and exit condition.

Adding retry logic, fallbacks, and human escalation paths instead of letting the agent crash silently.

Memory and data handling:

Storing session context in a small cache or database so the agent can remember prior steps without re-reading everything.

Using vector search or RAG so the agent can look up knowledge instead of hallucinating.

At this stage you’re building agents that can handle 3–5 steps, maintain state across those steps, and handle common failure modes reasonably well.

3. Advanced: Multi-agent systems and integrations

  1. Advanced: Multi-agent systems and integrations
    Advanced agents move from “one agent per task” to “teams of agents that coordinate.” This is where you tackle real-world scale:

Multi-agent design:

Creating specialized agents (e.g., routing agent, data-fetching agent, compliance checker) that communicate via a shared orchestration layer.

Using queues or message brokers to decouple work so the system can retry, pause, or scale portions independently.

Tooling and integrations:

Hooking agents into core business systems: CRM, ERP, ITSM, payment gateways, etc., with clear contracts and safety checks.

Building adapters so the agent doesn’t care about the underlying API version; the integration layer handles mapping and migrations.

You’re now designing systems, not just scripts: you care about latency, token usage, API stability, and what happens when an agent fails mid-workflow.

4. Expert: Production-grade, monitored, and evolving agents

  1. Expert: Production-grade, monitored, and evolving agents
    At the top of the ladder, you’re not just building agents; you’re operating them as services. This phase is about:

Observability and monitoring:

Full-stack traces across prompts, tool calls, and external APIs.

Metrics for accuracy, latency, token cost, and drift, not just “it runs without crashing.”

Safety, governance, and feedback loops:

Content-safety filters, policy-based guardrails, and audit logs so regulated workflows can still be automated.

Continuous evaluation: A/B testing, human-review feedback, and automated tests that validate that new prompt versions don’t break existing behavior.

Scaling and MLOps-style operations:

Model-routing (e.g., small model for cheap checks, big model for complex reasoning).

Versioning of agents, prompts, and tool configurations so you can roll back when something breaks.

5. The mental roadmap: mindset shifts

  1. The mental roadmap: mindset shifts
    Beyond tools, the real progression is a set of mindset shifts:

From “What can this model say?” to “How can I make this workflow robust?”

From “one big magic prompt” to small, reusable, testable components (tools, prompts, validation rules).

From “ship-and-pray” to deploying agents behind controlled rollouts, feature flags, and tight feedback loops.

If you treat this as a staged journey—starting with one-job, script-style agents, then deliberately adding state, tooling, multi-agent coordination, and observability—you’ll find that the jump from “demo” to “production-ready” is less mysterious and more like climbing a well-defined staircase.


Common Mistakes to Avoid

Common Mistakes to Avoid
Most AI agents fail not because the underlying models are weak, but because people build them around a few repeated, avoidable mistakes. These mistakes are patterns you can recognize and cut off early, if you treat agent design more like system engineering than “prompt-tweaking.”

1. Building a “God Agent”

  1. Building a “God Agent”
    One of the most common failures is trying to cram all capabilities into a single agent: support, billing, HR, and ops all in one. As soon as that agent tries to juggle five domains, prompts explode, context gets noisy, and the model starts mixing behaviors, forgetting steps, or hallucinating. The fix is to start small, single-purpose agents and then, later, add a lightweight orchestrator that routes work to specialized agents instead of making one “master” agent own everything.

2. Over-trusting the agent (no guardrails)

  1. Over-trusting the agent (no guardrails)
    Another major trap is treating the agent as an infallible executor, not a potentially risky component. When you give an agent unrestricted access to APIs, databases, or payment systems, a single prompt-injection-style misstep or hallucination can trigger refunds, data deletions, or policy-violating actions. The right pattern is to put a “governance-as-code” layer between the agent and critical systems: every high-risk action should be intercepted, logged, and, where needed, approved by a human or by a separate validation agent.

3. Weak or missing evaluation and testing

  1. Weak or missing evaluation and testing
    Many teams ship agents based on a handful of good-looking demos, then discover in production that they’re brittle, inconsistent, or drifting. Common issues include:

No structured test set to measure regressions when you change prompts or tools.

No “red-teaming” style probing to see how the agent behaves under adversarial or edge-case inputs.

The healthier habit is to treat your agent like any software: define a small corpus of golden-path and edge-case inputs, run them automatically on every change, and track metrics like task completion rate, hallucination rate, and latency, not just “does it look nice in Slack?”

4. Tool overload and unclear architecture

  1. Tool overload and unclear architecture
    A related mistake is hooking everything to one agent “just in case,” instead of carefully designing the tooling surface. When an agent has 10+ tools, the model spends more time guessing which tool to use than actually solving the task, and simple workflows become slow, noisy, and error-prone. Good practice is to:

Group tools by purpose, keep the interface small, and give tools clear, descriptive names.

Consider whether some “tool-heavy” work should really live in a separate agent instead of bloating the main one.

5. Skipping data-readiness and memory design

  1. Skipping data-readiness and memory design
    Agents are only as good as the data they can reach and reason over. Teams often plug the model into poorly structured databases, inconsistent APIs, or fragmented knowledge bases, then blame the agent when it returns wrong or incomplete answers. They also frequently ignore long-term memory design, so the agent either forgets crucial context or bloats its context window with redundant history. A solid approach is to:

Curate a small, clean, well-labeled dataset for the core task.

Use vector search and explicit state-storage (e.g., a short-term session store plus a vector DB for long-term context) instead of dumping everything into the prompt.

6. Prioritizing creativity over stability

  1. Prioritizing creativity over stability
    On day one, many teams chase “smart” or “creative” behavior instead of building a boring, predictable, stable loop. The result is an agent that surprises users in the wrong way: hallucinating offers, inventing IDs, or improvising workflows that no human can debug. A safer pattern is to:

Start with low-variance, rule-based, or “template-heavy” behavior and then add creativity in controlled, gated ways.

Make sure the agent knows when it is “out of scope” and can gracefully escalate instead of trying to fake competence.

7. Treating agents as chatbots, not as systems

  1. Treating agents as chatbots, not as systems
    Finally, many teams build agents as if they are just fancy chat interfaces, ignoring the full stack of infrastructure, monitoring, and governance that any production service requires. Without logging, tracing, error handling, and clear ownership of upgrades and rollbacks, even a technically sound agent will fail quietly in production. The antidote is to treat your agent as a microservice: versioned, instrumented, monitored, and owned by a team that can patch, roll back, and evolve it over time.

If you consciously avoid these patterns—no “God Agent,” no unchecked power, no skipping tests, no bloated tooling, and no pretending agents are magic—you dramatically increase the odds that your agent survives the jump from demo to real-world production.


Future of AI Agents

Future of AI Agents
The future of AI agents isn’t just about cooler chats; it’s about a shift from “one-off assistants” to coordinated, self-managing digital workforces embedded in every layer of business and personal software. Over the next few years, agents will move from task-following helpers to proactive, outcome-driven teammates that plan, collaborate, and operate with far higher autonomy—while still needing strong guardrails, governance, and human oversight.

1. From single agents to multi-agent ecosystems

  1. From single agents to multi-agent ecosystems
    We’re already moving past the “one agent per app” stage into multi-agent systems where specialized agents work like a team. A single orchestrator agent can route work to smaller, domain-focused agents (billing, support, HR, security), each tuned for a narrow set of tasks, while the caller doesn’t need to know which model or tool is doing the real work. This “orchestrated workforce” pattern is likely to become the default for enterprise automation, because it improves reliability, scales better, and simplifies upgrades.

2. Agents as “outcome owners,” not just task executors

  1. Agents as “outcome owners,” not just task executors
    Early agents mostly followed scripts; future agents will be expected to own outcomes. For example, a deal-management agent may not just update a CRM field, but continuously monitor timelines, suggest renegotiation points, and auto-book follow-ups to improve win-rate. These agents will need explicit goals, measurable success criteria, and the ability to learn from feedback and data drift, making them closer to “AI co-managers” than bots.

3. Proliferation of agent-first tools and marketplaces

  1. Proliferation of agent-first tools and marketplaces
    Instead of hand-building every agent from scratch, teams will increasingly compose workflows from pre-built, domain-specific agents. Expect internal “agent marketplaces” inside large companies and external catalogs where you can drop in a “contract-review agent,” “vendor-onboarding agent,” or “support-triage agent” like a plug-and-play microservice. This will dramatically speed up adoption, but it will also raise the stakes for security, policy-compliance, and version control across these reusable components.

4. Tighter integration with humans and workflows

  1. Tighter integration with humans and workflows
    Future agents will be less like standalone bots and more like teammates embedded in everyday tools—email, Slack, CRMs, BI dashboards, and even code editors. They won’t just answer questions; they’ll propose actions, ask for approval, and surface risks, while humans retain control over final decisions. Supervising agents—reviewing decisions, correcting outputs, and tuning policies—will become a core skill in many roles, just like managing human teams.

5. Greater autonomy, but also higher stakes

  1. Greater autonomy, but also higher stakes
    As models become more reliable and cost-efficient, agents will handle more complex, higher-risk decisions, from customer-service issue resolution to internal ops, procurement, and even light financial planning. Gartner-style forecasts already suggest agents could autonomously resolve most routine customer-service issues within a few years, dramatically cutting costs but also raising the damage potential of misbehaviors. That’s why the “trusted agentic AI” layer—monitoring, explainability, audit logs, and policy enforcement—will become just as important as the agents themselves.

In practice, the future of AI agents is a hybrid: more autonomy, more specialization, and deeper integration into workflows, but also more explicit governance, clearer ownership boundaries, and a new kind of human–agent collaboration. For builders, that means the real edge will shift from “Can this agent do the task?” to “Can this agent do it safely, audibly, and at scale, alongside humans?” at which point specialization, tool-design, and operations will matter more than the underlying model alone.

What You Should Do Now

What You Should Do Now
What you should do now is not “build every agent in 2026” but deliberately lock in one concrete, production-ready habit around agents and iterate from there. The space is moving fast, but the people who win are those who ship small, observable systems, not just chat demos.

1. Pick one real-world workflow and ship a “dumb-simple” agent

  1. Pick one real-world workflow and ship a “dumb-simple” agent
    Choose a narrow, painful workflow you touch regularly—support emails, daily status reports, internal approvals, or form-to-ticket conversion—and turn it into a one-job agent. The goal is to go from “I know LangChain” to “I have an agent that real users hit in production,” even if it’s behind a feature flag or only triggered by a small group.

In practice, that means:

Define the exact input and the exact output (no free-text explorations).

Wrap an LLM in a structured API, add one or two tools, and bake in logging.

Treat the agent as a microservice: version it, monitor latency and error rate, and let it degrade gracefully instead of silently breaking.

2. Design constraints, not creativity, first

  1. Design constraints, not creativity, first
    Most beginners over-optimize for “smart behavior” and under-optimize for reliability. Right now you should:

Limit the agent’s power surface: no “God Agent” that can do 10 things; instead, give it 1–2 tools and a clear list of allowed actions.

Add guardrails early: PII filters, business-rule checks, and explicit “I don’t know” or “escalate to human” paths.

Run basic tests: a small set of known-good and edge-case inputs, to see how the agent behaves when things go wrong.

Creativity can come later, once the agent is stable and observable.

3. Start treating agents like software, not chats

  1. Start treating agents like software, not chats
    From day one, train yourself to think in the stack, not just in prompts:

Understand how prompts, tools, memory, and state interact, and how failures cascade.

Hook up observability from the first project: traces, logs, and simple metrics (latency, tool errors, hallucination-like patterns).

Practice versioning: treating prompt changes, tool schemas, and deployment as changes you can roll back, not just text edited in a notebook.

If you do this on a small agent, you’ll naturally be ready when you scale to multi-agent systems.

4. Build towards a “multi-agent habit,” not a one-off project

  1. Build towards a “multi-agent habit,” not a one-off project
    Even your first agent doesn’t need to be a “swiss-knife monolith.” You can start small:

One agent for routing.

One agent for summarizing.

One agent for checking compliance.

Over time, you’ll start to see how to orchestrate them, route tasks, and share state. That’s the real skill you’re cultivating: designing teams of agents, supervision patterns (human-in-the-loop vs. auto-approval), and coordination layers.

5. Anchor your learning to a 3–6-month roadmap

  1. Anchor your learning to a 3–6-month roadmap
    Instead of hopping between random tutorials, lock in a simple, phased plan:

Months 1–2: learn Python, APIs, and basic LLM usage, and ship a very simple agent.

Months 3–4: add memory, RAG, and one or two external tools, and harden your first agent.

Months 5–6: move to multi-agent patterns, add serious observability, and deploy a second agent that coordinates or supervises the first.

If you follow this pattern—even at 2–3 hours per week—you’ll quickly cross from “dabbler” into “someone who can ship real-world AI agents.”

In short, what you should do now is: pick one concrete workflow, ship a constrained, well-monitored single-agent loop, and start treating it like a real software service. Everything else—complex multi-agent systems, advanced architectures, and broader specialization—will follow naturally once you’ve built that first “ship-to-production” muscle.


My Analysis

My Analysis
I think your piece on “Building AI Agents That Reach Production” is already strong on the what and why, but where it can really stand out is in the how it actually feels in the trenches of a real team. Most readers will agree with the concepts; what they rarely see is the honest, slightly gritty picture of how fragile agents really are, how slow it is to harden them, and how much of production-readiness lives in boring infra, not in the model itself.

What I like

What I like
Clarity on the demo vs production gap: You hit the core pain point: a demo is a happy-path storyboard; production is a 24/7 battlefield of edge cases, bad inputs, and integration surprises. That’s exactly the right mental shift for practitioners.

Practical ladder of complexity: The “Beginner → Advanced Roadmap” and “Simple Agent Workflow” sections give a clear skeleton for learners. You’re not just listing tools; you’re prescribing a progression of mindset and system design.

Focus on constraints and guardrails: The “Common Mistakes” section is one of the most valuable parts, because it names the invisible traps (God Agent, weak evaluation, skipped memory design) that burn projects in silence.

Where you can deepen it

Where you can deepen it
If you want to make this feel even more “real” and anti-generic, you could:

Add manufactured-but-realistic examples of how agents break in production:

A “perfect” demo summary agent that starts hallucinating ticket IDs when the API returns a slightly different schema.

A multi-agent system where the “routing” agent misroutes 5% of tickets because the model drifted, and no one has a dashboard to catch it.

Surface the hidden costs people don’t talk about:

The time spent on prompt versioning, drift testing, and rollback instead of “cool features.”

The fact that the hardest part is often stitching the agent into existing workflows (permissions, SLAs, audit trails) rather than wiring the LLM itself.

Push the “engineering over art” angle:

Talk less about “how to prompt” and more about “how to design contracts, retries, dead-letter queues, and observability for agents.”

Show that the real differentiator is not the model, but the discipline around failure modes, metrics, and governance.

Overall take

Overall take
Right now, this reads like a solid, opinionated, production-aware guide—one that’s already ahead of the usual “here’s a LangChain snippet” blogposts. If you lean harder into the “this is what failures look like behind the scenes” and “this is the boring, unglamorous glue that makes agents survive,” you’ll create something that resonates with engineers who’ve actually tried to ship agents, not just demo them.

In short: keep the structure, tighten the language, and inject more gritty, real-world nuance on the hidden costs and failure modes—and you’ll have a uniquely punchy, practical playbook for building agents that actually stay in production.


Conclusion

Conclusion
This isn’t about “AI agents as the next shiny thing”; it’s about learning how to ship software that happens to use models instead of only logic. The teams that survive aren’t the ones with the flashiest demos, but the ones who treat agents as fragile, probabilistic services that can fail quietly, cost silently, and break trust in one bad decision.

If you walk away with one thing, let it be this: the difference between a toy and a production-ready AI agent is not the model size, not the framework, and not the number of tools—it’s discipline. Discipline to start small, to design for the long tail of edge cases, to add guardrails before you add features, and to ship the boring, observable, versioned glue that makes the agent look stupidly simple on the outside but rock-solid on the inside.

Right now, the safest bet isn’t to build dozens of agents; it’s to build one agent the right way—sharp scope, clear contracts, strong observability, and honest error handling—and then repeat that pattern. The future of AI agents is not robots that replace humans; it’s humans who learn to build, supervise, and trust agents that can do real work without burning the house down. That’s the skill worth cultivating.

FAQ

Yes, at first it looks like a smart chatbot, but an agent is designed to own a workflow end-to-end, maintain state, call tools, and handle failures rather than just answer questions.

Start with a single agent for narrow, well-defined workflows. Move to multi-agent only when the logic, domains, or risk level makes it too complex for one system.

Break the real human process into clear steps, define inputs and outputs for each step, and then add error handling, observability, and guardrails before scaling.

Treat the LLM as a tool behind a service. Restrict its actions, validate outputs, add safety checks, and continuously monitor latency, cost, and failure patterns.

Keep it tightly scoped from day one. One domain, limited tools, and clear escape paths like “escalate to human” or “stop if risk is high.”

Demo agents run in ideal conditions. Production agents handle messy inputs, failures, scaling, cost control, security, and governance while staying reliable.

Yes. Without logs, traces, and metrics, you cannot understand failures or drift. Observability is essential for debugging and improving agents.

Keep short-term context inside the agent and long-term memory in external storage like databases or vector stores. Inject only relevant context when needed.

The biggest risk is unintended actions from incorrect outputs—like deleting data or exposing sensitive information. Always use guardrails, validation, and human approval for high-risk operations.

If it is versioned, monitored, testable, and integrated into CI/CD and incident workflows, you are building a real system. If not, it is still a prototype.