Devlopment Management Architecture


Vendor Lock-in
Wolf Ticket

What are Architectural AntiPatterns?

(for a quick example, see the website's featured Architectural AntiPattern, Vendor Lock-In)

Architecture AntiPatterns focus on the system-level and enterprise-level structure of applications and components. The engineering discipline of software architecture is relatively immature. [Shaw 96] What has been determined by the research and experience emphasizes the importance of architecture in software development:

Good architecture is a critical factor in the success of the system development [Booch 96] [Shaw 96] [Zahavi 95]
Architecture-driven software development is the most effective approach to building systems. [Booch 96] [Horowitz 93] Architecture-driven approaches are superior to requirements-driven, document-driven, and methodology-driven approaches. Projects often succeed in spite of methodology, not because of it [Zahavi 95]. This is exemplified by Structured Systems Analysis and Design Methodology (SSADM) v4 which has 670 steps.

Software architecture is a subset of the overall system architecture. System architecture includes all design and implementation aspects, including hardware and technology selection. Important principles of architecture include the following:

Architecture provides a view of the whole system. [Hilliard 96] This distinguishes architecture from other analysis and design models, which focus on parts of a system.
An effective way to model whole-systems is through multiple viewpoints. [ISO 1996] The viewpoints correlate to various stakeholders and technical experts in the system development process. [Hilliard 96]

Software architecture is distinguished from programming in several ways. One characterization is that the difference between an architect and a programmer is that the architect cares about the cost impacts of their decisions. Complexity is viewed by many in the architecture, management, and metrics fields as the key architecture design force. [Shaw 96] Software complexity is related to software cost. [Horowitz 93] At a minimum, the architect is responsible for managing complexity.

Software architecture focuses on three aspects of software design: [Shaw 96]

Partitioning - The functional partitioning of software modules.
Interfaces – The software interfaces between modules.
Connections – The selection and characteristics of the technology used to implement the interface connections between software modules.

These architecture decisions are usually implemented by a much larger group of developers and maintainers. In order manage these elements effectively, there are significant challenges for architects in managing the people and relationships. Some examples include: communicating the design to developers, achieving buy-in from managers and developers, and managing the implementation and extension of the design.

The following AntiPatterns focus on some common problems and mistakes in the creation, implementation, and management of architecture. Lack of commonality between systems in terms of design and technology is the cause of frustrating inability to provide interoperability and reuse between related systems. Improved enterprise architecture planning can be used to align system developments.

AntiPattern Synopsis Refactored Solution
Architecture by Implication System that is developed without a documented architecture; often due to overconfidence based on recent success. Define architecture in terms of multiple viewpoints corresponding to system stakeholders.
Autogenerated Stovepipe Automatic generation of interfaces for distributed, large-scale systems from fine grain header files. Separation of the architecture-level framework design from the subsystem-specific design is essential to manage complexity.
Cover Your Assets Document driven software processes often employ authors who list alternatives instead of making decisions. Establish clear purposes and guidelines for documentation tasks; inspect the results for the value of documented decisions.
Design by Committee Committee designs are overly complex and lack a common architectural vision. Proper facilitation and software development roles can lead to much more effective committee-based processes.
Intellectual Violence People sometimes use obscure references to esoteric papers, theories, and standards for intimidation or short-term gain. Individuals and the organization should encourage and practice mutual education and mentoring.
Jumble Interface designs are an un-factored mixture of horizontal and vertical elements, leads to frequent interface changes, lack of reusability. Partition architectural designs with respect

to horizontal, vertical, and metadata elements.

Reinvent the Wheel Legacy systems with overlapping functionality that don’t interoperate. Every system built in isolation. Use architecture mining and "best of breed" generalization to define a common interface, then object wrapping to integrate.
Spaghetti Code An ad hoc software structure makes it difficult to extend and optimize code. Frequent code refactoring can improve software structure, support software maintenance, and iterative development.
Stovepipe Enterprise Uncoordinated software architectures lead to lack of adaptability, reuse, and interoperability. Use enterprise architecture planning to coordinate system conventions, reuse, and interoperability.
Stovepipe System Ad hoc integration solutions and lack of abstraction lead to brittle, un-maintainable architectures Proper use of abstraction, subsystem facades, and metadata leads to adaptable systems.
Swiss Army Knife Over-design of interfaces leads to objects with numerous methods that try to anticipate every possible need -- leads to designs that are difficult to comprehend, utilize, and debug, as well as implementation dependencies. Defining a clear purpose for the component and properly abstracting the interface is essential to managing complexity.
The Grand Old Duke of York Four out of Five developers cannot define good abstractions; this leads to excess complexity. Project teams should have designated architects who are abstractionists, i.e. possess the architecture instinct.
Vendor Lock-In Proprietary, product-dependent architectures do not manage complexity and lead to a loss of control of the architecture and maintenance costs. Providing an isolation layer between product-dependent interfaces and the majority of application software enables management of complexity and architecture.
Warm Bodies Large software project teams make for ineffective organizations and overruns. Heroic programmers are essential. Small projects (4 people in 4 months) are much more likely to produce software success.
Wolf Ticket A technology is assumed to have positive qualities due to its open systems packaging or claimed standards compliance. Few standards have test suites (< 6%) and few products are actually tested for conformance. Discover the real truth behind the claims. Question authority. Assume nothing. Shift the burden of proof to the marketing organization. Talk directly to the technical product experts and developers.



Back Home Up

Copyright 1999 William Brown, Raphael Malveau, Hays McCormick, Thomas Mowbray, and Scott W. Thomas.  All rights reserved.
For problems or questions regarding this web contact [Web Master].
Last updated: December 13, 1999