Saturday, February 28, 2009

Role of a Solution Architect

Once again I found myself reading about the role of a solution architect in this MSDN blog

The truth is all the comments sound reasonable, but my experience teaches me a slightly different perspective. The role of the solution architect gets clarified when working on large projects. On small projects, the role gets mixed up with the 10,000 other functions that need to be performed.

In my view the role of the solution architect is to understand and interpret the problem that needs to be solved and then define the solution form. No clear solution can emerge without clearly understanding a problem. Thus, the domain of the solution architect is

1. What needs to be built?

2. Why does it need to be built?, Thats it!

3. How it needs to be built is the role of the technical architect or lead designer. Here the solution architect needs to collaborate with lead designer or technical architect.

In many cases, the last role is filled by the solution architect, but from my perspective this is an additional responsibility.

About the how
The how is never a mathematical problem and everyone will come up with their own interpretation based on the resources, time, budgets, skills of developers, familiarity with technology and so on. The how part is where solution architects need to let go and not control everything in the project. Let the lead designers and developers feel responsible for delivering the solution.

So, what is coding?
Also important is the role of coding. While many compare the software design process to the process of constructing a building... where architects design and programmers construct, most programmers I know will be offended by this description.

Reason being programmers are also designers. In my humble opinion, the roles are closer to dynamics inside an architecture office. In an architecture office, the lead architect would spend days and months understanding a project and in the process create several pencil sketches and hand drawings, (even models), to arrive at a form (solution). Once a form is confirmed, the remaining architects and designers would work out the actual plans using CAD or 3d modeling software. The important thing to note is that both stages are needed. While the initial conceptual stage is important to understand the form that is being sought, without the latter stage the actual construction cannot begin. There is no way the pencil sketches and paper models can be used to begin construction. In this analogy, the role of the solution architect is that of the lead architect, who by themselves or with assistance of a team explore the forms that could be adopted in solving a client's problem.

The second process is in my opinion the role that programmers play. Except there is no separate construction stage in software development. The designers (programmers) create the finished product or solution and work with deployment and/or implementation engineers to get it deployed at a client's site.

Should solution architects code?
Solution architects should not code the project they have architected. They may code something to prove a hypothesis to themselves, but that should never make its way into production source code.