Skip to main content
Back to writing
2 min read

What Actually Breaks When Non-Technical Teams Adopt New Software

The system worked exactly as designed and people still didn't use it — because the spec never matched the real 7am decision it was replacing.

processadoptionsystems

Every rollout I've been part of had a moment where the software worked exactly as designed and people still didn't use it. Not because the interface was bad. Not because training was skipped. Because the software assumed a version of the workflow that didn't exist.

This is the failure mode nobody budgets time for. Engineering teams test whether the system does what the spec says. Nobody tests whether the spec matches the actual sequence of decisions a person makes at 7am with a truck idling and three other things going wrong. The gap between those two things is where adoption dies, quietly, months after launch, long after the project got marked complete.

A few patterns I've seen repeat across very different systems:

The workaround was load-bearing. Someone built a spreadsheet, a side channel, a manual step, to cover a gap the "official" process never accounted for. The new system replaces the official process and leaves the workaround stranded, so people keep the workaround and route around the new system entirely.

The data entry cost is front-loaded, the payoff is back-loaded. The person filling in the form isn't the person who benefits from the report it generates. If the effort and the reward sit on different desks, adoption depends on trust, not on features.

Nobody owns the exceptions. Every process has edge cases, the client who pays differently, the job that doesn't fit the template. If the new system has no answer for those, people conclude the system doesn't understand their job, and they're not entirely wrong.

None of this shows up in a demo. Demos are built around the happy path. Adoption happens, or doesn't, in the unhappy path, the ten percent of cases that don't fit the slide.

The fix isn't more training. Training explains a system that was built around the wrong assumptions more clearly. It doesn't fix the assumptions. What actually helps is spending time watching the current process before writing a line of code, not asking how it works, but watching what happens when it breaks. That's usually where the real requirements are hiding.