There are many different ways how they make the code bases a mess but one very common way that I can pick out is a lot of indirection that is a lot of functions wrapping other functions which wrap other functions and so on where to change even one thing you need to visit and touch 40 different files.