Depends on the software. Or to torture the analogy a bit: you can build anything out of LEGO if you're willing to use a jigsaw, some Gorilla glue, a blowtorch...<p>The point of frameworks is to provide the standardization of the "shape" of various bits of software so it's a lot more like snapping together LEGO. But even then, LEGO isn't universally snappable; some blocks just don't click to other blocks in the product line. And then, of course, there's the "illegal" block hacks (<a href="https://crafty.diply.com/28429/14-illegal-lego-building-hacks-to-pass-on-to-your-childrens-chil" rel="nofollow">https://crafty.diply.com/28429/14-illegal-lego-building-hack...</a>) that work in practice but are not at all using the tool the way it's specified. When software reuse <i>is</i> like LEGO, we should expect (a) some things we want to do, we can't really do without jigsaws and glue and (b) sometimes, people <i>will</i> do things that the software technically allows but no sane person would call "desired" or "intended."<p>In fact, the LEGO-to-framework analogy works pretty great. And yeah, outside the context of a consistent (and, I'd argue, opinionated) framework, you're about as likely to have two pieces of software interoperate as you are likely to pick two random chunks of matter in the universe, slap them against each other, and have anything useful happen. I just tried it with a brick and this glass of water on my table. Now I have "wet brick in a pile of shattered glass," but I don't know anyone's going to give me a Series-A funding round for that.