In my experience there are two main causes of code bloat.<p>One is that people use abstractions that are more verbose than necessary. The fact this is bad is pretty uncontroversial. Though very few people go out of their way to write bad code, it&#x27;s just that everyone&#x27;s view on the right amount of abstraction is different. What&#x27;s fine to you might look like gibberish to me. I&#x27;ve radically simplified code by converting complex regexes to multiple steps, for example.<p>The other cause of bloat in mature code is the inevitable bug fixes, feature requests, and edge cases that accumulate over time. Having the attitude that a system is unnecessary complex is dangerous because you don&#x27;t know which of these edge cases could doom your rewrite.<p>Even if you do manage to ship a simplified version of the system it&#x27;s incredibly difficult to maintain the pristine state of the system. Unless you devote all your time to playing code police then cruft will creep back in when others touch the code. This is where having more abstractions can actually help, because good abstractions limit the impact a bad piece of code can have.