Software development is a pursuit characterized by complexity. This can take many forms, such as accommodating
complex requirements, technology, or team dynamics. Elevating the level of abstraction helps you manage this complexity
and make measurable progress, despite the inherent difficulty of the task.
Suggestions for several strategies that help abstract away complexity follow.
Leverage patterns
Patterns help you take advantage of proven techniques for solving common problems. You can benefit from the experience
of seasoned practitioners and avoid "re-inventing the wheel," as the saying goes. The use of patterns is a crucial
aspect of an architecture-centric approach to development, because it helps reduce the novelty and diversity of a
solution, thus improves quality.
See Patterns for more information.
Design the architecture with components and services
This strategy helps manage software complexity through partitioning a system into a set of loosely coupled
and highly cohesive subsystems. The benefits of this approach include the ability to organize the team around a set of
smaller, more manageable objectives, and the ability to substitute parts of the system without disturbing the overall
cohesion of the system. Exposing services encourages re-use by making the functionality of the system easier to
comprehend. Focusing on services makes it possible to understand what the system does from a technical perspective
without necessarily having to understand the details of how the system works.
See Component for more information.
Actively promote reuse
Incorporating existing software into an overall architecture helps reduce cost and improve quality by reusing proven
working software, rather than developing from scratch. It also helps reduce the burden of maintenance by eliminating
duplication in the software. Although often difficult to manage, a project or enterprise can reap significant benefits
from a well-executed re-use strategy.
Model key perspectives
Modeling helps raise the level of abstraction because you simplify complex ideas and represent them visually, as
illustrations. Good models can convey information that helps the team visualize, specify, construct, and document
software. The Unified Modeling Language (UML) provides an industry-standard approach to software modeling.
When applying this strategy, you can use various techniques:.
-
Identify the key perspectives: Focus on modeling the things that count. Few (if any) projects
benefit from modeling the entire design to a great level of detail. Make sure that you understand why you are
modeling something and who will benefit.
-
Sketch the design: Not all models need to be detailed completely and presented in a software
modeling tool. It is often perfectly acceptable (if not desirable) to produce hand-drawn sketches on paper or on a
whiteboard when you are exploring and communicating the architecture and design with your team. You can use a
digital camera or an electronic whiteboard to capture these diagrams and share them. For many small projects, this
is often all you need. See www.agilemodeling.com for more information.
-
Agree on a standard notation: In a team environment, it is important that others can understand
your diagrams without much explanation. Choosing a standard notation enables others to quickly comprehend your
diagrams without ambiguity. The Unified Modeling Language is an example of a widely understood notation.
-
Visualize the code: Many software development tools allow you to view the code as models, making
it easier to comprehend static and dynamic aspects of a complex code base.
-
Document key architectural perspectives: Even if you choose to model very little of your
design, it is often advantageous to produce diagrams that communicate the key architectural aspects of the system.
Conveying the "big picture" to the rest of the team helps them understand the overall approach and develop cohesive
software.
-
Use model-driven development: This approach takes formal and complete models and applies a series
of defined transformations, which results in the generation of working software. This technique offers a
number of benefits, with many success stories reported. (See www.omg.org/mda
for more information.)
|