Skip to main content
AI & Models9 min read

Agentic Delivery Needs an Operating Model: Lessons from Endava’s AI-Agent Rollout

Endava’s use of AI agents, ChatGPT Enterprise, and Codex points to a larger shift in software delivery: AI coding is no longer just a developer productivity experiment. For engineering leaders, the real work is building the operating model around agents, including ownership, review gates, governance, and metrics that keep modernization efforts safe and measurable.

AI coding tools are quickly moving from side experiments to core delivery infrastructure. That shift creates a new maintenance challenge: not just maintaining code, but maintaining the human and technical systems that produce it.

Endava’s AI-agent rollout is a useful signal for engineering leaders. As described in OpenAI’s profile of how Endava is redesigning software delivery around AI agents, the company is using AI agents, ChatGPT Enterprise, and Codex to accelerate software delivery, automate workflows, and build an AI-native culture across the enterprise. The takeaway is not simply that more developers will use more AI tools. It is that agentic delivery needs an operating model.

Context: AI coding has become an organizational system

For the past two years, many engineering teams have treated AI coding assistants as individual productivity tools. A developer uses a chat interface to explain unfamiliar code, generate a test, refactor a method, or draft a migration script. That can be useful, but it does not automatically change how software is delivered.

Agentic delivery is different. Agents can work across larger tasks, interact with repositories, follow instructions, propose changes, and support workflow automation. When companies introduce tools such as ChatGPT Enterprise and Codex into delivery environments, the impact reaches beyond the IDE. It touches backlog quality, code review, CI/CD, security controls, compliance, documentation, and engineering culture.

That is why Endava’s rollout matters. The initiative is explicitly aimed at accelerating software delivery, but it also focuses on automating workflows and building an AI-native culture across the enterprise. Those are operating-model concerns, not just tooling concerns.

For CTOs and engineering leaders, the question is no longer whether AI can write code. The better question is whether the organization is ready to absorb AI-generated work safely, consistently, and measurably.

The hidden maintenance problem: teams, workflows, and decisions

Software maintenance is usually framed around code: dependencies, architecture, documentation, tests, and runtime behavior. But AI adoption exposes another layer of maintenance: the delivery system itself.

If agents can generate pull requests, summarize incidents, update tests, or draft migration plans, then teams must maintain the rules that shape those activities. Who can assign work to an agent? Which repositories are in scope? What review gates are mandatory? How are generated changes labeled? What evidence is required before merge? How do leaders know the automation is improving delivery instead of increasing review burden?

Without answers, AI adoption can create a new kind of technical debt. The symptoms look familiar:

  • Pull requests that are technically correct but disconnected from product intent
  • Test additions that inflate coverage without improving confidence
  • Refactors that make local improvements while violating architectural direction
  • Documentation updates that sound plausible but drift from implementation reality
  • Security reviews that struggle to distinguish routine generated code from risky changes
  • Teams that cannot explain whether AI usage is helping cycle time, quality, or modernization goals

In other words, agentic delivery can accelerate both good and bad patterns. The operating model determines which one wins.

What Endava’s rollout suggests for modernization leaders

Endava’s approach highlights three themes that software organizations should take seriously: enterprise enablement, workflow automation, and cultural change.

1. Enterprise enablement beats isolated pilots

Individual pilots are useful for learning, but they rarely answer enterprise delivery questions. A pilot can show that a developer saved time generating unit tests. It may not show how agent-generated changes should be reviewed across regulated systems, legacy platforms, or multi-team programs.

Using enterprise-grade AI tooling changes the adoption lens. It creates room for shared policies, identity and access controls, data boundaries, auditability, and training. For modernization programs, that matters because legacy estates are usually uneven. One repository may have strong tests and clean ownership. Another may have brittle build scripts, undocumented business rules, and a release process that depends on one senior engineer.

Agentic delivery should not treat those environments equally. The operating model should define maturity tiers for repositories and workflows. For example, an agent might be allowed to create dependency update pull requests in a well-tested service, but only generate analysis and recommendations for a high-risk monolith until stronger safety rails exist.

2. Workflow automation must have explicit ownership

Endava’s rollout emphasizes automating workflows, not just generating snippets. That is where many teams will find the biggest gains, especially in maintenance-heavy work: dependency upgrades, test creation, codebase analysis, documentation refreshes, migration planning, and repetitive ticket triage.

But workflow automation without ownership creates ambiguity. If an agent drafts a pull request for a framework upgrade, who owns the outcome? The platform team? The service team? The developer who clicked the button? The engineering manager who approved the workflow?

A practical operating model assigns ownership at three levels:

  • Workflow owner: accountable for the design, guardrails, and ongoing performance of the automation
  • Code owner: accountable for domain correctness and maintainability of changes in a repository
  • Risk owner: accountable for security, compliance, or operational impact where applicable

This is especially important for modernization. Upgrade work often crosses boundaries between application code, infrastructure, security policy, and release management. Agentic workflows need named humans who can resolve tradeoffs.

3. AI-native culture requires review discipline

An AI-native culture is not a culture where every output is trusted. It is a culture where teams know how to collaborate with AI systems responsibly.

That means code review expectations must evolve. Reviewers should not merely ask whether a change compiles. They should ask whether the agent had the right context, whether the task was well-scoped, and whether the output satisfies architectural and operational expectations.

Teams may need review conventions such as:

  • Labeling AI-assisted pull requests clearly
  • Including the agent prompt or task brief when relevant
  • Requiring tests that prove behavior, not just line coverage
  • Asking for design notes on non-trivial refactors
  • Requiring human validation for business rules, security-sensitive code, and data migrations
  • Blocking generated changes that lack traceability to a ticket or approved objective

The goal is not to slow everything down. The goal is to prevent AI-generated work from becoming invisible work.

Practical implications for engineering teams

Engineering leaders can translate these lessons into practical modernization patterns.

Build agent-ready backlogs

Agents perform better when work is decomposed clearly. Vague tickets produce vague automation. For maintenance and modernization work, backlog items should include:

  • Target repositories and affected components
  • Constraints such as supported runtime versions, API compatibility, or deployment requirements
  • Acceptance criteria tied to tests, observability, and documentation
  • Known risks and rollback expectations
  • Links to architectural decisions or upgrade guides

An agent-ready backlog benefits humans too. It reduces ambiguity and makes modernization work easier to plan, review, and measure.

Create approval workflows for higher-risk changes

Not all tasks need the same level of control. Updating a README is different from changing authentication logic. A useful model is to classify agentic workflows by risk:

  • Low risk: documentation drafts, code search summaries, test scaffolding, non-production scripts
  • Medium risk: dependency updates, simple refactors, generated tests, configuration changes
  • High risk: security controls, payment flows, data migrations, infrastructure changes, public APIs

Each tier should have defined approval requirements. Low-risk work may only need standard review. High-risk work may require security review, architecture approval, staged rollout, and production monitoring.

Define what good AI-assisted code review looks like

Code review must remain a quality gate, but the checklist should adapt. Reviewers should evaluate:

  • Intent: Does the change solve the ticket or merely produce plausible code?
  • Scope: Did the agent modify only what was necessary?
  • Maintainability: Is the result consistent with local patterns and team conventions?
  • Test quality: Do tests catch meaningful regressions?
  • Operational safety: Are logging, metrics, performance, and rollback needs addressed?
  • Security: Are inputs, secrets, permissions, and dependencies handled correctly?

This keeps AI-generated changes aligned with long-term maintainability.

Measure automation quality, not just usage

Tool adoption metrics can be misleading. Counting prompts, generated lines, or active users says little about delivery outcomes. Leaders should measure whether agentic workflows improve the system.

Useful metrics include:

  • Cycle time for maintenance and upgrade tickets
  • Pull request review time and rework rate
  • Defect escape rate for AI-assisted changes
  • Test failure rates after generated changes
  • Percentage of generated pull requests merged without major rework
  • Mean time to remediate dependency or security updates
  • Developer satisfaction with review burden and workflow clarity

The best metric set balances speed, quality, and human effort. If cycle time improves but review load doubles, the operating model still needs work.

Why this matters for legacy modernization

Legacy modernization is rarely blocked by code generation alone. It is blocked by uncertainty: unclear ownership, missing tests, fragile deployments, undocumented dependencies, and limited institutional knowledge.

AI agents can help reduce that uncertainty by mapping codebases, proposing refactors, drafting tests, and automating repetitive upgrade tasks. But they cannot replace the need for engineering judgment. In fact, they make judgment more important because more change can be proposed faster.

For platforms like Vibgrate, this is the core modernization opportunity. The future is not just AI-assisted coding. It is AI-assisted maintenance systems where backlogs, repositories, dependency data, CI signals, review workflows, and governance policies work together. The teams that win will be the ones that make automation visible, reviewable, and continuously improvable.

Conclusion: the next bottleneck is the operating model

Endava’s use of AI agents, ChatGPT Enterprise, and Codex shows where software delivery is heading: faster execution, more workflow automation, and a stronger push toward AI-native engineering culture. But the durable advantage will not come from installing tools alone.

Agentic delivery needs an operating model that treats teams, workflows, and governance as maintainable assets. Engineering leaders who invest now in agent-ready backlogs, clear approval paths, updated review standards, and quality-focused metrics will be better positioned to modernize safely. The organizations that succeed will not simply generate more code. They will build delivery systems that can absorb more change with confidence.

Vibgrate CLI

See a real scan run

A replay of the actual CLI running against our test repositories — live progress, real findings, a genuine DriftScore. Nothing executes in your browser.

Replay
demo@vibgrate — bash
npx @vibgrate/cli scan
 
╭──────────────────────────────────────────╮
Vibgrate Drift Report
╰──────────────────────────────────────────╯
 
── node-turborepo (node) .
Runtime: >=18.0.0 (6 majors behind)
Frameworks:
Turbo: 1.13.4 → 2.10.13 (1 behind)
TypeScript: 5.9.3 → 7.0.2 (2 behind)
Dependencies:
1 current 1 1-behind 3 2+ behind 1 unknown
 
── @repo/admin (node) apps/admin
Frameworks:
TanStack Query: 5.103.1 → 5.103.1 (current)
React: 18.3.1 → 19.3.0 (1 behind)
React DOM: 18.3.1 → 19.3.0 (1 behind)
TypeScript: 5.9.3 → 7.0.2 (2 behind)
Vite: 5.4.21 → 8.3.0 (3 behind)
Dependencies:
3 current 9 1-behind 3 2+ behind 4 unknown
 
── @repo/api (node) apps/api
Frameworks:
Express: 4.22.3 → 5.2.1 (1 behind)
TypeScript: 5.9.3 → 7.0.2 (2 behind)
Vitest: 1.6.1 → 5.0.1 (4 behind)
Dependencies:
7 current 5 1-behind 3 2+ behind 4 unknown
 
── @repo/web (node) apps/web
Frameworks:
Next.js: 14.2.35 → 16.3.5 (2 behind)
React: 18.3.1 → 19.3.0 (1 behind)
React DOM: 18.3.1 → 19.3.0 (1 behind)
TypeScript: 5.9.3 → 7.0.2 (2 behind)
Dependencies:
2 current 6 1-behind 3 2+ behind 5 unknown
 
── @repo/config (node) packages/config
Frameworks:
TypeScript: 5.9.3 → 7.0.2 (2 behind)
Dependencies:
2 current 2 1-behind 5 2+ behind 0 unknown
 
── @repo/database (node) packages/database
Frameworks:
Prisma: 5.22.0 → 7.10.0 (2 behind)
TypeScript: 5.9.3 → 7.0.2 (2 behind)
Dependencies:
1 current 0 1-behind 3 2+ behind 1 unknown
 
── @repo/types (node) packages/types
Frameworks:
TypeScript: 5.9.3 → 7.0.2 (2 behind)
Dependencies:
0 current 0 1-behind 1 2+ behind 1 unknown
 
── @repo/ui (node) packages/ui
Frameworks:
React: 18.3.1 → 19.3.0 (1 behind)
TypeScript: 5.9.3 → 7.0.2 (2 behind)
React: 18.3.1 → 19.3.0 (1 behind)
Dependencies:
1 current 4 1-behind 1 2+ behind 1 unknown
 
── @repo/utils (node) packages/utils
Frameworks:
TypeScript: 5.9.3 → 7.0.2 (2 behind)
Vitest: 1.6.1 → 5.0.1 (4 behind)
Dependencies:
0 current 1 1-behind 2 2+ behind 1 unknown
 
Tech Stack
Frontend: React, React DOM
Meta-frameworks: Next.js
Bundlers: tsx, Turbo, Vite
CSS / UI: Autoprefixer, PostCSS, Tailwind CSS
Backend: Express
ORM / Database: Prisma, Prisma Client
Testing: Vitest
Lint & Format: ESLint, ESLint Prettier, ESLint React, Prettier, typescript-eslint
 
Services & Integrations
Auth: JWT 9.0.3
Databases: Prisma 5.22.0
 
TypeScript
v5.3.3 · strict ✔ · MIXED · target: ES2022
 
Build & Deploy
Package Managers: pnpm
Monorepo: npm-workspaces, pnpm-workspaces, turbo
 
Product Purpose Signals
Frameworks: react, nextjs
Evidence: 177
Top Signals:
- [heading] Dashboard (apps/admin/src/pages/Dashboard.tsx)
- [title] Revenue Overview (apps/admin/src/pages/Dashboard.tsx)
- [copy] workspace:* (packages/ui/package.json)
- [copy] ./dist (packages/ui/tsconfig.json)
- [copy] ./src/index.ts (packages/ui/package.json)
- [copy] @repo/config/tsconfig-base.json (packages/ui/tsconfig.json)
- [copy] @repo/ui (packages/ui/package.json)
- [copy] #3b82f6 (apps/admin/src/pages/Dashboard.tsx)
Unknowns:
- No pricing or billing evidence found.
- No integrations/connectors evidence found.
- No route structure evidence found.
 
Security Posture
Lockfile ✖ · .env ✔ · node_modules ✔
 
Platform
Native modules: turbo
 
Code Quality
Files: 36 · Functions: 183 · Avg complexity: 2.62 · Avg length: 21.13 lines
Max nesting: 2 · Circular deps: 0 · Dead code: 0%
God files: apps/admin/src/pages/Products (448 lines)
 
Database Schema
postgresql · 8 models · 1 enum
Models: Address, CartItem, Category, Order, OrderItem (+3 more)
 
Findings (16 errors, 11 warnings)
Node.js runtime ">=18.0.0" reached end-of-life on 2025-04-30 (latest: 24.0.0).
vibgrate/runtime-eol in .
TypeScript is 2 major versions behind (current: 5.9.3, latest: 7.0.2).
vibgrate/framework-major-lag in .
60% of dependencies are 2+ major versions behind in node-turborepo.
vibgrate/dependency-rot in .
@types/node is 6 major versions behind (spec: ^20.11.0, latest: 26.6.1).
vibgrate/dependency-major-lag in .
TypeScript is 2 major versions behind (current: 5.9.3, latest: 7.0.2).
vibgrate/framework-major-lag in apps/admin
Vite is 3 major versions behind (current: 5.4.21, latest: 8.3.0).
vibgrate/framework-major-lag in apps/admin
vite is 3 major versions behind (spec: ^5.0.12, latest: 8.3.0).
vibgrate/dependency-major-lag in apps/admin
TypeScript is 2 major versions behind (current: 5.9.3, latest: 7.0.2).
vibgrate/framework-major-lag in apps/api
Vitest is 4 major versions behind (current: 1.6.1, latest: 5.0.1).
vibgrate/framework-major-lag in apps/api
@types/node is 6 major versions behind (spec: ^20.11.0, latest: 26.6.1).
vibgrate/dependency-major-lag in apps/api
vitest is 4 major versions behind (spec: ^1.2.1, latest: 5.0.1).
vibgrate/dependency-major-lag in apps/api
Next.js is 2 major versions behind (current: 14.2.35, latest: 16.3.5).
vibgrate/framework-major-lag in apps/web
TypeScript is 2 major versions behind (current: 5.9.3, latest: 7.0.2).
vibgrate/framework-major-lag in apps/web
@types/node is 6 major versions behind (spec: ^20.11.0, latest: 26.6.1).
vibgrate/dependency-major-lag in apps/web
TypeScript is 2 major versions behind (current: 5.9.3, latest: 7.0.2).
vibgrate/framework-major-lag in packages/config
56% of dependencies are 2+ major versions behind in @repo/config.
vibgrate/dependency-rot in packages/config
eslint-plugin-react-hooks is 3 major versions behind (spec: ^4.6.0, latest: 7.1.1).
vibgrate/dependency-major-lag in packages/config
Prisma is 2 major versions behind (current: 5.22.0, latest: 7.10.0).
vibgrate/framework-major-lag in packages/database
TypeScript is 2 major versions behind (current: 5.9.3, latest: 7.0.2).
vibgrate/framework-major-lag in packages/database
75% of dependencies are 2+ major versions behind in @repo/database.
vibgrate/dependency-rot in packages/database
TypeScript is 2 major versions behind (current: 5.9.3, latest: 7.0.2).
vibgrate/framework-major-lag in packages/types
100% of dependencies are 2+ major versions behind in @repo/types.
vibgrate/dependency-rot in packages/types
TypeScript is 2 major versions behind (current: 5.9.3, latest: 7.0.2).
vibgrate/framework-major-lag in packages/ui
TypeScript is 2 major versions behind (current: 5.9.3, latest: 7.0.2).
vibgrate/framework-major-lag in packages/utils
Vitest is 4 major versions behind (current: 1.6.1, latest: 5.0.1).
vibgrate/framework-major-lag in packages/utils
67% of dependencies are 2+ major versions behind in @repo/utils.
vibgrate/dependency-rot in packages/utils
vitest is 4 major versions behind (spec: ^1.2.1, latest: 5.0.1).
vibgrate/dependency-major-lag in packages/utils
 
╭──────────────────────────────────────────╮
Top Priority Actions
╰──────────────────────────────────────────╯
 
1. Upgrade EOL runtime in node-turborepo
End-of-life runtimes no longer receive security patches and block ecosystem upgrades.
./.
>=18.0.0 → 24.0.0 (6 majors behind)
Impact: −10 drift points (runtime & EOL)
 
2. Fix security posture: no lockfile found
Without a lockfile, installs are non-deterministic. Run the install command to generate one and commit it.
./
Missing: package-lock.json, pnpm-lock.yaml, or yarn.lock
 
3. Upgrade Vitest 1.6.1 → 5.0.1 in @repo/api (+2 more)
4 major versions behind. Major framework drift increases breaking change risk and blocks access to security fixes and performance improvements.
./apps/api
Vitest: 1.6.1 → 5.0.1 (4 majors behind)
./packages/utils
Vitest: 1.6.1 → 5.0.1 (4 majors behind)
./apps/admin
Vite: 5.4.21 → 8.3.0 (3 majors behind)
Impact: −5–15 drift points
 
4. Reduce dependency rot in @repo/types (100% severely outdated)
1 of 1 dependencies are 2+ majors behind. Run `npm outdated` and prioritise packages with known CVEs or breaking API changes.
./packages/types
typescript: 5.9.3 → 7.0.2 (2 majors behind)
Impact: −5–10 drift points
 
5. Reduce dependency rot in @repo/database (75% severely outdated)
3 of 4 dependencies are 2+ majors behind. Run `npm outdated` and prioritise packages with known CVEs or breaking API changes.
./packages/database
@prisma/client: 5.22.0 → 7.10.0 (2 majors behind)
prisma: 5.22.0 → 7.10.0 (2 majors behind)
typescript: 5.9.3 → 7.0.2 (2 majors behind)
Impact: −5–10 drift points
 
╭──────────────────────────────────────────╮
Architecture Layers
╰──────────────────────────────────────────╯
 
Archetype: nextjs (80% confidence)
Files classified: 24 (11 unclassified)
Folders classified: 8
apps/admin/src presentation 100% 4 files
apps/admin/src/pages presentation 100% 2 files
apps/api/src/middleware middleware 100% 2 files
apps/api/src/routes routing 100% 2 files
apps/web/src/app presentation 100% 4 files
apps/web/src/app/products presentation 100% 2 files
apps/web/src/app/products/[id] presentation 100% 1 file
packages/ui/src presentation 100% 6 files
Unclassified source (sample): 11
 
presentation 15 files drift ████████████████████ 100 risk high
routing 4 files drift ████████████████████ 100 risk high
middleware 2 files drift ███████▍░░░░░░░░░░░░ 37 risk moderate
config 2 files drift ░░░░░░░░░░░░░░░░░░░░ 0 risk none
shared 1 file drift ████████████████████ 100 risk high
 
╭──────────────────────────────────────────╮
DriftScore Summary
╰──────────────────────────────────────────╯
 
DriftScore: 70/100
Risk Level: HIGH
Projects: 9
Classified: 8 nano · 1 micro · 0 small · 0 standard
Billable: 0.42 · 9 detected → 0.42 billable projects (micro-project pricing)
0.1 micro · 0.32 nano
These fractions add up across repositories, then round down to whole billable projects.
 
Score Breakdown
Runtime: ████████████████████ 100
Frameworks: ███████████▊░░░░░░░░ 59
Dependencies: ██████▌░░░░░░░░░░░░░ 33
EOL Risk: ████████████████████ 100
 
Scanned at 2026-09-17T13:19:05.436Z · 6.0s · 286 files scanned · 56 workspace files · 27 dirs
Press Run to start.