Why redesign doesn't happen (enough)
Code degrades because it is strongly anchored to the past. Instead of updating, refactoring, reorganising, and rearchitecting the code as we learn over the years, a system tends to keep its original shape, as developers shoehorn new features in with If/else statements. Imagine you are one of N people working individually in the codebase, each of you on a personally assigned task, not in groups. Any change one of you makes has a non-zero chance of causing a merge conflict for someone else. The larger the change, the greater the chance that some part of it will conflict. Multiply that by the number of people making changes. Remember: when separately-made changes conflict, the first person to merge sees no problems, but the second person to merge has to resolve the conflict. People hate resolving merge conflicts. It is tedious and exacting work. You have to understand not only your own change, but the other person's, and figure out how to harmonise them. If you get on...