This article is part of our Opinions section, where we invite industry professionals to share their views on the most pressing technology questions of our time.
Weโre living in the age of AI. Everyone has a slide about โagents,โ โcopilots,โ and โproductivity.โ And yet, if you look at what many enterprises actually deliver, it often feels like weโre going backwards. Features take longer. Systems get more complicated. Reporting becomes a debate club. Delivery teams burn out. Not because the cloud is hard, or Kubernetes is hard, or AI is immature. Most transformations fail upstream of all of that.
They fail at meaning.
When an organisation doesnโt share context, everything else gets contaminated: architecture, development, testing, security, reporting, and even AI augmentation. Systems can behave โcorrectlyโ and still deliver the wrong outcome. Multi-year programmes collapse under their own semantic debt. Code ships late. The business stops trusting IT. IT stops trusting the business. Everyone starts asking for โmore governance.โ The more tooling you pile on top of all this, the faster you scale the damage.
Startups seem to get it right
In early-stage startups, delivery often feels easy. Two or three people collectively perform every role: product owner, analyst, UX designer, architect, developer, tester. Context switching happens all the time, almost unconsciously. When the same person defines the business problem, sketches the workflow, and writes the code, misunderstandings are corrected immediately. Thereโs no translation layer, because thereโs nobody to translate between.
Large enterprises work very differently. Roles are separate. Different departments are staffed by different people with different incentives, vocabulary, and mental models. Coordination depends on language travelling through tickets, documents, meetings, chat messages, and diagrams. Thatโs where things start to break.
When words stop meaning the same thing
Hereโs a simple requirement Iโve seen in some form more times than I can count: โI want to disable a checklist.โ A business stakeholder says, โDisable the checklist.โ A user story becomes: โSet checklist status to inactive.โ A developer implements: checklist.visible = false.
Everyone thinks they understood. Everyone is acting rationally. The system even โworks.โ But what did we encode โ disabled state, or just hidden UI?
Now send that into reporting and compliance. Is the checklist disabled or merely invisible? Should an inspector still see it? Should it count toward completion metrics? And if it was โdisabled,โ what is the audit trail? Five meetings later, youโre debating semantics that should have been settled on day one.
Multiply this pattern across thousands of requests, dozens of teams, and years of delivery. You donโt get a broken system. You get a system that technically functions, but semantically drifts away from the purpose it was meant to serve. This isnโt incompetence. Itโs what happens when you operate without a shared vocabulary.
Ubiquitous language is not optional
Domain-driven design has a name for the fix: ubiquitous language. The idea is simple and demanding: The same terms must mean the same thing everywhere: in conversation, requirements, code, tests, documentation, data, and reports.
If the business talks about an inspector disabling a checklist, then the user story should say: โAs an inspector, I want to disable a checklist.โ The code should expose a behaviour like Checklist.disable(). The data model should represent a disabled state, not an incidental UI property. And reports should use the same language, referencing the same concept.
When this alignment exists, developers understand intent, business stakeholders can read artefacts without having to translate them into their own mental models, and errors surface early, when theyโre still cheap to fix. Without it, organisations pay an invisible tax. It just rarely gets booked under the right cost centre.
The real failure: skipping the problem space
In most enterprises, teams spend surprisingly little time in the problem space. A business stakeholder expresses a desire. Technical teams immediately start building the solution. It feels productive. Itโs also dangerously premature. Without a shared understanding of domain boundaries, actors, events, and outcomes, solutions get built on assumptions rather than knowledge. Those assumptions harden into APIs, schemas, dashboards, and operational processes, and then become expensive to change.
The root cause is usually misplaced ownership. Language formation gets treated as an implementation concern: โDelivery teams will figure it out.โ Business stakeholders disengage once requirements are โhanded over.โ Then everyone acts surprised when the delivered system is technically correct, but wrong.
Business architecture: the missing link
Business architecture defines domains, capabilities, actors, and the vocabulary that ties delivery to business intent. Yet in many transformations, itโs either missing entirely or disconnected from the team’s actual shipping code. It becomes a PowerPoint deck instead of something people actually use.
Ubiquitous language efforts that emerge only on the delivery side wonโt work. Both sides have to own and enforce it: business stakeholders must insist on the agreed terms, use them, and challenge deviations, while delivery teams must reflect them faithfully in code and artefacts. Theyโre not separate groups running separate operations; they need a shared vocabulary to function.ย And shared language doesnโt survive on goodwill alone. People take shortcuts, terminology drifts, new team members introduce synonyms, and old meanings lose precision. Staying on top of this is not bureaucracy. Itโs basic maintenance.
Why event modelling helps
One technique that consistently works in practice is event modelling. By focusing on commands, events, and models expressed in business language, it produces artefacts that are technically precise and still readable by non-engineers. Vocabulary emerges from the conversation itself: proposal, income, limit, interest rate. And crucially, meanings get settled before code is written, not discovered after systems are deployed.
Digital transformation is a people problem dressed up as a technology problem. Cloud platforms, AI strategies, DevOps pipelines, and platform engineering are all useful, but they depend on language working properly first. Defining domains and enforcing a common vocabulary is hard, unglamorous work. Most organisations skip it because it doesnโt look like progress. It is the work, though, and it belongs to both sides of the business, not just the delivery teams.
Until organisations start treating language as seriously as they treat their cloud strategy, their digital transformation will keep failing, long before technology is ever involved.
More from the same author