Back in 2007, I was searching for a software developer job at various companies. At one of these companies, the best strategy to get the job was to give a wrong answer. If this seems weird to you, let me explain what happened.
When I arrived at the interview, there were 2 other guys present. One would be my direct team lead, which was also the technical lead, and the other was his manager. It was the team lead that drove the conversation and asked the questions.
So after some small-talk, and answering the usual generic questions, I was asked to explain what a “three-tier architecture” is.
I gave a generic client-server-database explanation. I also referred to the most common business case with a web browser as thin-client, a web application server, and at the bottom layer a database. They seemed to be satisfied with my answer.
Then they moved on to a follow up question: “How does this architecture relate to the model-view-controller pattern?”.
I knew this question was really tricky, because I know a lot of people make the mistake of directly linking the tiers to each of the model-view-controller. But in reality, the model-view-controller runs on the middle “application” tier, in most cases.
If you don’t believe me, take a look at what was on Wikipedia for the n-tier architecture:
At first glance, the three tiers may seem similar to the MVC (Model View Controller) concept; however, topologically they are different. A fundamental rule in a three-tier architecture is the client tier never communicates directly with the data tier; in a three-tier model all communication must pass through the middleware tier. Conceptually the three-tier architecture is linear. However, the MVC architecture is triangular: the View sends updates to the Controller, the Controller updates the Model, and the View gets updated directly from the Model.
So the question was not only what the right answer was, but also what they thought would be the right answer. Did they know about this, and wanted to see how far my knowledge goes? Or didn’t they know?
Normally, I would have given the correct answer, and have a nice discussion if they considered it wrong.
But the problem was, that this guys manager was sitting next to him. If he didn’t know, I would totally humiliate him in front of his boss. So either he would stick to his guns and refuse the correctness of my answer, to save face. Or he needed to agree that he was wrong, and lose face. Anyway, there was only 1 proper solution to this: I had to answer what they thought was correct.
So I decided to start by giving the correct answer, and see how he responded. I explained “The model-view-controller is a software pattern, and so resides inside the written code. Since in most cases, this code only runs on the application tier, …”. But then I saw him frowning, and so knew this was not the answer the was expecting. So I continued: “The view corresponds to the presentation layer, the controller with the application layer, and the model with the database layer”. Done! Good answer! Everyone was pleased, and I got the job.
The moral of the story? Job interviews are not all about your technical skills, it’s about people skills too. And this is good, because you need both in your job.