Well explained. However many tools of ruby. Tools that we as good developers carry at the bottom of our toolbox for those rare cases where they make life a billion times easier, can also be tools of spaghetti. One of these is the ability to inject behaviors into a class. Its like adding to Array.prototype. The point is that just like a goto statement, it has a few legitimate uses, but most of the time leads to spaghetti code. I think every language has this, and there should be big flashing warnings when tutorials show this methodology stating that "use this only where appropriate, and it is usually only appropriate in these situations:..."