A solid refactoring, the kind that you don’t do every year, also needs to involve a tooling up, but scoped to making the new desired architecture something that programmers won’t subvert but find natural. In a way, the programming languages become the interfaces that provides the boundaries for the layers of the system.