If I wished to build a tower four feet tall, I'd need about ten cans and some decent balancing skills. If I was assigned to build a tower four hundred feet tall, I'd need a bit more than 1,000 cans. Scaling software, like towers, isn't easy.
Code complexity increases much faster than a simple line count. There are a myriad of tools and techniques that one can use to provide structure to code to ease growing pains. The most popular of these is Object Oriented Programming. OOP gives structure to code and allows a programmer to easily conceptualize the pile of code in front of them. It's also really easy to make it look like you're working when you're dealing with an object oriented language.
Therein lies the bigger problem. If we can make it look like we're working, why do actual work? The pay is the same. Lazy programming leads to even more complexity than you started with as endless lists of classes, factories, and helper functions spawn because it's much easier to write out the frame than it is to fill it in. Like anything else, these lazy programmers are bad but cheap.
Hiring cheap programmers is like building a massive tower out of plywood. Sure, the construction material allows for a budget that impresses your boss but who'll be responsible when the whole thing goes tumbling down?