← American Express Interview Insights

American Express·AI Engineer·Onsite - System Design / Architecture·Senior

SeniorPrefer not to say
Jun 2026

Summary

System design round at Amex for an AI Engineer role, focused entirely on long-running multi-agent systems. Pretty deep technically, more so than I expected for a financial services company. Left feeling like I'd covered maybe 60% of what they were probing for.

Questions Asked (8)

Q1

How would you design a multi-agent system that needs to run reliably for hours or days, handling crashes and restarts without losing progress?

System DesignTechnical Trade-offs
Author's notes

This is where I spent most of my time and still felt like I left things on the table.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying requirements like duration, failure modes, and consistency needs, then propose a durable orchestration layer with checkpointing and idempotent agents. Emphasize trade-offs between consistency, latency, and complexity, and tie your design to American Express's need for reliability and auditability.

Pro tip: Anchor your answer in a concrete failure scenario (e.g., an agent crashes mid-task) and walk through recovery step-by-step—this shows you think in terms of real-world resilience, not just theory.

1. Clarify requirements and constraints

Ask about expected duration, failure tolerance, consistency requirements, and whether tasks are idempotent. This ensures your design addresses the actual problem rather than over-engineering.

2. Design durable state management

Propose a persistent store (e.g., database or event log) for agent state and task progress, with periodic checkpoints. This allows recovery from crashes without losing work.

3. Implement orchestration and coordination

Use a central orchestrator or a distributed coordination service (e.g., ZooKeeper, etcd) to manage agent lifecycles, detect failures, and reassign tasks. Ensure exactly-once or at-least-once semantics with idempotent operations.

4. Handle failures and restarts

Describe a heartbeat mechanism for failure detection, automatic restart policies, and state recovery from checkpoints. Discuss how to avoid split-brain scenarios and ensure consistency.

5. Discuss trade-offs and monitoring

Acknowledge trade-offs between consistency, availability, and latency (e.g., CAP theorem). Highlight the importance of observability (logging, metrics, tracing) for debugging long-running systems.

Key Points to Mention

  • Checkpointing and persistent state to enable recovery
  • Idempotency of agent operations to handle retries safely
  • Orchestration patterns (centralized vs. decentralized) and coordination services
  • Failure detection via heartbeats and automatic restart policies
  • Exactly-once vs. at-least-once processing semantics
  • Observability and monitoring for long-running systems

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q2

How do you ensure tool calls made by agents are idempotent, and what retry and recovery semantics do you apply when something fails mid-execution?

System DesignAPI & Integrations
Author's notes

Blanked for a second on the idempotency framing in this context specifically.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by defining idempotency in the context of agent tool calls, emphasizing the use of idempotency keys and transactional boundaries. Then, outline a layered retry strategy with exponential backoff, jitter, and dead-letter queues, and explain how to handle partial failures through compensation or rollback. Finally, tie it to American Express's need for reliability and compliance in financial systems.

Pro tip: Mention that idempotency isn't just about retries—it's also about ensuring that side effects (like payments or notifications) are deduplicated at the business logic level, often using a unique transaction ID stored in a database with a unique constraint.

1. Define Idempotency for Tool Calls

Explain that each tool call should carry a unique idempotency key (e.g., UUID) generated by the agent or orchestrator. The tool's backend must check this key before executing and return the cached result if the key was already processed.

2. Design Retry Semantics

Describe a retry policy with exponential backoff and jitter, capped at a maximum number of attempts. Differentiate between retryable errors (e.g., network timeouts, 5xx) and non-retryable errors (e.g., 4xx client errors).

3. Handle Partial Failures and Recovery

For multi-step workflows, implement compensation logic (e.g., saga pattern) to undo completed steps if a later step fails. Use a dead-letter queue for failed calls after retries, and provide manual intervention or alerting.

4. Ensure Observability and Auditing

Log every tool call with its idempotency key, status, and retry attempts. This aids debugging and satisfies compliance requirements. Use distributed tracing to follow the entire agent workflow.

5. Test and Validate

Simulate failures (e.g., network partitions, duplicate requests) in testing to verify idempotency and recovery. Use chaos engineering to ensure robustness.

Key Points to Mention

  • Idempotency keys and deduplication at the API or database level
  • Exponential backoff with jitter and maximum retry limits
  • Distinguishing retryable vs. non-retryable errors
  • Compensation transactions (saga pattern) for multi-step workflows
  • Dead-letter queues and alerting for persistent failures
  • Audit logging and distributed tracing for compliance and debugging

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q3

Describe how you would implement supervision in a multi-agent system, where a parent agent monitors and can restart child agents that fail or misbehave.

System DesignTechnical Trade-offs
Author's notes

Honestly the question I felt best about.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the requirements and constraints, such as the types of failures, restart policies, and monitoring needs. Then propose a supervision architecture with a parent agent that monitors child agents via heartbeats and health checks, and can restart or escalate based on predefined policies. Discuss trade-offs like overhead, latency, and complexity, and relate to real-world systems like Erlang/OTP or Kubernetes.

Pro tip: Emphasize idempotency and state management: when restarting a child agent, ensure it can resume safely without duplicating side effects, and consider using a supervisor hierarchy for scalability.

1. Clarify Requirements and Constraints

Ask about the system's scale, failure modes, latency requirements, and whether state persistence is needed. This shows you understand the problem context before designing.

2. Design Supervision Architecture

Propose a parent agent that monitors child agents via heartbeats, health checks, or message acknowledgments. Define restart strategies (e.g., one-for-one, one-for-all) and escalation policies.

3. Define Failure Detection and Recovery

Explain how failures are detected (timeouts, error messages, anomalies) and the recovery process: restart, reset state, or reassign tasks. Include backoff and circuit breaker patterns to avoid restart loops.

4. Address State and Idempotency

Discuss how to handle state: checkpointing, event sourcing, or stateless design. Ensure operations are idempotent so restarts don't cause duplicate side effects.

5. Discuss Trade-offs and Alternatives

Compare centralized vs. hierarchical supervision, overhead of monitoring, and alternatives like self-healing agents or external orchestrators (Kubernetes). Mention scalability and fault isolation.

Key Points to Mention

  • Heartbeat/health check mechanisms for failure detection
  • Restart strategies (one-for-one, one-for-all, rest-for-one) and escalation
  • Idempotency and state management (checkpointing, event sourcing)
  • Backoff and circuit breaker patterns to prevent restart storms
  • Trade-offs: monitoring overhead, latency, complexity, scalability
  • Real-world examples: Erlang/OTP supervision trees, Kubernetes liveness probes, actor frameworks (Akka)

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q4

What communication patterns would you use between cooperating agents, and what are the tradeoffs between message passing versus shared memory or a blackboard architecture?

System DesignTechnical Trade-offs
Author's notes

Talked through async message queues for loose coupling versus a shared blackboard for agents that need low-latency reads of shared state.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by framing the problem in terms of the agents' goals, coupling, and deployment constraints, then compare message passing, shared memory, and blackboard architectures on axes like scalability, fault tolerance, and complexity. Conclude with a concrete recommendation for a financial services context, such as a hybrid approach using message passing for inter-service communication and a blackboard for shared knowledge.

Pro tip: Emphasize that in regulated industries like finance, auditability and data lineage often trump raw performance, so favor architectures that provide clear, immutable logs of agent interactions. Also, mention that the choice should be driven by the specific coordination pattern (e.g., publish-subscribe vs. request-reply) rather than a one-size-fits-all solution.

1. Clarify agent roles and coordination needs

Define what the agents are responsible for, how frequently they interact, and whether they need synchronous or asynchronous communication. This sets the context for evaluating patterns.

2. Describe common communication patterns

Outline patterns like request-response, publish-subscribe, and blackboard-based event-driven communication, explaining how each works and typical use cases.

3. Compare message passing vs. shared memory/blackboard

Analyze tradeoffs: message passing offers loose coupling, scalability, and fault isolation but adds latency and complexity; shared memory/blackboard provides low-latency access and simple data sharing but introduces contention, consistency issues, and tight coupling.

4. Map tradeoffs to business and technical constraints

Relate the tradeoffs to American Express's needs: regulatory compliance, audit trails, high availability, and real-time fraud detection. Highlight how each pattern supports or hinders these requirements.

5. Propose a hybrid or context-specific solution

Recommend a pragmatic architecture, such as using message passing for inter-agent coordination and a blackboard for shared state, and justify why it balances the tradeoffs for the given scenario.

Key Points to Mention

  • Message passing: decoupling, scalability, fault tolerance, but higher latency and message serialization overhead.
  • Shared memory: low latency, simple data sharing, but race conditions, synchronization complexity, and limited scalability.
  • Blackboard architecture: flexible, supports opportunistic problem solving, but can become a bottleneck and hard to debug.
  • Consistency models: eventual consistency vs. strong consistency and their impact on agent coordination.
  • Observability and auditability: importance of logging and tracing in regulated environments.
  • Hybrid approaches: combining patterns (e.g., message passing for control, blackboard for data) to meet diverse requirements.

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q5

How do you approach debugging and observability for agent systems that produce very long execution traces spanning many steps and possibly multiple agents?

System DesignRoot Cause Analysis
Author's notes

Distributed tracing with a shared trace ID propagated across all agent hops was my main answer.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by framing the problem: long traces from multi-agent systems are hard to debug manually, so you need a systematic approach combining structured logging, distributed tracing, and automated analysis. Then walk through a layered strategy: instrument at the agent and tool level, aggregate traces into a queryable store, and use techniques like trace summarization, anomaly detection, and replay to pinpoint failures. Emphasize that observability is not just logging but enabling fast root cause analysis and continuous improvement.

Pro tip: Mention that you treat agent traces as first-class data: you version them, sample them intelligently, and build tooling to diff traces between runs to spot regressions. This shows you think about observability as a product, not just a debugging aid.

1. Instrument comprehensively

Ensure every agent action, tool call, LLM prompt/response, and decision point emits structured events with trace IDs, timestamps, and metadata. Use OpenTelemetry or similar standards to correlate across agents.

2. Aggregate and store traces

Send traces to a centralized system (e.g., Jaeger, LangSmith, or custom data lake) that supports querying by trace ID, agent, step, or error. Store both raw and summarized versions for cost-effective retention.

3. Analyze and visualize

Build dashboards and tools to visualize trace timelines, identify bottlenecks, and detect anomalies. Use automated summarization to condense long traces into key events and failure signatures.

4. Debug and root cause

When an issue occurs, use trace replay, diffing against successful runs, and step-through debugging to isolate the faulty agent or interaction. Correlate with logs and metrics for full context.

5. Iterate and improve

Feed insights back into agent design: add guardrails, refine prompts, or adjust orchestration. Continuously monitor for regressions and use trace data to validate fixes.

Key Points to Mention

  • Distributed tracing with unique trace IDs across agents and steps
  • Structured logging with consistent schemas for easy querying
  • Trace sampling and summarization to handle volume and cost
  • Automated anomaly detection and alerting on trace patterns
  • Trace replay and diffing for root cause analysis
  • Integration with existing observability stacks (e.g., OpenTelemetry, Prometheus, Grafana)

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q6

How do you manage LLM API costs and rate limits for agents running over long time horizons, especially when multiple agents are running concurrently?

System DesignTechnical Trade-offs
Author's notes

Token budgeting per task, a central quota manager that agents request from before making calls, and graceful degradation when quotas are near exhaustion.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by framing the problem as a multi-layered optimization challenge: cost, latency, and reliability. Then walk through a concrete architecture that combines caching, batching, tiered model routing, and budget-aware orchestration, and finish by discussing how you'd monitor and adapt in production.

Pro tip: Mention that you'd treat LLM calls like any other expensive, rate-limited external dependency—instrument them, set budgets, and build fallbacks—and that you'd negotiate enterprise rate limits and cost commitments with providers upfront.

1. Instrument and baseline

Track token usage, cost per agent, latency, and rate-limit errors across all concurrent agents. Establish a baseline to identify the biggest cost drivers and bottlenecks.

2. Optimize at the request level

Reduce unnecessary calls with semantic caching, prompt compression, and batching. Use cheaper models for simple tasks and reserve expensive models for complex reasoning.

3. Orchestrate concurrency and rate limits

Implement a central scheduler or token-bucket rate limiter that queues and prioritizes agent requests. Use exponential backoff with jitter and circuit breakers to handle 429s gracefully.

4. Enforce budgets and fallbacks

Set per-agent and global cost budgets with alerts. Define fallback strategies: degrade to smaller models, cache responses, or pause non-critical agents when limits are hit.

5. Monitor, learn, and adapt

Continuously monitor cost and performance metrics, run A/B tests on model routing, and adjust policies dynamically. Use feedback loops to refine caching and batching strategies.

Key Points to Mention

  • Semantic caching and response reuse to avoid redundant LLM calls
  • Model tiering: routing simple queries to cheaper models (e.g., GPT-3.5) and complex ones to premium models
  • Centralized rate limiting and queueing for concurrent agents
  • Exponential backoff with jitter and circuit breakers for rate-limit errors
  • Per-agent and global budget enforcement with alerts and fallbacks
  • Monitoring and observability: token usage, cost per task, latency, and error rates

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q7

How would you design human-in-the-loop interrupt points in a long-running agent workflow, where a human needs to review or approve something before the agent continues?

System DesignAdaptability & Ambiguity
Author's notes

I framed it as the agent reaching a checkpoint where it serializes its state and emits a request for human review, then parks itself waiting for a signal.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the requirements and constraints, then propose a design that uses durable state, explicit interrupt points, and a human approval mechanism. Emphasize idempotency, auditability, and graceful handling of timeouts or rejections to ensure reliability in a regulated environment like American Express.

Pro tip: Highlight the importance of designing for failure and auditability from the start, as financial systems require strict compliance and traceability. Mention that you would instrument the workflow to capture human decisions and feed them back into the agent for continuous improvement.

1. Clarify Requirements and Constraints

Ask about the workflow's criticality, latency tolerance, regulatory requirements, and the human's role (approver, reviewer, or collaborator). This ensures the design meets business and compliance needs.

2. Design Durable State and Checkpointing

Use a persistent store (e.g., database or workflow engine) to save the agent's state at each step, enabling resumption after human intervention. Ensure state is versioned and immutable for audit trails.

3. Define Interrupt Points and Human Interaction

Identify where human input is required (e.g., high-risk actions, ambiguous decisions) and implement a mechanism to pause the workflow, notify the human, and collect their decision via a UI or API.

4. Handle Human Responses and Resume Workflow

Process approvals, rejections, or modifications idempotently, then resume the agent from the checkpoint. Include timeouts and escalation paths for non-responses.

5. Ensure Observability, Security, and Compliance

Log all human interactions and agent actions for auditing, enforce access controls, and encrypt sensitive data. Provide dashboards for monitoring and alerting.

Key Points to Mention

  • Idempotency and exactly-once processing to avoid duplicate actions after human intervention.
  • Durable execution using workflow engines like Temporal or AWS Step Functions.
  • Human approval UI/API with authentication and authorization.
  • Audit logging and compliance with regulations (e.g., GDPR, SOX).
  • Timeout and escalation policies for human non-response.
  • Feedback loop to improve agent decision-making based on human input.

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q8

What failure modes are specific to long-running agents, such as drift, looping, or runaway costs, and how do you mitigate them?

System DesignAdaptability & Ambiguity
Author's notes

Looping and runaway cost I had decent answers for, cycle detection in the task graph and hard token/step budgets with kill switches.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by acknowledging that long-running agents introduce unique failure modes beyond single-turn systems, then categorize them into drift, looping, and runaway costs. For each, explain the root causes and describe concrete mitigation strategies, emphasizing observability, guardrails, and adaptive control mechanisms.

Pro tip: Frame mitigations as layered defenses: prevention (e.g., goal alignment checks), detection (e.g., anomaly monitoring), and recovery (e.g., graceful degradation). This shows you think in terms of resilient system design, not just ad-hoc fixes.

1. Define long-running agents and their context

Briefly explain what constitutes a long-running agent (e.g., multi-step, persistent, or continuous operation) and why traditional failure modes are insufficient. Set the stage for the specific challenges.

2. Enumerate failure modes

List and describe the key failure modes: drift (goal/context deviation), looping (repetitive or stuck behavior), runaway costs (resource overconsumption), and others like state corruption or cascading errors.

3. Analyze root causes

For each failure mode, explain underlying causes such as lack of grounding, memory limitations, reward hacking, or unbounded exploration. This demonstrates depth of understanding.

4. Propose mitigation strategies

Detail specific techniques for each failure mode, such as periodic goal re-anchoring, loop detection with timeouts, cost budgets with kill switches, and human-in-the-loop oversight.

5. Emphasize monitoring and iterative improvement

Highlight the importance of observability (logging, tracing, metrics) and continuous evaluation to detect and adapt to new failure modes over time.

Key Points to Mention

  • Drift: periodic re-evaluation of goals and context, using techniques like self-reflection or external validation.
  • Looping: detection via repetition metrics, state hashing, or progress tracking; mitigation with timeouts, randomization, or fallback strategies.
  • Runaway costs: token/API call budgets, rate limiting, cost-aware planning, and automatic shutdown thresholds.
  • Observability: comprehensive logging, tracing, and real-time monitoring to detect anomalies early.
  • Guardrails: safety constraints, human oversight, and fail-safes to prevent harmful actions.
  • Adaptive control: dynamic adjustment of agent behavior based on performance feedback and environmental changes.

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.