Take the 2-minute tour ×  I understand what SOLID is supposed to
accomplish and use it regularly in situations where modularity
is important and its goals are clearly useful. However, two
things prevent me from applying it consistently across my
codebase:    • I want to avoid premature abstraction. In my
experience drawing abstraction lines without concrete use cases
(the kind that exist now or in the foreseeable future) leads to
them being drawn in the wrong places. When I try to modify such
code, the abstraction lines get in the way rather than helping.
Therefore, I tend to err on the side of not drawing any
abstraction lines until I have a good idea of where they would
be useful.    • I find it hard to justify increasing modularity
for its own sake if it makes my code more verbose, harder to
understand, etc. and doesn't eliminate any duplication. I find
simple, tightly coupled procedural or God object code is
sometimes easier to understand than very well-factored ravioli
code because the flow is simple and