Today at lunch, I was watching how the person who took orders
communicated the type and number of sandwiches to the sandwich
makers. She had a stack of cards for each sandwich type and
she'd place them in order on the table by the sandwich making
station. I remarked to my friend that there were using a queue
to decouple the order taking unit from and processing unit
(sandwich makers) so that order taking could happen
independently of sandwich making. They could add more processing
units (competing consumers) if things got busy. The world is
full of these kinds of patterns. There's a great write-up of why
Starbucks doesn't use a two-phase commit. The fact that these
kinds of process issues occur in everyday life would lead the
cynic to say that there is nothing new in Computer Science--
people have always know these things. But there's a big
difference between someone figuring out to put a queue in
between their order taking station and their sandwich making
station and understanding why, when, and how it works