The pyramid of code quality (Part II), the 3 different types of codes.
makinggoodsoftware.com
makinggoodsoftware.com
In addition, this analogy is wrong. Over-engineered code is as much in need of a refactoring as under-engineered code.
Under-engineering happens when deadlines pile up and there is no time to refactor to known and useful design patterns. Or, in the worst-case scenario, the developer has no idea about design patterns. Most code out there is bad due to the latter two reasons, not the former one.
Over-engineered code, yes, is often denser than it needs to be. But oftentimes it's a lot easier to come in and understand it than, say, a 16000 line PHP file with no functions or objects - just a bunch of nested if/else... I'd argue that the former is possible to refactor, while you're better off just dousing the Gordian Knot code in kerosene and tossing a match on it.