InfoQ

News

Ideal Architecture is not always about Ideal Technology or Techniques

Posted by Sadek Drobi on Feb 22, 2008 12:30 PM

Community
Architecture
Topics
Teamwork ,
Technology ,
Enterprise Architecture
Tags
Distributed Teams

According to a commonly admitted definition, the role of a software architect is to define “macro-aspects of a system based on the inputs from its stakeholders.” This implies that architects cannot be driven solely by technical considerations. They need to bear in mind the requirements of different stakeholders which often constraints the choice of technology and architectural design. 

In his blogpost, Phillip Calçado emphasizes that, along with system users and project sponsors, the software development team is an important stakeholder because developers are very directly affected by architecture decisions. Hence, the development environment should be taken into account by the architect even though it may limit the scope of his choices and even result in renouncing to a technology that would objectively be the best for the project.  

Calçado stresses, for instance, that it is crucial to take into consideration 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?

Another constraint may come from team distribution, be it physical or not. In Claçado’s example, a system for stock exchange for traders has three parts - data gathering, user interaction and transactions - with a different team working on each of them. Even if, technically, designing the system as a single module may be the best choice, the architect will rather have to design three modules that are black-boxes so that “teams can work in a fairly isolated stream.” 

More generally speaking, Calçado stresses that it is essential to “collect feedback and respect the opinion of the group that will probably be most affected by your decisions.” One of commentators, Alberto Brandolini, goes along the same lines using the notion of “sustainable architecture” that requires the architect to assure that his “architectural design can achieve commitment by the team members.”

Taking into consideration this kind of constraints is important for the success of a project. This does not mean, however, to definitely renounce to a technique that would really add value to a project, because of time and skills availability constraints or resistance from the team. The role of the architect is indeed to elaborate the strategy for introducing change and to integrate it into his design: 

[…] the architect should include a migration into the system’s roadmap. […] You can start by using Ruby [or any desired technology] 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.

Compromise? by Kiran Dasari Posted Feb 26, 2008 9:46 AM
Then it's not the best tool by Larry Guger Posted Feb 26, 2008 9:52 AM
  1. Back to top

    Compromise?

    Feb 26, 2008 9:46 AM by Kiran Dasari

    Wouldn't we be diluting the importance of the best solution arrived through systematic means by letting other factors influence the architecture/solution? I understand that getting a commitment from the development team for the architecture is important. But if the current choice of developers are a mis-match to the 'best solution', should we be changing the solution such a way that it can be implemented by the developers in their current state? Wouldn't we be compromising the long-term impact of the solution and in turn the customer's interests if we were to choose a solution other than the one that suits the problem the best for whatsoever reason?

  2. Back to top

    Then it's not the best tool

    Feb 26, 2008 9:52 AM by Larry Guger

    In both the main article and the quotes it is argued that a given technology may be the best choice but when taking the development environment into account there are reasons to choose a different technology.

    [...]even result in renouncing to a technology that would objectively be the best for the project.
    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?
    Given those statements how can you even present the option that the first technology is the best choice when clearly it isn't given the full constraints of a project. I find that arguments such as these demonstrate a narrow view of what an architectural "solution" is meant to be. The architect must always take into consideration the development environment and skills as well as the business requirements, infrastructure and budget when designing a solution. I argue that the "best technical choice" is the one that best fits all of the constraints of the project including the development environment, which is not what is implied by some statements in this article. So my response to
    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?
    would be a resounding YES! because in this case it may very well be classic ASP and VB6 as the correct technical choice given all of the constraints.

Educational Content

Bindings, Platforms, and Innovation

This presentation focuses on the Internet and separating myth from fact, history from the future, and the mundane from the imaginative. Bob Frankston presents a vision of what could and should be.

Orchestrating Long Running Activities with JBoss / JBPM

This article explores the use of JBoss and jBPM to implement design solutions that effectively address the issue of orchestrating long running activities.

Neo4j - The Benefits of Graph Databases

This presentation covers the use of graph databases as an optimal solution for data that is difficult to fit in static tables, rapidly evolving data or data that has a lot of optional attributes.

Realistic about Risk: Software development with Real Options

This session introduces Real Options and shows how it can help in running your project. Real Options is a decision-making process that can be used to manage risk.

Communication Flexibility Using Bindings

This article discusses the use of bindings on services and references (including the instance of non-configured bindings) as the means to implement SCA communications in a Web and SOA environment.

Writing DSLs in Groovy

After a short introduction to DSLs, Scott Davis plays with the keyboard showing how to approach the creation of a DSL by typing working snippets of Groovy code that get executed.

Scaling Agile with C/ALM (Collaborative Application Lifecycle Management)

IBM Rational and InfoQ present, Scaling Agile with C/ALM, an eBook showing organizations how to become “finely tuned software delivery machines” by enabling team integration and scaling.

Concurrent Programming with Microsoft F#

Amanda Laucher presents a real life enterprise application written in F#. She shows actual code snippets, explaining design decisions and suggesting how to use some of the F# constructs.