The following is my attempt to generalize DesignForTestability.
The software design process should be targeted at development process in whole as well as at the product being designed.
Development process includes "listen-test-code-refactor" chain, according to KentBeck. Design is being spread in all links of the chain. So, doing your design and producing SystemMetaphor, try keeping in mind:
"The user" (the real user and a software developer) should be able to listen to your system, to learn from it. This can include ability to do experiments with a system