Yesterday, I attended the tutorial on Pattern-Oriented Software Architecture: A Pattern Language for Distributed Computing by Doug Schmidt. While explaining a pattern sequence, he used an analogy of ordering hamburgers to explain two different ways of communicating in distributed systems. At McDonald’s, when a customer orders, the employee enters the request at the register, reaches back to the “cache” of precooked hamburgers kept warm under a heat lamp, and delivers it to the customer; the interaction is an example of “synchronous” communication. At Wendy’s, when a customer orders, the employee enters the request at the register for a hamburger cooked to order, gives the customer a token and continues to serve the next customer in line; the interaction is an example of “asynchronous” communication. After a certain amount of time the customer might go back to the counter and ask if the order is ready (“polling”) or wait at the table for the order to be brought out when it is ready (“published”).
During lunch I mentioned the use of analogies during the tutorial. Another person at the table said she was attending the Software Architecture: Principles and Practices course. She liked the analogy used by the instructor of relating documenting software architecture views to a doctor ordering diagnostic tests to see different views of the patient in terms of the different structures of the human body.
We were both intrigued by the use of analogy and are interested in hearing people’s experiences using analogies to communicate architecture concepts.
What analogies have you used or heard to explain architecture concepts? Did you think it was helpful? Or, did you think it was inappropriate (e.g., misleading or oversimplifying)?
— Robert Nord, SEI