Tuesday, November 23, 2010

Architect Level Interview Questions

We're interviewing for Architects at work. There are stacks of sample tests around the web for programmer level roles, but not a lot for architect level roles. So we devised our own.

We tell the applicants that these questions should be answered in bullet list / note form. We don't need essays because we are going to talk about some of the issues in the interview.

  • What in your opinion is the worst part of Java development? How would you fix it?
  • What advice would you give a server side web developer wanting to ensure that new code was secure from external attacks?
  • Do you think Component based frameworks are better than Action/Request based web frameworks?
  • What recent technology trends are important to enterprise web development?
  • What do you think of Struts?
  • What's the difference between final, finally and finalize?
  • Rank the following attributes in order of importance when designing new code. If you have time, please add a sentence to each explaining it's position:
    • performance
    • maintainability
    • correctness
    • ease of use
    • ease of learning
  • Some performance tweaks serve only to make source code hard to read, without really making a significant difference, others are vital to a system returning results in a finite time. When in the development process should you consider performance issues?
  • A customer has asked you to write a toUpper function. The only requirement you have is:
    • It must return 'A' when given an input of 'a'.
    What questions do you need to ask to flesh out the requirements?

Software Architect Interview Questions - HR

The software architect is one of the reputed jobs. Let me tell you that it is a very highly paid job as well. The information architect is also a kind of software architect. If you want to make sure that you are selected for this post then you will definitely have to make sure that you prepare hard for the interview. This is a senior job and there will be no written test for this.

Some of the interview questions are as follows:

1. Tell us about yourself ?

I am XYZ. I am placed at XYZ InfoTech. It is now more than two years since I am working in this firm.

2. What to you know about our company?
It is among the top companies engaged in providing the total IT solutions to various sets of clients.

3. Why are you changing your job?
This is because I feel that I have better chances of strengthening my career in your company. If you are confident enough then you can also say that you find their proposal better. Hence you will not like to waste this golden opportunity.

4. Who is role model?

My role model is Bill Gates.

5. Why?
This is because, he never accepts the defeat. He fights through all corners unless and until he taste the victory.

6. What do you know about the software architect?
I have been working as a project manager for the past three years. During this time I have seen many projects being completed under my guidance. It is quite sure that you I will definitely excel as a software architect. Let me tell you one more thing that software architect is a next step to the project manager. They are the expert who guides the whole software team with his invaluable ideas.

7. Why do you want to become a software architect?

This is because this is my dream since my childhood. I have always dreamed of reaching the top position in software development. Hence this is a major landmark in my career.

8. What will you do if you are not selected?

I will continue my previous job and wait for some better opportunities.

9. What will you do if you have to sit back at home for one month?
At first I will definitely not allow to let this happen. However if it does happen then I will get myself busy in job hunting so that I am able to find one job soon.

Software architect interview questions

1----------------
We usually present them with a problem, and ask them to solve it by diagramming out their solution and talking through it with us. The problem is usually something like a massive report-generation job queue that must support scalability issues, error handling, logging, multiple threads from multiple computers accessing a common database, persistence (and computers going down), alerting users when the job is done, etc. Getting responses to all of these tells us how experienced the person is.


2----------------

In my opinion there is nothing better than a concrete problem. The one that I would like best has many variations and is also appropriate for a senior developer. Namely present some vague requirements for a small application and ask for a table layout for that application. You are looking at everything from what questions they ask you, to how good their solution is, to how they deal with your throwing in unexpected requirements.

This gets you down to a concrete design issue very quickly. While it seems database specific it is not, because a table layout is fairly easily translated to a set of classes - it is the same design skill. No matter what solution they come up with you'll be able to introduce requirements they haven't thought of. Particularly since they are working on the board. It is open-ended, so you can drill as far as you want and then move on.

An example of an application you might ask about is the following. "My boss is a big fantasy baseball fan. He wants us to build a reporting application so he can track statistics on various players. It will be your job to layout the tables we will report off of, and generate the canned reports. I'll take care of getting the data into that format. Let's start with the tables you want to use."

If you think this problem is too simple, try solving it with several friends critiquing you. You'll be surprised with how many issues they can come up with. Everything from, "What happens if my data load fails in the middle? Will your schema let me re-run it?" to "Players get traded from year to year." to (if you're nasty) complications that can come when players change their names.


3----------------

  1. When should you use interfaces and when abstract classes?
  2. Inheritance or Composition?
  3. Give him a task to model the classes for a simple system like "Managing the neighborhood video rental store". Goal: See how he thinks and does he applies randmoly some design patterns. Then review the design and if you don't throw away more than 50% of the classes he designed, then he is good :)

4-------------------
What's the difference between Interface oriented, Object oriented, and Aspect oriented design/programming? What problems are they each suited for? When have you used them?

5--------------------

Next week, I'm interviewing another architect, so I've gone over my list of "things to ask an architect candidate" for another time to see if I'd change anything. Not much popped out, but I thought I'd share some exercises that I ask architecture candidates to run through.

Note: I care more about experience than book learning, but I care very much that you know the actual names for things. In other words, book learning does matter. If you never got around to reading any of those 'patterns' books, don't bother to show up. You wouldn't be considered a qualified medical intern if you referred to the Biceps Brachii as the 'upper arm muscle' and I won't consider you an architect if you can't tell that I'm using a Strategy pattern in my case study.

The things that a systems architect must do to survive an interview with me:

  • Demonstrate the ability to work on a project team with developers productively
  • Describe a time when you created a vision for a systems architecture, communicate it, and others made it come into existence
  • Tell me how you know when it is time to review code for compliance and when you are better off getting out of a developer's hair
  • Be able to guide and direct the team in the art and science of visual modeling (it's not enough to know... you must also teach).
  • Detect the gaps in the early design artifacts of a project and determine what risks are going unmanaged.
  • Be able to convince me that you understand, in your bones, the concepts of coupling, abstraction, and encapsulation.
  • Be able to describe at least five GoF patterns in fine detail. Be able to describe at least five messaging patterns in fine detail.
  • Pick a single system quality attribute that should be paramount in a particular situation, and then explain why.

Some exercises to run folks through:

A. James is an IT architect working with a team of 5 developers and 5 testers on a new system. He has a situation with his development team. He presented the high-level design for their new system at a dev meeting and the team listened politely. Then, after reviewing his diagrams, some of the members of the dev team concluded that he has created a great deal of complexity in one area that they think is overkill. James hears about it from the project manager three days later. He feels pretty strongly that the complexity is called for. Evaluate the situation. What dynamics are at play? James comes to you for advice: what do you tell him?

B. Let's say that you have 10 systems in an infrastructure. One of them provides the list of all customers, while another provides the list of all orders. You want to keep the systems as decoupled as possible but they need to share data in real time. What mechanisms do you put in place to keep the systems independent, yet fully integrated? Describe the steps you would follow to replace the system that holds orders.

C. Draw the architecture of one of your most complex systems on the white board. Now:

  • What made you partition the system in this way?
  • What data entities are mastered by your system? Which components are responsible for actually writing the key data about each entity?
  • What changes do you predict the business will want in the next 2-5 years in this system? How will the architecture cope with those changes?
  • What system quality attributes did you consider most paramount when designing this system? What attributes did you sacrifice?

D. The architectural council has invited you to join. They perform periodic reviews on major projects. You attend and a project comes before the council that has not been reviewed before. It is a medium-sized project for your company (your company will perform between three and six projects of this size each year on average). It consumes data from other systems in real time, creates transactions in other systems, and produces data for reporting. The following artifacts are provided. What additional information do you ask for? What risks are you concerned about?

  • Logical Data Model showing every data entity in the system's database
  • Deployment Diagram
  • Class-level architectural diagram illustrating the use of design patterns

E. You review the code of a junior developer, and you see a call where the developer is passing a structure. The structure contains 25 different values as parameters to the method being called. The structure is used only to pass parameters to this one method call. You ask why the call needs so many parameters, and it turns out that it is used in about eight different places in the code, and each one has a slightly different need, so the routine will look to see what parameters are passed to decide what to do. The code for the method is complex, and contains many examples of code like this:

if (paramx != null)
do_something_specific(paramx);

What patterns do you discuss with your junior developer? What options do you consider? Do you advise the developer to change the code? Why?

F. Pick one of the following practice areas and describe the ideas and concerns that led to this area of software development practice, what the practice entails, the benefits that can be achieved, and the negative consequences that may be observed by teams engaged in the practice. Note: I may pick one for you... be prepared to be asked about any of them. (If you were to ask: "why this particular list?" I'd turn that around and ask you why I picked this list... )

  • Service Oriented Architecture
  • Test Driven Development
  • Aspect Oriented Programming
  • Dependency Injection / Inversion of Control
  • Software Factories

G. Mary is a fellow architect with a problem and she has come to you for advice. She is producing an impact analysis on a system we will call "Charlie". The Charlie system gets an hourly feed of data from another system called "Bravo." The Bravo system is scheduled to be replaced by an altogether new system called "Romeo" that will organize the data in a completely different way. Unfortunately, this will radically affect the data feed from Bravo to Charlie. Not only will it vanish, but any feed from Romeo will be structured and organized in a completely different manner than it was before. Mary needs to develop a roadmap to allow this change to occur. What advice do you give her?

http://blogs.msdn.com/b/nickmalik/archive/2007/01/29/systems-architecture-interview-questions.aspx


6-------------

I think this is a good one: "What do you feel every software and/or systems architect must know?"

That will let you figure out if the candidate has the same views on what is important that what you think is important in your organization.


7--------------

Two favourites from our interview pack.

  1. Imagine you have a webserver that serves from a local disk. Currently it handles 600 requests per second. What would you expect to happen if you switched to a NAS solution such as NFS?
  2. One of the interactive features of our website is a polling system. Basically a page can have a set of radio buttons against a set of choices, and a submit button. Clicking the submit button submits the selected user choice to the server, and presents a page of results. How would you approach the design of your back end system? What if a database couldn’t be used in the design?

8----------------

What design patterns have you used in building the systems you've designed and how well did they work out? Which design patterns do you find to be the most useful? Of the design patterns you know, which was the most complicated to learn?

What kind of infrastructure have you gotten into the trenches and really gotten to know well? Here expect a laundry list of any kind of environmental setting but this may be important as if the person will be designing web applications and all they have ever done in embedded systems, you may have an initial hurdle of how well does this person know about web stuff.