People
- Prod engineering owner named and staffed
- On-call runbook exists and was exercised
- Domain engineers trained on eval regression, not only prompts
- Risk partner with SLA for privilege expansion
- Postmortems feed shared library (CoE or platform)
Assess enterprise AI readiness across people, process, data, and operating model — a diagnostic for sequencing capability building.

Vendor maturity frameworks score your cloud spend and leave your portfolio unchanged. A useful enterprise AI maturity model answers a narrower question: what should we build next quarter — and what will waste money if we build it too early? Assess readiness across people, process, data, and operating model. Use the score to sequence capability building, not to win a benchmark press release.
Four dimensions cover most production failures. Skip any one and the model lies.
| Dimension | Level 1 (ad hoc) | Level 3 (defined) | Level 5 (optimized) |
|---|---|---|---|
| People | Part-time champions | Named owners per workflow | Federated AI-native skill base |
| Process | Pilots without gates | Graduation + kill criteria | Tiered autonomy with SLAs |
| Data | Ad hoc exports | Job-class data contracts | Shared retrieval products |
| Operating model | Shadow API keys | Gateway + eval on rails | Versioned control plane |
Level 5 everywhere is fantasy. Goal is minimum viable maturity per job class — not uniform excellence.
A bank can be Level 4 on internal search with citations and Level 1 on customer-facing agents. Aggregate scores hide where investment belongs. Score each job class separately.
Start from failures you have seen, not from a consultant's generic slide:
from dataclasses import dataclass, field
from enum import IntEnum
class Level(IntEnum):
AD_HOC = 1
REPEATABLE = 2
DEFINED = 3
MANAGED = 4
OPTIMIZED = 5
@dataclass
class DimensionScore:
people: Level
process: Level
data: Level
operating_model: Level
def weakest(self) -> str:
pairs = {
"people": int(self.people),
"process": int(self.process),
"data": int(self.data),
"operating_model": int(self.operating_model),
}
return min(pairs, key=pairs.get)
@dataclass
class JobClassAssessment:
name: str
scores: DimensionScore
target_autonomy_tier: int # 0 read .. 3 bounded auto
def blockers(self) -> list[str]:
blockers: list[str] = []
s = self.scores
if self.target_autonomy_tier >= 2 and int(s.process) < 3:
blockers.append("Raise process to DEFINED before write autonomy")
if int(s.data) < 2:
blockers.append("Establish job-class data contract")
if int(s.operating_model) < 3:
blockers.append("Ship gateway + eval regression on rails")
if int(s.people) < 2:
blockers.append("Name prod engineering owner")
return blockers
assessment = JobClassAssessment(
name="Contract clause extract",
scores=DimensionScore(
people=Level.DEFINED,
process=Level.REPEATABLE,
data=Level.DEFINED,
operating_model=Level.DEFINED,
),
target_autonomy_tier=2,
)
for b in assessment.blockers():
print(b)
Run assessments with domain leads and platform — not as self-graded checkbox theater.

Use weakest dimension to pick the next quarter's work:
| Weakest dimension | Typical next investment | Delay until resolved |
|---|---|---|
| People | Name owners; fund paired shipping | Portfolio expansion |
| Process | Publish graduation/kill criteria; tiered risk | Write autonomy |
| Data | Minimum data contract + access | Cross-domain RAG at scale |
| Operating model | Gateway, logging, eval CI | Model bake-offs, agent hype |
Chasing Level 5 models at Level 1 operating model repeats pilot graveyards.
Keep the model lightweight:
Use these as a starting checklist — not a mandatory scorecard. Adapt to your job classes and risk appetite.
Observable criteria by dimension
4 dimensions
Steering committees want progress without fiction. Report:
Do not report average maturity score alone. Averages hide stagnation in high-risk classes.
| Funding tranche | Requires | Typical unlock |
|---|---|---|
| Pilot | People ≥ 2, process ≥ 1 | Sandbox with synthetic data |
| Production | All dimensions ≥ 3 for job class | Gateway namespace + on-call |
| Autonomy expansion | Process ≥ 4, operating model ≥ 4 | Write tools within policy |
| Portfolio scale | Federated patterns reused | Fast-track for repeat job classes |
Transparent gates reduce politics. Domains know what to build to unlock budget instead of lobbying for exceptions.
An enterprise AI maturity model is a diagnostic for sequencing capability building across people, process, data, and operating model — scored per job class, refreshed quarterly, tied to evidence and funded actions. Use weakest-dimension analysis to pick next quarter's investments and to delay autonomy or portfolio expansion when gaps predict incident or stall. The point is not a high maturity number. It is knowing what to build next so production workflows compound instead of pilots accumulating.
Be among the first to explore interactive reference architectures, implementation playbooks, and premium engineering resources at launch.
Recommended reading based on this topic.
Enterprise AI operating models must evolve with capability, maturity, and priorities — not stay frozen after a one-time setup.
Read ArticleA practical framework for choosing enterprise models: task fit, context and tool needs, cost-latency envelopes, eval gates, and when to use routers instead of one frontier model.
Read ArticleA well-scoped AI CoE accelerates standards, shared learning, and cross-BU reuse — without owning every use case.
Read Article