Become a member

Thursday, November 18, 2010

What makes a good Architecture - Rules of Thumb

There are rules of thumb that must be followed while designing an architecture.

These fall into two categories.  Process and Structure

Process for Developing an Architecture

1. The architecture should be the product of a single architect or a group of architects with an identified leader.

2. The architect \ team should have a set of functional requirements and non-functional requirements ( quality attributes ) that the architecture is supposed to satisfy. The quality attribute list should be prioritised.

3. The architecture should be well documented.

4. The architecture should be communicated / presented to the stakeholders who should be actively involved in its review.

5. The architecture should be analysed for quantitiative measures like maximum throughput and evaluated for quality attributes.

6. The architecture should lend itself to incremental implementation via the creation of a skeletal system in which the communication paths are exercised but at first have minimal functionality.

7. The architecture should result in a specific set of resource contention areas, the resolution of which id clearly specified, circulated, and maintained. If performance is a concern the architects should produce time budgets for the major transactions or threads in the system.

Structure of the Architecture

1. The architecture should have well defined modules whose functional responsibilites are allocated on the principles of information hiding and separation of concerns.

2. Each module should have a well defined interface that encapsulates changeable aspects from other software that uses its facilities.

3. Every task and process should be written such that its assignment to a specific processor can be easily changed perhaps even at runtime.

4. The architecture should feature a small number of simple interaction patterns . That is the system should do the same thing in the same waythroughout.

5. Modules that produce data should be separate from modules that produce data.

No comments: