There are some problems around the business of doing software development: code quality vs deadlines - balancing cost/benefit (or more dangerous: cost/risk); explaining issues to managers and customers of varying technical proficiency; dealing with last-minute requirements (can we test this in time? - again risk); calling into problematic code (opening up a can of worms: "if I call this function, I'll have to solve these problems in its implementation - and it already has these dependencies and I need to ship this within this amount of time..."); ...

Then some technical problems: dealing with obsolete modules and programming models; dealing with unstructured/non-modular/monolithic undocumented code ("ok" for code to be unstructured and documented or structured and un-documented, but not both); promoting quality code with an outdated tool chain (often can't use .NET and VS).