Sunday, April 10, 2005

Architecture Frameworks, how they relate to each other, and which one to use

· Extreme Programming: Managing change, fast, effectively... but wait!!
· SEI/CMM: Well planned processes, knowledge flows so well... at what cost?
· Zachman Framework: WYSIWYG for all participants... well almost!
· Model-driven architecture: Design and build separately... can it be done?
· Rational Unified Process: Develop in Stages, each role knows its roles and deliverables... do they!!

These frameworks are all well known and each come with their advantages and issues. So which one should you use?

There is no one correct answer. If there was the others would have vanished by now. So here are some tips to help you drive successful projects.

1. The reality is that you will use some combination of these frameworks for your projects.
2. The best idea is to make one framework as your primary basis, but take good practices from the other frameworks.
3. Different projects will have different needs, so some Frameworks will be less effective than others.
4. Keep the developers involved in the Architecture decisions, so the architecture principles are applied in the project!
5. Learn from Experience: Use the framework for a small application, to see if it translates well to the Organization's reality.
6. Diagrams are good, but nothing substitues the written text. Ensure that desciptions accompan y the design artifacts.
7. To some extent these frameworks address some different aspects of Software Architecture and development. CMM is repeatable process driven. RUP focuses on stages of Iterative software development. XP models good practices for Iterative projects. Zachman focuses on all project stages(concept to delivery) and artifacts applicable for different roles(Management, Business, Architect, developer). MDD Approaches modeling that separates the specification of system functionality from the specification of its implementation on a specific technology platform

Applications suited for the various frameworks(Q&A format):

1. I have an Application that is being developed by a Outsourcing Vendor. The Application has 3 phases, and will be built in 10 months. The Outsourcing vendor is based out of California, and has development facilities in California, India and China. Which framework is best suited for my Application? My first reaction will be that the Outsourcing Vendor already has a framework that they are using. The most applicable framework for this application is CMM, with some elements of RUP and Zachman. But Why CMM?
Well, firstly because the actual owers have the least amount of control over the day-to-day operations of the application. So the least they will require is a process that is well documented, so issues can be addressed early. Secondly, the application will take 9 months to build. Its enough time to forget most of the decisions that are made during inception.
Caution: Count some buffer for the overhead of building and reviewing the tons of documentation produced.
Tip: Carefully manage how much documentation you require, and how mature a process the Vendor has. I have seen many instances where vendors have a great CMM story on paper, but most of the artifacts they build are "Fluff".

2. I am building a website for my organization. They need to get something up very quickly, but want to extend the site to be a world-class site. So what should I use for this? Aha!! XP is your Nirvana. Get up to speed quickly. Build a set of key diagrams on white-board and paper, to support that World-class site (JUST ON PAPER FOR NOW :-)). Mkae sure you have that top-class architect(with some additional help from someone). Build for change. Caution: Be prepared to rebuild the first couple of Iterations of the project, and learn from the initial mistakes, to develop a modular, loosely coupled infrastructure that supports Change, Reusabilty and Iterative development.

3. We need to build a Workflow application that will change the way the organization does business. Today we have multiple applications that work independently, but don't interact with each other. Our employees are not the happiest users. Our customers are patient!! Help ? Use the 3 letter Acronym(RUP) or its matured brother (UP). Why? Firstly, the Plan, Prototype, Build(Iteratively) and Transition Cycles are most appropriate for this style of application. Secondly, RUP delivers a excellent framework of best practices for teams needing the right balance of control(of processes) and speed(of project development).

What about the other frameworks? Well, Zachman and MDA in my experience are "helper" framework(s) which give certain useful aspects for the project team. Zachman has some excellent concepts for the Scope and business stages of the application. These are visibly missing from RUP.
MDD concepts are critical in building Specifications and Products. They are also applied in building loosely coupled and extensible Applications.

In Summary, each Architecture Framework has strengths and weaknesses, and address different aspects of Architecture. Typically, use one framework as the basis for the project, and use applicable artifacts from the other frameworks.