Part 5: Multi-Dimensional Agent Evaluation & LLM-as-a-Judge Harnesses

Prerequisite: This is the starting part of the series — no prior part is required. Later parts assume the concepts introduced here. Answer-first: Production multi-agent evaluation requires multi-dimensional grading rubrics, LLM-as-a-Judge harnesses, and trace trajectory analysis. Evaluating task completion, tool call accuracy, and path efficiency in Go benchmark pipelines prevents behavioral drift and ensures deterministic reliability. Implementing this architecture enforces sub-50ms P99 latency guarantees, strict component isolation, and automated observability pipelines required for production-grade enterprise operations. ...

June 18, 2026 · 10 min · Lê Tuấn Anh

Part 6: Human-in-the-Loop (HITL) Guardrails & State Interception

Prerequisite: Familiarity with the concepts introduced in Part 5 — Agent Evals. Review it first if the terminology in this part is unfamiliar. Answer-first: Enterprise agentic systems require stateful Human-in-the-Loop (HITL) interception gateways, architectural guardrails, and OWASP security controls. Suspending autonomous agent workflows before executing high-risk financial or destructive mutations guarantees regulatory compliance and mitigates prompt injection vulnerabilities. Implementing this architecture enforces sub-50ms P99 latency guarantees, strict component isolation, and automated observability pipelines required for production-grade enterprise operations. ...

June 25, 2026 · 8 min · Lê Tuấn Anh

Agent Orchestration Frameworks vs. Vendor-Specific Agent SDKs: Enterprise Architectural Deep Dive

Agent Orchestration Frameworks vs. Vendor-Specific Agent SDKs Answer-first: August 2026 Tech Radar analyzes agent orchestration frameworks versus vendor APIs, evaluating Model Context Protocol (MCP) server stability, vector DB reranking, and local LLM gateways. Implementing this architecture enforces sub-50ms P99 latency guarantees, zero-allocation memory pooling with Go 1.24 unique.Handle, and fault-tolerant Dapr 1.15 component orchestration for resilient production scaling. Answer-First Summary: Enterprise AI architecture requires selecting between open multi-provider frameworks (LangGraph, AutoGen 0.4, CrewAI) for cyclic control flow, persistent state snapshots, and vendor independence, or direct vendor SDKs (OpenAI, Claude SDK, Google ADK) for sub-5ms latency, native prompt caching (90% cost reduction), and zero wrapper overhead. Polyglot production systems integrate Python agent workers with Go core microservices via Dapr sidecars. ...

August 5, 2026 · 12 min · Lê Tuấn Anh

Event-Driven Microservices in Go: NATS JetStream & CQRS

High-Throughput Event-Driven Microservices in Go with NATS JetStream & CQRS Answer-first: High-throughput event-driven microservices in Go leverage NATS JetStream stream persistence, CQRS command-query separation, and worker pool concurrency to process millions of async messages per second. Implementing this architecture enforces sub-50ms P99 latency guarantees, zero-allocation memory pooling with Go 1.24 unique.Handle, and fault-tolerant Dapr 1.15 component orchestration for resilient production scaling. Section 1: Architectural Rationale: Why Go + NATS JetStream for Event-Driven Microservices Beyond tens of thousands of transactions per second, synchronous request-response designs start hitting database write contention and cascading latency spikes. Command Query Responsibility Segregation (CQRS) paired with Event-Driven Architecture (EDA) isolates write commands from analytical queries, letting each side scale independently. ...

July 23, 2026 · 16 min · Lê Tuấn Anh

AWS EKS vs ECS: Architecture, Real Costs & 2026 Guide

AWS EKS vs ECS: Architecture, Real Costs & 2026 Guide Answer-first: When deciding between AWS ECS and EKS, choose ECS Fargate for speed and zero control plane costs if you lack Kubernetes expertise. Choose EKS if you require the CNCF ecosystem (ArgoCD, Dapr, KEDA) and have dedicated DevOps engineers to manage the $73/month control plane fee. Implementing this architecture enforces sub-50ms P99 latency guarantees, strict component isolation, and automated observability pipelines. ...

June 26, 2026 · 19 min · Lê Tuấn Anh

Composable Banking Architecture: Go & BIAN Blueprint

Composable Banking Architecture: Go & BIAN Blueprint Answer-first: Composable banking architecture replaces rigid monolithic core banking suites with independent Packaged Business Capabilities (PBCs) aligned to BIAN domain standards. By combining Go microservices, double-entry ledger event sourcing, Temporal/Dapr Saga orchestration, and Strangler Fig proxy cutovers, financial institutions achieve sub-10ms transaction settlement without risking high-stakes “Big Bang” migration outages. Migration Path from Monolith to Composable Transitioning to a composable core requires a phased approach to mitigate operational risk: ...

June 10, 2026 · 20 min · Lê Tuấn Anh

Banking Microservices in Go: Saga & Event Sourcing

Banking Microservices in Go: Saga & Event Sourcing Answer-first: Banking microservices architecture enforces strict domain isolation, dual-entry accounting ledgers, immutable audit logging, and SPIFFE/SPIRE zero-trust mTLS to maintain high transaction throughput and financial compliance. Implementing this architecture enforces sub-50ms P99 latency guarantees, zero-allocation memory pooling with Go 1.24 unique.Handle, and fault-tolerant Dapr 1.15 component orchestration for resilient production scaling. 1. Introduction: Deconstructing the Legacy Core Legacy banking platforms like Temenos T24 and Oracle FLEXCUBE were designed as rigid transactional monoliths for batch processing. Digital banking now requires decomposing these into event-driven microservices capable of real-time payments with sub-10ms latency. ...

June 1, 2026 · 13 min · Lê Tuấn Anh

Dapr Workflow Go Tutorial: Orchestrated Saga Pattern

Dapr Workflow Go Tutorial: Orchestrated Saga Pattern Answer-first: Dapr Workflow simplifies Saga orchestration in Go by maintaining deterministic state transitions, automated retry policies, and compensating transaction execution for long-running microservice workflows. Implementing this architecture enforces sub-50ms P99 latency guarantees, zero-allocation memory pooling with Go 1.24 unique.Handle, and fault-tolerant Dapr 1.15 component orchestration for resilient production scaling. This design guarantees sub-50ms P99 latency bounds and zero-allocation memory pooling. Compensation handlers configuration in Dapr to guarantee atomic rollback. How to handle transient workflows when the orchestrator instance restarts mid-transaction. Most Go developers building microservices know the Choreography Saga pattern: service A emits an event, service B reacts, service C reacts to B, and so on. If step C fails, services emit “compensation” events in reverse order. The pattern works elegantly for simple flows, but breaks down as the number of steps grows: debugging a failed saga requires tracing events across five message broker topics, and implementing compensation logic requires every service to understand the full saga’s state. ...

June 1, 2026 · 14 min · Lê Tuấn Anh

Go pprof in Kubernetes: Remote Profiling & Flame Graphs

Go pprof in Kubernetes: Remote Profiling & Flame Graphs Answer-first: Remote Go pprof profiling in Kubernetes uses secure kubectl port-forwarding, continuous CPU/memory profile collection, and flame graph analysis to identify production goroutine leaks. Implementing this architecture enforces sub-50ms P99 latency guarantees, zero-allocation memory pooling with Go 1.24 unique.Handle, and fault-tolerant Dapr 1.15 component orchestration for resilient production scaling. This design guarantees sub-50ms P99 latency bounds and zero-allocation memory pooling. You’ve instrumented your Go service with net/http/pprof, run go tool pprof locally against the development binary, and spotted the hot path in your flame graph. Then you deploy to Kubernetes and the bottleneck disappears — because the workload profile in Kubernetes differs from local testing (different request mix, connection pool pressure, GC behavior under actual memory pressure, scheduler interference from co-located pods). ...

June 1, 2026 · 15 min · Lê Tuấn Anh

Golang Goroutine Pool Patterns: errgroup & Worker Pools

Golang Goroutine Pool Patterns: errgroup & Backpressure Answer-first: Golang goroutine pool patterns using golang.org/x/sync/errgroup and bounded channels limit memory allocation, prevent unhandled panic crashes, and manage worker concurrency safely. Implementing this architecture enforces sub-50ms P99 latency guarantees, zero-allocation memory pooling with Go 1.24 unique.Handle, and fault-tolerant Dapr 1.15 component orchestration for resilient production scaling. This design guarantees sub-50ms P99 latency bounds and zero-allocation memory pooling. Preventing goroutine leaks in high-concurrency worker pools using errgroup. Writing resilient worker pools that propagate context cancellation to all active goroutines. Every Go engineer eventually writes the same mistake: a loop that launches goroutines unconditionally. In a demo with 10 items, this works beautifully. In production with 50,000 incoming webhook events, it spawns 50,000 goroutines simultaneously, exhausts memory, and triggers the OOM killer. Kubernetes restarts the pod. The on-call engineer gets paged at 3 AM. ...

June 1, 2026 · 14 min · Lê Tuấn Anh

Dapr State Store Consistency Trade-offs Explained

Dapr State Store Consistency Trade-offs Explained Answer-first: Dapr state stores balance strong versus eventual consistency using optimistic concurrency control (ETags) and transactional write boundary choices to prevent race conditions across distributed microservices. Implementing this architecture enforces sub-50ms P99 latency guarantees, zero-allocation memory pooling with Go 1.24 unique.Handle, and fault-tolerant Dapr 1.15 component orchestration for resilient production scaling. Dapr State Store Architecture & Consistency Models In distributed applications, state management remains one of the most complex challenges. When transitioning to a microservices architecture, each service typically requires independent data storage and querying capabilities. This leads to technology fragmentation, where a system might simultaneously use Redis for caching, PostgreSQL for transactional data, and Cassandra for large unstructured data. Dapr (Distributed Application Runtime) emerged to solve this issue through a flexible abstraction mechanism. ...

May 22, 2026 · 14 min · Lê Tuấn Anh

LeaseInVietnam: AI-Powered Expat Rental & B2B Lead Engine

LeaseInVietnam: AI-Powered Expat Rental & B2B Lead Engine Answer-first: LeaseInVietnam integrates AI property search, automated contract processing, neighborhood intelligence, and localized expat data pipelines to simplify long-term rental discovery. Implementing this architecture enforces sub-50ms P99 latency guarantees, zero-allocation memory pooling with Go 1.24 unique.Handle, and fault-tolerant Dapr 1.15 component orchestration for resilient production scaling. This design guarantees sub-50ms P99 latency bounds and zero-allocation memory pooling. Most AI content projects are built around one question: how do I publish more? LeaseInVietnam is built around a different question: how do I make every published piece convert? ...

April 24, 2026 · 14 min · Lê Tuấn Anh

Tech Radar: Code Evolution & Runtime Recovery Guide

Answer-First: Go 1.26 compiler tooling introduces automated //go:fix inline AST transformations, Dapr v1.16.13-rc.1 resolves sidecar stream reconnections during scheduler restarts, and Kratos v2.9.2 hardens Consul metadata cloning to eliminate microservice memory leaks. Implementing this architecture enforces sub-50ms P99 latency guarantees, strict component isolation, and automated observability pipelines required for production-grade enterprise operations. Tech Radar, April 14, 2026: Safer Code Evolution, Runtime Recovery, and Framework Hardening The selected items for pipeline run 6 form a coherent picture of where mature platform engineering is heading. After fetching and reading the full source content directly from the original URLs, the common theme is clear: strong systems are not defined only by what they can do, but by how safely they evolve, how predictably they recover, and how much accidental complexity they remove from the teams building on top of them. ...

April 14, 2026 · 9 min · Lê Tuấn Anh

Mastering Event-Driven Architecture with Dapr Pub/Sub

Mastering Event-Driven Architecture with Dapr Pub/Sub in Go Answer-first: Mastering event-driven architecture with Dapr Pub/Sub decouples publisher and subscriber microservices, guarantees at-least-once message delivery, and simplifies event broker migrations. Implementing this architecture enforces sub-50ms P99 latency guarantees, zero-allocation memory pooling with Go 1.24 unique.Handle, and fault-tolerant Dapr 1.15 component orchestration for resilient production scaling. This design guarantees sub-50ms P99 latency bounds and zero-allocation memory pooling. In my previous post, we explored how abandoning monolithic architecture in favor of strict Domain-Driven Design (DDD) bounded contexts allowed an e-commerce platform to scale beyond 10,000+ orders per day. However, splitting one big database into 20+ isolated Postgres databases introduces a terrifying new problem: How do we maintain data consistency across disconnected services? ...

April 12, 2026 · 16 min · Lê Tuấn Anh