Agreed. The architecture mismatch paper [1] identifies common assumptions that software can make, such as "I own the main thread of control and other modules will do my bidding", that tend to be baked-in from the start.
> Deep architectural/design flaws in a codebase can't always be addressed using a series of small independent changes.
Not sure that's true. At the extreme end, you introduce a replacement with a better architecture and run it side by side with the old one, incrementally switching over dependents. Of course, that may take more overall work, but maybe the incrementality is sometimes worth it.
Deep architectural/design flaws in a codebase can't always be addressed using a series of small independent changes.