вівторок, 18 січня 2011 р.

Who are you, Mr. Architect?


"Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away."
 Antoine de Saint-Exupéry

Software development process overview from roles perspective.

How it happens, in common case? Most important role is  Product Owner because this is the one who understand the problem. Only Product Owner can judge proposed solution and decide will it solve the problem or not and how effective and productive proposed solution will be both in short and long perspective. 
When we have two problems which should be solved by two following roles:
First one - define problem which should be solved to get common understanding of the problem between team players.
Second - define solution for the problem in form, which will be clear enough for Product Owner to judge it. 
To solve first problem we need Business Analyst, who define description of the problem in the form that allow many people share common understanding in a fast and effective way. Importance of this work is quite hard to overestimate. It is easy to imagine what happens when solution is found and implemented for wrong problem. 
Quite often problem description also name Business Requirements. 

It is well known that right question has answer inside itself. The same with right problem description. Good description of the problem already has big part of solution description. So selection of the next role, one who finds solution strongly depends on problem formulation. 

There are many cases when problem description, prepared by Business Analyst defines both business and most important technical requirements, or business requirements can be easily mapped to technical requirements. For this case Engineer can start working with requirements, define, describe and implement technical solution. 

In other cases, when problem description can't be directly mapped to technical requirements and requires selection from different, not obvious, technology options additional analysis required before solution can be defined. As a result solution builds as superposition of choices in technology and business. It is important that the input for making these choices can be obtained only from the business area. This is exactly what Architect is doing - working with business requirements and circumstances to define technical solution.     
  


Between Business Analyst and Engineer. 

"The hardest part of design is deciding what to design."
Fredrick Brooks 

It can looks like Architect it is just Engineer with Business Analyst competences. In some way it can be true but I should say that Architect role is something bigger when just combination of great engineer experience and good analysis competences. The reason is mindset. 
What is in responsibility of Analyst - Define and describe the problem discovered by Owner to be sure that everyone works on the same real problem (one which in Product Owner mind).
What is in responsibility of Engineer - To implement solution for the problem defined by Owner and described by Analyst.
You see gap between this to areas? I see. Who responsible for matching solution and problem? How we can be sure that solution, to be implemented by the Engineer is for the problem, defined by Analyst? Quite often we see solutions which solved absolutely different problem, not the one which Owner has in mind. 
This is the work for Architect. In one of definition of Software Architect it is saying that Architect build a bridge between Business and IT. It sounds quite simple but mean quite complex things. 
Architect need to take into attention much wide picture of business requirements when even Analyst can cover because Analyst must think about the problem as it exists now. Architect need to think about how problem will change during the years and how solution should capable to be changed accordingly. In terms of business Architect not just work on solution itself but also on solution capitalization, i.e. ability to solve problem in the future in effective and productive way.  

When you need an Architect? 
"Good design adds value faster than it adds cost."
- Thomas C. Gale

Quite important question. To be honest it is hard to meet Architect in off-shore software development. I know several but I know much more high qualified engineers who are known experts in particular technologies and it looks like they much more required for industrial programming when Architects. Why it happens? I am not sure. 
You definitely need an Architect when you going to build something conceptually new on the market. Also you probably need Architect work when your business requirements still quite unclear, and you can't be sure what your solution will be tomorrow.


Design in software architecture.
"The hardest part of design is deciding what to design."
Fredrick Brooks


Task of Architect usually is limited by development of solution design, not solution itself. This is quite important point because Architect has two main goals: 
1. Find solution.
2. Clearly describe solution.

Quite often second goal is much more complex when first. Ability to express complex technical ideas in the way clear for non-technical people (or with limited technical competences) is quite rare and valuable. Only when this goal is reached Owner can judge designed solution and define does it solves business problem or not. This point is essence of Architect's work. 

"A chief service of a designer is helping clients discover what they want designed."
Fredrick Brooks