One thing that’s interesting to watch with high profile rewrites that are struggling— so often, there are usage patterns that rely on non-decisions made by a developer. When rewriting software and coming across poorly defined behavior, the impulse is often correctly to make a decision that fits some kind of logic of how things should operate so that they are predictable and consistent.

The problem is, predictable and consistent existed before— by happenstance. Now you come to learn that your mental model of the application (as the developer) is different than your users, but you have no way to capture how things worked in that “undefined” state. It was, by nature, an anti-design.

A huge part of software change management involves being clear how the application models the domain. How do we think about these concepts? How can we teach people the appropriate amount to lead them to “pits of success”. Preferably, how do we make using the application just “feel right” without having to do a ton of work expressing our intent and design?

All domain models are wrong, and therein lies our challenge.