The last activity of SAF is deployment of the architecture.  This step can make the difference between an ivory-tower architect and one whose designs are actually used in real software projects.

Deployment of the architecture actually  means two things

  1. Verification and feedback loop. - making sure the architecture is actually the right one.
  2. Governance - making sure that the architecture is followed by the designers and developers

Verification and Feedback loop

It is common practice to think of software development as an iterative process. Knowing that Software architecture  is early and that it encompass the important decision which are hard to change, it is probably wise to think of the first few iterations as architectural ones. You would try to work with the team and form the major abstractions, hopefully come up with a blueprint for processes etc. However, the fact that you've decided only the (let say) first two iterations are architectural ones, doesn't mean that new non-functional requirements won't emerge during later iterations. Since practice shows us it is (almost always) futile to try to analyze "all" the requirements before we do any design - this is almost bound to happen.

Be ready to monitor the project's progress after the "architectural iterations" to see and deal with any emergent requirements. As the stakeholders (e.g. product owner, project manager and the architect) try to prioritize tasks/requirements from iteration to iteration, hopefully most of the architectural issues would both surface and be taken care of the first few iterations (remember - architectural decisions are the ones that are hard to change…) - but unfortunately this isn't always so. I recently audited the architecture of a project (which has been running for more than a year) where they identifies the need for transactions, but following some stupid 80/20 rule decided that most of the system does not need that (deadly sin #1) and that they'd be able to easily patch it in later down the road (deadly sin #2) - so not enough just to identify a need, you also need to deal with it early.

The first few iterations also serve as a feedback loop on the suitability of the architecture, sure you've tried to evaluate  the architecture both in code  and on paper , but once it is deployed, or used for real - that is its real test. You will probably want to allocate some time to sit with developers and designers and actually see how the architecture is used and the implications of your decisions.

Governance

It isn't enough to design a software architecture, show it off at some architecture review and maybe at product demonstrations. Designers and developers are more than likely to bend your architecture to their convenience - this can happen for a multitude of reasons - for example:

  • They flipped the bozo on you  - they think they know better
  • They don't see the big picture and they try to optimize locally
  • They don't know any better, they just do what they always did
  • They believe they are following your design but they didn't really understand what you've meant (or alternatively - you didn't explain yourself very well)
  • They cut corners e.g. to meet dead-lines (just to appease the project manager breathing over their shoulder)
  • Etc.

When the architecture is compromised, it can definitely  have severe  effects on later iterations and the overall stability/usability of the system. It is important to note that  it may even result in harsh implications for the organization - imagine someone circumvents some auditing mechanisms you've put in place to comply with SOX or Basel II.

What this means for the architect is that she cannot disengage from the project completely even once the architecture is stabilized (i.e. after the first few iterations). Architect involvement is needed for design reviews, maybe key code reviews , on mile stones  etc.

I think it is one of  the architect rolls to act as a "comptroller" and oversee that the project stays on track as far as the architecture goes. Unfortunately there aren't too many automated tools to help with that. DSLs is one direction that may help (look for example at the Guidance and Automation Toolkit here  and here  ). I've also recently saw an application that claims it can enforce and monitor SOA policies on e.g. on contacts (for both Java and .NET). I hope we'll see more of these tools in the future - meanwhile it is up to us, architects, to do that as part of our overall responsibility.

 


 
Monday, February 20, 2006 2:59:16 PM (GMT Standard Time, UTC+00:00)
Arnon,

Somewhere in your blog you've mentioned Martin Fowler's "Who Needs an Architect?" article in a positive way. However, it seems that in contrast to Fowler's notions of an architect who's job is to "remove architecture by finding ways to eliminate irreversibility in software designs" - you are advocating making long-term binding decisions in the initial stages of the development cycle.

Another good point in Fowler's article was that "an architect’s value is inversely proportional to the
number of decisions he or she makes." The way I see it if you are willingly making long-term binding decisions up front you are turning them into things which will be hard to change at a later time - this has a huge effect on scalability and maintainability of software.

I also prefer the term 'Guidance' to the term 'Governance' in this case. Proper use of guidance by an architect may improve others who suffer from the issues you've mentioned. (When and how to cut corners in development is a crucial lesson). Governance may make things run more smoothly but will have a lesser chance of achieving this.
Yoni
Wednesday, February 22, 2006 5:00:56 AM (GMT Standard Time, UTC+00:00)
Yoni,
Thanks for your comment
I'll answer your first question in another post soon ("why make architecture decisions early")

Regarding your other comment on the use of the term "Governance":
In my opinion the goal is governance - making sure the architecture is followed (because of the implications of not having it followed). I did not discuss the strategies to achieve this governance and I agree that "positive approaches" like guidance, coaching etc. are very good strategies to make this happen esp. considering many times the architect is not the direct manager of the development team (I believe leadership is better than authority to get people to go in the direction you want)

Arnon
Tuesday, March 28, 2006 7:10:54 PM (GMT Standard Time, UTC+00:00)
Dear Arnon,

An excellent article. One suggestion: you've repeated three paragraphs under "Verification" - you might want to fix this.

Andrew
Andrew Johnston
Wednesday, May 17, 2006 6:29:45 AM (GMT Standard Time, UTC+00:00)
I think your missing a key point in your reasons developers might not follow your architecture. It could be wrong or obsolete. This is also likely to happen if you hang up the fight after the first few iterations. It might be that you want to address the architecture concerns early, but that doesn't mean you did. You may have addressed everything that was obvious at the time, but the world changes.

In fact, your workload may not even decrease, for the very reason you mention. Even though you may have addressed 90% of the architectural decisions right in the first few iterations, that last 10% may be as hard or harder than the first 90% because these things are harder to change later. In addition, the effects of changes in technology and business will keep this last 10% a moving target.

Anytime you begin to ignore your architecture, you'll quickly find that 10% undone transform back into 90% undone, and then you'll have "legacy" code.
Wednesday, May 17, 2006 10:03:14 AM (GMT Standard Time, UTC+00:00)
Ryan,
Thanks for your comment.
I agree with what you say but I don't think I am missing the point - since the first part of the post talks about exactly that - making sure the architecture is the right one. continue to be involved even though you may think you are done etc.
Comments are closed.