The design constraints are:
the abstract nature of software
techniques that work for small projects do not necessarily scale to medium and large projects.
The design discussions can be formulated in terms of analogies rather than in terms of code examples.
Please remember that proof by analogy is fraud... :-)
...that is why software design is an iterative process.