"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
I don't understand why Architect should express complex technical ideas for Product Owner?
ВідповістиВидалитиAnd what is Architect responsibility after he has described solution?
Also it is not clear for me on which level Architect describe solutions? What will Engineer do with this solution - just code it, or he will need to create some low level design and pass it to coders?
I will start from the end - level of details is should be good enough to make solution idea clear for all involved parties. Sharing common understanding is one of most important goals in any kind of work, but for Architect it is extreamly important.
ВідповістиВидалитиAfter finishing with design of the solution, which development can be separate project itself, Architect usually supervise implementation of the solution. You need to know - there is only one eternal truth - EVERYTHING IS CHANGING. Solution and design should reflect this changes.
ВідповістиВидалитиArchitect need to express solution design to Product Owner because of several reasons. They quite well described for example in Brooks's "The Design of Design". Main reason - only Product Owner can judge solution, will it solve the problem or not. Additionally - Product Owner know most amount of details about the problem (at least he should) and can manipulate the requirements. Simple example - some constraints can have low importance from business perspective but apply very hard limitations on technical solution. And it can happen that PO can remove such constraints or change them when problems of the solution will be clearly communicated. Important point here that quite often technical problems need to be communicated to not technical person who actually makes the decision. So way of communication should be very clear.
ВідповістиВидалити