Interview Questions for a Software Architect

just because this makes a really nice SEO friendly headline..

However, this post is not so much about specific questions and answers but rather pertains to the technical vocabulary, acumen and architectural thinking with abstractions. Without getting into the dogmatic differences between a solution architect, system architect, and an enterprise architect, I’d define software architect in terms of Simon Brown as a master builder; a software architect who codes or a software developer who understands architecture. A software architect is essentially a seasoned senior developer with experience in enterprise architecture, good communication/people skills and excellent problem solving capabilities.

When evaluating a software architect (or if you are the one getting evaluated for the role), I'd start looking at these questions and then customize accordingly. Normally over the early screening, one should gauge the breadth of technical knowledge (depth will be accessed in person), comfort-level with ambiguity and software craftsmanship (I know, it's a bit vague to quantify). Look for essential technical vernacular (but differentiate from buzz words) such as known architectural templates and enterprise architecture patterns which helps one distinguish between a practitioner as compared to a stereotypical ivory tower architect.

Being technology specific isn’t the right approach unless you have a very specific version of Wasabi to support. Instead of asking the candidate if they know WCF datacontract serialization parameters by heart or MVC3 Authorize attribute syntax, give them a scenario and look for the vocabulary. For instance


How would you architect/maintain consistency in a large scale payment processing system?

For a large scale distributed payment processing system, how should one keep the balance consistent across multiple data stores? See if he (or she) understands the architectural concepts of geographical separation of data-stores, latency, transaction management, atomicity, consistency, idompotency and durability concerns. If the candidate knows about ACID vs BASE, it’s a big plus. Ask the candidate about B2B integration with a 3rd party service in the same scenario and see if candidate worries about shadow-copy of data, ownership, race conditions and consistency with source.


How did you implement X non-functional requirement (scalability, security) in your last project? If you didn't, how would you have?

For scalability, look for architectural thinking across multiple tiers; from UI (CDN) to serverside code (web farm, HA cluster, distributed cache) to service layer (atomic services, distributed, state-less) and database (RI constraints, SQLvs.noSQL, sharding, always-on) etc.
For security, look for keywords like input validation, white vs blacklist, network layer vs app-layer differences, cross site scripting, cross site request forgery, secure cookies, secure configuration and above all, ask about what is defense in depth. Knowledge of PCI/HIPAA/DSS, OWASP top 10 and static code analysis is always good to have and essential in most regulated industries.


How would you (have you?) implement Distributed Session Management?

For a large scale web application, how would you solve the distributed session management problem (see if the candidate knows what it means before elaboration on a server farm)? Listen to see if candidate is aware of what are different technologies available to solve this problem (inproc sessions, state server, cookieless sessions, memcache, cookie based sessions, appfabric etc.). Extend the question by asking about distributed cache and CDN's to see if he has ever implemented one and what are the pros/cons. May be delve into DNS resolution / propagation to see how strong is the candidate when it comes to OSI fundamentals.


Considering C# is your primary language, how would you test a simple addition method with the signature int Add(int a, int b)? 

Look for the candidate’s acumen for C# language as well as unit testing; does he talk about edge conditions like int.Max + int.Max will be overflow and can't fit the return int. Does his unit test have -ve conditions, zeros, floating point values / data type checks, int.Min checks etc. Extend this question by asking about what attributes you would use ([TestMethod], [TestClass] and what is the purpose of Assert (used for testing like Assert.AreEqual(expected, actual). Also inquire about measuring the code coverage.


Technical vocabulary test: (what is/are, how do you feel about) Single Responsibility Principle, inversion of control, dependency injection, idempotency, HTML5 web workers and web sockets, CSS sprites, service governance, SOA tenants, enterprise library, channel factory, service discovery, static code analysis, code coverage, enterprise service bus (why would you use one?), messaging patterns (fire and forget, duplex, request response), performance monitoring (how to?), MVP vs MVC vs MVVM, design patterns, OO attributes, mocking, continuous integration (familiarity with modern branch-merge source controls), BDUF, SOLID.

HTH. Happy Coding!