Digital transformation fails long before technology is involved


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 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

Avatar photo
Petr Svoboda

Petr Svoboda is an entrepreneur and expert in IT architecture, management, and software consulting. He is the founder of Stratox and the CodeNOW platform, through which he enables companies and corporations to introduce key innovations and improvements faster and more cost-effectively.