My story on “worse is better” (2018)
The worse is better essay is a great read:https://www.dreamsongs.com/WorseIsBetter.htmlOver time, I have come to believe that the problem is overly-aggressive abstraction.  It is very tempting for most developers, especially good developers, to reach for abstraction as soon as things get complicated.  And this can pay off very, very well in some cases.  However, too much abstraction in a system leads to a very, well, abstract code base that becomes hard to get a handle on: there's no there there. You see this in the java world with AbstractFactoryBuilderLookupServiceBuilders and so forth, and with very elaborate type setups in functional programming languages.Concretizing the crucial bits of your system, even if that means a few large, complex and gronky methods or classes, ends up often making things more understandable and maintainable and, certainly, debuggable.John Ousterhout wrote a book that makes this point as well, advocating for "deep" rather than "shallow" classes and methods:https://www.goodreads.com/en/book/show/39996759-a-philosophy...