Recently while working on an application I found myself asking a number of architectural questions. These were questions about things that I might consider “fundamental” – elements of the application, how many methods each class might receive, and how to put it all together into something cohesive.
You might have asked yourself some of the same questions.
Three engineers were standing around chatting at a children’s birthday party. The host approached them and asked, “can you help me hang this piñata somewhere in the house for the children to hit?” The engineers agreed, and set off to figure out the best approach to the problem.
The most junior engineer was young and unsure of himself. He looked around for obvious items that could hang the piñata, and after rejecting several as unsuitable, he proposed that the engineers simply place the piñata on a table, so the children could break it open and access the candy inside. The host didn’t like this suggestion very much; while it met the goal, it failed to meet the scope.