I'd heard the quote about no plan surviving contact with the enemy but never bothered to look up the source. That is a great analogy, and I think you have restated a nice chunk of my working theory better than I did. Especially that an architecture is a hypothesis.
Under this framework, maybe I can reasonably suggest that software has at least 3 big enemies: customers, management, and the coders. We are one of the enemies, for lots of reasons, but in part because coding style fashion trends change quickly. One year everyone's using OO, classes with templates and separating their code and markup, the next year everyone's using composition instead of inheritance and smooshing their code and markup together and talking about how much better it is than the old ugly way.
People who didn't join a project at it's beginning tend to both complain about the bad practices disproportionately, and at the same time contribute to introducing new styles and making the codebase less consistent disproportionately. After a few of those, there's just no wonder that things start to look messy in any sizeable project.
Under this framework, maybe I can reasonably suggest that software has at least 3 big enemies: customers, management, and the coders. We are one of the enemies, for lots of reasons, but in part because coding style fashion trends change quickly. One year everyone's using OO, classes with templates and separating their code and markup, the next year everyone's using composition instead of inheritance and smooshing their code and markup together and talking about how much better it is than the old ugly way.
People who didn't join a project at it's beginning tend to both complain about the bad practices disproportionately, and at the same time contribute to introducing new styles and making the codebase less consistent disproportionately. After a few of those, there's just no wonder that things start to look messy in any sizeable project.