
After studying this material, you should be able to:
Agentic Engineering = using AI agents (LLM-powered systems) that can autonomously take sequences of actions, use tools, and complete multi-step tasks — going beyond simple chat or autocomplete
Think of it as a ladder:
Level 1: Autocomplete (GitHub Copilot early days)
↓
Level 2: Chat UI (ask questions, get answers)
↓
Level 3: API-based LLM access (programmatic use)
↓
Level 4: CLI tools with agent mode
↓
Level 5: Full agentic loops (agent plans, acts, evaluates, repeats)
Zalando climbed this ladder over 2.5 years, and their experience teaches us what each step requires.
When 250+ engineering teams all need LLM access, you cannot have each team manage their own API keys, model choices, and billing. A central proxy solves this.
Engineer's Tool (Claude Code, CLI, Chat UI)
↓
LiteLLM Proxy ←── Single control point
↓
┌───────────────────────────────┐
│ OpenAI │ AWS Bedrock │ Google Vertex │
└───────────────────────────────┘
| Feature | What It Does | Why It Matters |
|---|---|---|
| Post-call hooks | Track costs anonymously | Know what you're spending without exposing user data |
| Pre-call hooks | Enforce client version upgrades | Prevent outdated tools from causing issues |
| Prompt caching auto-injection | Reduces redundant token processing | Cuts costs automatically, even for users who don't know about caching |
| Max requests before restart | Forces restart after 20k requests | Mitigates memory leaks in LiteLLM |
| User-Agent tracking | Identifies which tools are calling the proxy | Enables adoption measurement (MAU, WAU) |
┌─────────────────────────────────────────────┐
│ LLM Proxy (foundation) │
├──────────────┬──────────────┬───────────────┤
│ Chat UI │ CLI │ IDE Plugins │
│ (fork of OSS)│(custom-built)│(GitHub Copilot│
│ │ │ + others) │
└──────────────┴──────────────┴───────────────┘
The CLI started as a hackathon project (August 2024) for simple terminal model access. It grew organically into something much more powerful:
Original purpose: Run LLM commands in terminal scripts
What it became:
WITHOUT token injection:
User → hardcodes API secret in config file → SECURITY RISK
WITH token injection (Zalando's approach):
User → CLI handles auth automatically → No secrets in config files
This matters especially as non-engineers start using LLM tools — they have less security intuition.
MCP is a standard that lets AI agents connect to external tools and data sources. Think of it as a plugin system for AI agents.
Agent
↓
MCP Server (e.g., internal API catalogue, documentation)
↓
Real data / actions
Problem: Each MCP server needs authentication
Each user needs to configure credentials
Non-engineers can't handle this complexity
Solution:
MCP Server → Protected by default OAuth filter (automatic)
User's CLI → Injects auth token automatically
Result: User just uses the tool, security is handled
Zalando observed measurable changes in how code is submitted:
Before widespread AI coding:
Most PRs: small, focused changes
After (especially post-Sonnet 4, Q2 2025):
Growth in larger PR buckets: [500-1k lines], [1k-2k lines]
Why this happens: AI agents generate more code faster, leading engineers to submit larger batches of changes.
Team responses varied:
Zalando tracked Cyclomatic Complexity Number (CCN) — a measure of how complex code logic is.
Cyclomatic Complexity = number of independent paths through code. Higher = harder to test and maintain.
What they found across 4 codebases:
Codebase Type | AI Adoption Pattern | Complexity Pattern
-----------------------|---------------------|-------------------
New (Go, AI from day1) | Full from start | Builds up fast, then plateaus
Existing (Go, OSS) | Added at commit 3000+| Inflection point visible
Existing (Java) | Gradual adoption | Gradual increase
Reference (Java, no AI)| None | Baseline/stable
Key insight: AI amplifies existing patterns — both good practices AND bad ones.
AI-generated commit messages cluster around 5,000 characters — much longer than human-written ones. In one extreme case, a commit message included a full unit test execution log.
Lesson: Add pre-commit hooks to enforce commit message length limits.
More PRs + larger PRs = reviewers become bottlenecks. Lead time (time from PR creation to merge) increases.
PR Created
↓
Risk Assessment Bot evaluates:
- What files changed?
- Does it break backwards compatibility?
- Is it documentation only?
- Does it touch configuration files?
↓
┌─────────────────────────────────────────┐
│ LOW RISK (33% of PRs) → Auto-approved │
│ MEDIUM RISK → Needs 1 human reviewer │
│ HIGH RISK → Full review required │
└─────────────────────────────────────────┘
Engineers started structuring their PRs differently to maximize low-risk approvals
Example:
Before: One big PR mixing backwards-compatible changes + breaking changes
After: PR #1 (low risk, backwards-compatible) → ships fast
PR #2 (medium risk, breaking change) → separate review
This is governance through incentives, not mandates.
250+ teams innovating independently
vs.
Need for consistency, security, and shared learning
They explicitly chose NOT to mandate a single tool or approach. Instead:
Risk: Becoming locked into one LLM provider
Mitigation:
- Proxy supports multiple providers (OpenAI, AWS Bedrock, Google Vertex)
- No mandated single tool
- Reference configurations for multiple coding agents
- Open tools preferred over closed ecosystems
Observed human challenge: Even when switching costs are low, engineers become psychologically attached to their preferred coding agent and model style. This is a real adoption barrier.
Early Adopters (need cutting-edge exchange)
→ LLM Guild weekly sessions (1hr, 20-min slots, recorded)
→ Hackathons with guided topics
Intermediate Users (need structured learning)
→ GenAI Labs (on-site, 20 people, 1-4 hours, pair exercises)
Broad Organization (need scalable training)
→ Monthly trainings (converted from successful Labs)
→ Trainer pool recruited from Lab attendees
"Using coding agents usually inhibits learning"
When training sessions aim to build new skills, explicitly tell attendees when to code manually. The temptation to use AI as a shortcut prevents skill development.
Agent skills = reusable instructions/prompts that guide AI agents to perform specific organizational tasks correctly.
Generic AI Agent + Agent Skill = Organizationally-aware AI Agent
Centralized Skill Collection
├── By Discipline
│ ├── Data engineering skills
│ ├── Frontend skills
│ ├── SRE skills
│ └── Backend engineering skills
├── By Language
│ ├── Java skills
│ └── Go skills
└── Migration Skills (most popular)
├── Multi-arch build adoption
├── Platform tool migrations
└── Infrastructure practice updates
Migration skills solve a real pain point: when a platform team wants 250 teams to adopt a new tool, they can encode the migration steps as an agent skill. Teams run the skill against their codebase instead of reading documentation and figuring it out manually.
Current State:
Individual engineers use coding agents locally
Future State:
Teams deploy agents as services on shared infrastructure
| Component | Purpose |
|---|---|
| Agent Platform | Deploy agents without managing sandboxing |
| kagent | Kubernetes runtime for agents (OSS) |
| Identity Broker | Handles auth delegation chains between agents and MCP servers |
| Token Vault | Secure credential management for agent-to-service calls |
Human User → Agent → MCP Server → Internal API
Each arrow requires authentication.
Who is acting? The human? The agent? Both?
What permissions does the agent have on behalf of the user?
Identity Broker solves this by:
- Capturing delegation chains
- Brokering between different OAuth2 systems
- Implementing on-behalf-of flows
Agent Platform (future)
/ \
Agent Skills Identity/Auth
\ /
LLM Proxy (foundation)
|
Multiple LLM Providers
Mandate → Resistance → Slow adoption
Transparency + Incentives → Natural alignment → Faster adoption
Good engineering practices + AI = Faster good outcomes
Bad engineering practices + AI = Faster bad outcomes
Therefore: Engineering fundamentals matter MORE, not less, with AI
Using AI to learn AI tools → Inhibits skill development
Manual practice first → Builds genuine understanding → Better AI use later