All ‘classic’ (i.e. those used in regular university and certification programs) books on architecture I can remember of will state clearly that a software architect is responsible for defining macro-aspects of a system based on the inputs from its stakeholders. Although clear this sentence is very hard to map into day-by-day actions.
Probably one the least understood aspects of the architect role is that the software development team (which the architect is part of) is a very important stakeholder. An ideal architecture has to fulfill the requirements from the system users, the project sponsors and the developers.
This means that maybe the ideal architecture or a project won’t always use the ideal technology or techniques. It is wonderful when you have an experienced team of developers that will not have any problems adopting most of these but generally it’s not the case.
In most cases the architect will have to consider among the drivers of technical choice the team’s skill set. Imagine you join a team of long time VB6 programmers to develop a new website. No one has experience with Ruby on Rails although you know that is exactly the best tool for the job. The website must be delivered in a short time frame, no time for training. Would you go for the best technical choice?
At the same time an architect have to think about the future. Ok, maybe Rails won’t fit into this timeframe but if it would really add value the architect should include a migration into the system’s roadmap. I have some experience introducing Ruby through baby steps, at each iteration one or two stories would be implemented using the new platform. You can start by using Ruby whenever a script or small program is needed, for example and introducing the new web development platform slowly. The most important is that you should have a clear view of what the system should look like in the future and how to make this come true.
But before considering using Ruby or any new technology an architect should present to the developer his thoughts. Just as you will ask you users about how the interface should look like you must get the input from the developers. Of course just as the user can’t have his ideal Second Life-like user interface your developers will come up with ideas that won’t be feasible or desirable. The important thing is that you should collect feedback and respect the opinion of the group that will probably be most affected by your decisions.
I remember working at a highly distributed project. I was at the Rio de Janeiro branch and we had people in London, Germany and New York, I was basically impossible to have all the development team in he same conference call due to the fuses. The architect for the project was in NY, maybe the smaller office with only a few developers. It was very interesting to do a svn up and see what new toys he had inserted into the project. I can remember that by updating my workspace I became aware of the incremental introduction of Spring (1.2 then 2.0), Java 5, native C++ code accessed through JNI, PERL, Python and AWK (performing the same task: simple substitutions in configuration files during the build). Our project was a Java EE standard thing but nobody besides him had any idea of how the system was structured end-to-end. When questioned about this by senior management he would say something like “It’s all on the wiki, those devs are lazy!”. I’m sure you can imagine the quality of the single-page wiki description of the whole mess.
The problem in this case is not exactly on the terrible technical choices but in the fact that we, developers, wouldn’t be aware of that changes until we update our source files –and prepare to solve conflicts. If the architect can’t communicate to his colleagues in Europe or South America properly he should have adopted a different strategy than simply throwing changes at us.
Team distribution, physical or not, is a major issue in architecture. Say we have a system that allows traders to exchange stocks. One part of the system is about gathering data from the market, the other part is about the user interaction and other is about submitting the transactions back to the market. For any reason someone decided that we will have different teams working on each module.
At the end of the day is a single system -any of these modules in isolation would be useless- and could be architected as this. There is when the team structure influences the architecture. Although all modules will run in the same JVM, application context and web context they are being developed by different teams. When the information gathering team needs to perform a full build they shouldn’t have to be aware that the transactions team is working of a maintenance release.
In this example scenario the architect have to design the modules so that those parts of the same application –they are not components- will be black-boxes (or at least grey boxes) and teams can work in a fairly isolated stream.
Using Rails, introducing AWK and friends, designing the system as a single module and the like may be the best technical design but architecture is not about technique, at least not only about this. It is the same concept that exists among civil engineering and architecture.
When you go for an apartment inspection and realize that a perfect place to rent unfortunately receives direct sunlight at undesired times you are facing exactly the problems we are talking about here. Maybe placing the building that way was the perfect technical (engineering) choice but an architect should have realized that eventually people were going to live there and they won’t be happy waking up at 6a.m. burned by the Australian summer.
Remember: people will ‘live’ in your system. Outside and inside it.

Great text, congratulations!
I totally agree. Very few Software Architecture books mention the importance of designing your software around the teams you have.
I worked on a project needing broad technical skills. It was replacing and reissuing 6M Amex chip and pin cards.
The success of the project I am sure is partly due to the componentisation into areas of the teams skills. We had a set of Java/Oracle developers (handling the 6M card records) and a set of Smart Card analysts/assembler programers. The architect componentised the system based on the set of skills we had available.
This also fitted with the physical space available - not all developers could be in the same room. We only had 2 large rooms so not everyone could work together. Splitting the software architecture in two fitted the physical space available.
I wish more architecture books would base at least some of their design suggestions on the real physical constraints facing software teams…
“Team distribution, physical or not, is a major issue in architecture.”
Indeed, I’d say not only team distribution *is* a isssue but also *influences* the architecture of the system itself.
Hi Phillip,
as an Architect and/or project manager, I’ve run into quite a few of the situation you described. I’ve come to the notion of “sustainable architecture” meaning that the architect must -early in the game- realize which parts of the architectural design can achieve commitment by the team members, and which can not. Individual learning curve is an issue, and distribution is another one. One of the aspects of a “good” architecture is the low communication effort needed to successfully communicate it, and distributed teams impose a lower bandwidth to information flow.
So, often is necessary to prioritize architecture features, and find an affordable suitable subset for the immediate. Also context-based motivation about why some non-optimal choices have been taken is often necessary, since you’re making decision on temporary factors.
Unfortunately this sometimes could hit some nerve: “we’ve chosen this underperforming language ’cause is simpler to learn and matches the high turnover rate of developers…”
Cheers
Alberto
Hi,
I think that your approach to architecture is too much developer oriented than customer oriented. When you develop a solution it’s in order to satisfy a customer’s need, not to satisfy developers pleasure. And if your team doesn’t have the skills to realize a project, then maybe you shouldn’t do it instead of doing it with the wrong technologies.
Your example with the apartment case is different about what you say before. Here, you say that what is important is the technology and the customer, and I agree this. If you apply your first remarks with the apartment case, then it would mean that if your masons only know to handle wood, then an architect will always builds apartments with wood, which can be a great problem in some regions…
Cimballi
P.S. : sorry for my poor english.
Hi Cimballi,
As the text states there are lots of stakeholders in a software architecture project and this text talks explicitly about the developers, so that’s possibly why it is dev-oriented
I think you may be making a confusion between stakeholder and customer. Developers are stakeholders just like clients or system administrators and the point raised in this article is that all those stakeholders should have their requirements fulfilled.
If you think about it the client/user won’t really bother if the application has 3 or 30 components but the developers will. That’s my point.
I can’t agree with the comparison among building made of wood. If I need a internet-ready system and all I’ve got are mainframe COBOL programmers I really have to rethink my project; but I can’t see how this is related to the main topic.
cheers
Hi,
It is cent percentage true, isn’t it? I think we will have to focus more and more on the domain specific design and architects should consider the development team in to their “Project domain”. So he will be able to do the most efficient and effective design I suppose.
Cool and cheers,
JK
Excellent article.
I think it would be very healthy to make the industry realise that developers are stakeholders too. As an example, a very important aspect of software, its maintainability, has sense mainly to developers.
I also like that you say that architects belong to the development team. It should be obvious but saddly it’s not for too many organizations.
In fact I even think that architects should be active developers.