I find there's a lot of informal folk-lore when it comes to "solid" software design. Asking experts is likely to surface answers as numerous as the stars in the visible universe. There may be common threads in popular discourse but it seems only to be buoyed by personality: a popular project lead or evangelist discusses their methodology and a constellation of developers grab on to it in order to emulate their success. Others find harbour elsewhere.
And yet very few of them formally state how their approach works to solve real engineering problems. The gang of four book is a book of patterns. The book itself doesn't contain any formal analysis of these patterns. Even among these patterns there is a world of contention about which ones work, which ones are less useful, etc, etc. A beginner into this world, typically an intermediate to advanced programmer with a few years experience under their belt, hits this wall and is left to flounder and find their tribe.
I liken it to beliefs about the efficacy of software engineering practices. There's far too little evidence about them to make any strong claims to their effectiveness. And yet people have built careers around evangelizing certain ones.
(And often when you ask people to be more forthcoming and give their formal definitions they wave their hands and say that software development is art not engineering and that it's about craftsmanship and beauty not cold, hard, unfeeling things like calculi, categories, or algebras)
I have little faith these days. Unless someone can formally describe their abstraction it's neither simple nor elegant to me. Such terms are qualitative in the absence of formal definitions. What is simple to you might be a hodge-podge to me. Code sans sensible abstractions is procedural spaghetti in my opinion: simple to understand in small, local parts, but impossible to comprehend as a whole. But if you can explain to me what the objects are, the operations on them and what they mean, and the algebraic properties of those operations then I'm much more certain about what we're discussing and can agree that given such definitions whether something is simple or elegant. What programming language the system is ultimately implemented in rarely matters as much as getting the design right.
Update: I'm curious because while I find these tools useful I often feel like they're under-appreciated and perhaps hardly used outside of certain small circles in practice.