Freigeben über


Systems Architecture Interview Questions

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?

Comments

  • Anonymous
    January 29, 2007
    Great post and scenarios, but I do have one question: you plan on covering all of this in an hour or two? I'd think it would take the better part of a day.

  • Anonymous
    January 29, 2007
    Good point.  No.  I don't use all of these.  I chat for a half hour, and then spring one of them.  The stuff I find out in the chat helps me to decide which one.  If I have a 90 minute interview, I'd use two or three.  Never all at once.  That would be unfair.

  • Anonymous
    January 29, 2007
    The comment has been removed

  • Anonymous
    January 29, 2007
    Hi Malcolm, Keep working on it, my friend.  You will get there.  I'm convinced of it. --- Nick

  • Anonymous
    January 30, 2007
    The comment has been removed

  • Anonymous
    January 30, 2007
    Hi UC, Great response.  Strong compliment to my blog post. I agree with your assertions.  One clarification: I have no problem looking for the people who love architecture... but you seem to imply that if the love is there, I should take a less skilled person and let them 'mature' in the job.   I want them to have achieved the level of knowledge and skill required to do this job before they start. I have little time or patience for OJT in a position as key as this.  Mistakes cost LOTS of money. In addition, Microsoft IT has something like 2000 ambitious professional software developers (I'm guessing, but the number seems right).  If I put an unqualified person in a rare and coveted job, the response would not be warm.

  • Anonymous
    January 30, 2007
    Hi Nick, Let me clarify myself somewhat. I was talking only in terms of degree and balance. In fact, any aspect of this business involves continuing education, and there should most certainly be a base level of technical expertise in order to get one's foot in the door. In other words, I agree with the technical/skill standards you enumerated. However, those standards are only part of the equation; the more difficult standards to measure (as I discussed) are often overlooked, and more important over the long haul. That is why I used the phrase "tend to be a bit" - as a way of emphasizing a balance rather than a contradiction.

  • Anonymous
    January 30, 2007
    I am a frequent reader of the Inside Architecture Blog . Yesterday, Nick Malik posted a good read that

  • Anonymous
    January 31, 2007
    The comment has been removed

  • Anonymous
    January 31, 2007
    The comment has been removed

  • Anonymous
    February 11, 2007
    Architecture and Design has always been very interesting for me. For an architect I think its important to understand the different scenarios while you work out the technical requirements part of the system. One has to understand the bridge between the functional and technical requirements. Architects have to understand programming, then again its important for an architect to understand cross platform or platform independent semantics as well. I agree with UC that its important for an architect to think visually, again be able to map that bridge from functional aspects of the system to the technical details. Having the ability to work productively with the programmers is good but be able to work with analysts and visually define the system before you get with the programmers is also important. I am working on a new concept (if I may call it that) of Software Architecture. Its titled "Organic Programming as an implementation of Behavioral Software Architecture". Its combines intelligent  software units to the status, messaging and application behavior aspects. This helps in communication between units. The basic concept is that each unit we design has the ability to intelligently survive on its own and be able to manage its functions without external help but for a stable system it needs the  ability to work with other units, that is where status, messaging and behavior comes in. Its still in development but I can post details of my paper if some one is interested.

  • Anonymous
    February 11, 2007
    Hello Moiz Ahmed, When your paper is ready, drop me a note through this blog.  I'll link to it and give my honest opinion.   From what you describe, your idea sounds very interesting... In a way, the system is less of an organism and more of a hive or community.   I like it. --- Nick

  • Anonymous
    February 25, 2007
    Hi Nick, You are correct, community or hive would be defined by the combination of organisms or the smallest unit of the application in software architectural terms. In organic programming they refer to the smallest unit as a "Thing", which relates to a living thing in the real world. Again with the intellegence to manage its affairs. In this concept, the smallest unit will also have the ability to react to the external events and change its status. The paper will be presented to a panel of UAB (University Of Alabama At Birmingham) faculty and some industry leaders from AL. The final presentation is due in April. I will post the message here once its ready. Thanks, Moiz