A fundamental problem in software design is scalability. A basic strategy for handling scalability is to treat new sources of variation as new dimensions and then examine the interactions between these dimensions and existing ones.

For example, suppose we have implemented an OrderProcess for the Order object. If we release it as a SaaS product,...