Here's how complexity creeps on you IMO. We begin to program the task, and at the beginning nothing is fixed. The algorithms are dynamic, so we believe that all decisions and choices are possible. After a few thousand lines, you begin to weaken this feeling of freedom and notice that programming is the development of some kind of static system that has real limits, and it either works badly for you or doesn't work at all. You hope that your OO design will serve exactly the task you need, but to be honest, the chances are pretty dull. Then you acknowledge that the program is "bloated" and try to fix it by refactoring.
So, in the end, bloating is caused by the limitation of our programming methods. We simply cannot write a large system and still believe that there is freedom of choice (which we feel when we start from scratch).
EDIT:
Also, Bloating is not something that just slows you down, or slightly reduces your motivation. In the worst case, this is what paralyzes your decision in such a way that you cannot write a single line of code. You notice that fixing one thing breaks ten others, and nothing that you do promotes your project in any way. This is why some projects have a limit on the number of functions that they can have. And after this limit is reached, it is a dead end maaan ... :)
source share