In the discussion TheSourceCodeIsTheDesign, two key notions came up that brought things together for me:
However, the source code isn't the only way to see what the program is. ExtremeProgramming uses programmer knowledge, expressed through CRC cards, to see some of what the program is. Often we can show with a few cards what would take a long time to browse out.
Seeing isn't the same as saying, and both are important. --RonJeffries
Re: There should'nt be anything you can't put in the source code.
Maybe I am reading too much into this, but there may be many such things.
Extreme examples includes things like distributed algorithms and communication protocols that can be hard to understand even when a human explains them to you. For these things, even textual explanations are not easy to understand, let alone source code.
Usually, the way to understand them is to build models that are rigorously tested using a technique called ModelChecking? ("Model" here is in the sense borrowed from logic), or to build explicit proofs, and spend some time studying them.
A less extreme example might be a single object that plays multiple roles in several patterns. No naming scheme alone can capture or adequately explain them all.
But here, CRC cards, UML and the like would be useful. -- AamodSane