By Charlie Alfred and Gene Hughson
Up until this point, we’ve discussed what it means for Architecture to have context. Contexts enable us to reason about the behavior of a group of stakeholders, whether they be buyers, end users, support staff, distributors, manufacturers or suppliers.
As we’ve pointed out, virtually all products or services are multi-context. This means that the architecture of these products or services, if they expect to be effective, must also be multi-context. A multi-context architecture is a lot like juggling. You must balance your attention across an array of concerns and try to satisfy an array of stakeholders. The following sidebar illustrates this point:
In the early 1960’s, the United States found itself engaged in a space race with the USSR. Government officials in both countries believed strongly that the first country to travel successfully in space and land men on the moon would have a significant military advantage.
President Kennedy collaborated with NASA to initiate a space program designed to put men on the moon’s surface and return them safely to earth, and achieve this by the end of the 1960’s. On July 20, 1969, the Apollo 11 mission was successful at landing Neil Armstrong and Buzz Aldrin on the moon, and four days later, on July 24th, 1969, the crew safely splashed down in the Pacific Ocean, where they were brought to safety by the USS Hornet.
The Apollo 11 mission is a high point of 20th Century US history for many. It also does an excellent job of highlighting several concepts related to Architecture in Context.
- U.S. Executive Branch,
- U.S. Legislative Branch,
- NASA astronauts
- NASA scientists and engineers
- U.S. Taxpayers, etc.
- Value Expectations:
- Land astronauts safely on the moon during 1960’s
- Return the astronauts to earth safely
- Pain Points:
- Ceding space to the USSR would put the US Military at a strategic disadvantage
- US President had more clout in this mission than Legislative Branch and NASA
- Return the astronauts safely to earth is higher priority than landing on the moon
- Landing on the moon is more important for NASA and US Executive Branch than for US Taxpayers as a whole
- Difficulty of lunar landing complicated by moon’s craters and hills
- Difficulty of space capsule reentry is driven by speed, atmospheric friction, and earth’s orbit (i.e.land in water, close enough to battleship)
- Size and design of the space capsule depends on the power of the booster rockets that are needed to launch the capsule beyond the earth’s gravitational pull
Due to space constraints (pun intended), this sidebar merely scratches the surface of the interesting aspects of the Apollo 11 mission. Another critical point is that the Apollo and Gemini missions that preceded Apollo 11 demonstrated feasibility of technical approaches to address important challenges. For example, Apollo 7 was the first manned mission to orbit the earth and splashdown safely, and Apollo 8 was the first manned mission to orbit the moon and return safely. It is worth noting how NASA recognized how difficult and important the reentry challenge was, and how early mission decisions were made to overcome it.
Balancing importance, difficulty and centrality (cross-dependency among challenges) can be a daunting problem. What best practices exist to help you solve it?
Best Practice 1: Identify and understand your key contexts.
Understanding your contexts means identifying them on the basis of similar goals, priorities, external forces, and pain points. When doing this, be sure to focus on the “why” questions:
- Why do stakeholder groups A and B have the same pain point?
- Do they have the same priority for relieving this pain point, or is this a much higher priority for one group vs. the other?
- Is the pain point caused by the same external forces?
- Is the pain point obstructing the same goals, or different goals?
Questions like these will enable you to cleanse your context notions so that the behaviors and external forces in each context are as consistent as possible.
Best Practice 2: Understand your key contexts as soon as possible
One tendency in multi-context system development is to leave future contexts as some other day’s problem. The tendency is to focus on the stakeholders for the first release as the only ones who matter:
- We won’t be marketing to those groups (countries) for years, why waste time thinking about them now?
- Those stakeholders are so new, they won’t know what they need.
- Why spend all the money and effort interviewing or doing other forms of research when their needs are likely to change?
These objections are based on the perception that identifying and understanding a context requires a lot of effort. In reality, it requires much less than it appears. A context is a generalization of behavior and the quality of this generalization can vary with how imminently it is needed.
I realize this sounds like it violates the YAGNI (“you ain’t going to need it”) principle, but it doesn’t. There is a big difference between anticipating a future context and doing a little defensive design to accommodate its variations than there is of building in full support for it. The first case is one of defining good interfaces to encapsulate variation. The other is an implementation and testing burden. Additionally, it is better to be aware of potential conflicts between contexts before resolving them involves significant design and code changes.
Best Practice 3: Understand the challenges in satisfying each context’s pain points
Pain points and challenges are similar, and may be confused. Challenges are concerns of the solution provider. A challenge is one or more forces that must be overcome to provide value.
A pain point is similar, however it is linked to stakeholders within a context. This difference shows up in goals, priorities and external factors are considered important. For example, a pain point might be the need to keep trade secrets confidential from hackers, while the challenge might deal with specific types of cyber threats.
As the solution architect, we derive challenges from pain points in contexts. Contexts are important here, as similar pain points may exist in related contexts, but with different goals, priorities, or even external challenges. For example, within an investment management firm, response time needs differ for portfolio managers, traders and compliance officers.
Challenges are framed as problem statements — specific issues that the solution provider must overcome in order to provide value. It is important to keep the relationships between contexts, pain points and challenges. In general, contexts have many-to-many relationships to contexts and to pain points. In other words, there could be several challenges for certain pain points. Some challenges may be quite similar across several pain points, potentially spanning many contexts.
Best Practice 4: Carefully consider the nature of challenges when combining over contexts
Challenges are like chemical elements. Each has its own structure and properties. However, in a system (especially a multi-context system), challenges combine and form molecules. Molecules have their own chemical properties, aside from their constituent elements. For example, Carbon and Oxygen independently are staples of life, while their combination, Carbon Monoxide, is an odorless, tasteless, and most notably, deadly gas.
As mentioned above, challenges take a common form:
- How does the challenge create or detract from value expectations in a context?
- Which external forces cause the challenge’s impact to be magnified or compounded
These two properties make it relatively easy to look at a challenge as a chemical element, or combine it with other challenges to view it as a molecule. Here are a few ways to characterize challenges that can be useful in examining their impact:
Some useful dimensions for categorizing challenges are:
Compatibility (of two challenges)
- Compatible – independent problems, no issues solving simultaneously
- Friction – partially dependent problems, some tradeoffs and/or risks
- Antagonistic – highly dependent, serious tradeoffs and risks
Breadth (of a challenge)
- Pervasive – scope of challenges reaches throughout solution
- Regional – scope of challenges pervades an area but encapsulated
- Local – scope of challenges limited to a narrow area
Occurrence (of a challenge)
- Persistent – challenge occurs all or most of the time
- Intermittent – challenge occurs with a predictable frequency
- Conditional – challenge occurs in certain situations or conditions
These dimensions and categories can be useful for determining how to manage or aggregate challenges:
- Within a context, as in how the challenge interacts and combines with others
- Across context, as in whether similar challenges in two or more contexts are sufficiently alike to merge, or whether they combine into a more significant one
Best Practice 5: Prioritize challenges to identify the most important ones to address
Software architecture, just as software engineering, is a discipline of deciding among alternative approaches to reach a decision. While some decisions get made in small sets (e.g. this system will be 3-Tier, .NET, IIS with a SqlServer database), many, if not most, decisions are made independently.
One important thing to remember is that virtually every decision made reduces the degrees of freedom for the rest. Sometimes this reduction is desirable, but many times it paints the subsequent decisions into a corner.
If the goal of a software architect is to make good decisions for the system, it makes sense that s/he should address the highest priority challenges first (while the degrees of freedom are more available). But how should challenges be prioritized? Three criteria need to be balanced:
- How many contexts does the challenge affect?
- How much of an impact does the challenge make on each one?
- What is the weighted average of this impact, given the relative importance of each context?
- The more difficult a challenge, the more degrees of freedom it is likely to need
- The more difficult a challenge, the more degrees of freedom it will consume
- The more degrees a challenge will consume, the earlier it should be tackled.
- Centrality (also called Core):
- Challenges are also dependent on the solutions to other challenges
- The dependent challenge should be addressed before or concurrently with the challenges that depend on them
Architectural design takes place in an environment of constraints. Constraint should be understood as a neutral concept, because it both prevents and enables. The same cup that constrains the flow of water also enables you to bring that water to your lips. Managed appropriately, constraints provide the structure and form that yield the desired function(s). Part of that management is understanding that design decisions are constraints. Decisions made in isolation risk inappropriately constraining a design in terms of the whole.
Remediation of architectural constraints is, by its very nature, expensive. Rewiring is more involved than repainting; replacing a foundation is far more extensive still. Understanding and accounting for all of the contexts involved allows you to see the architecture of the problem as a whole. The architecture of the problem then becomes the skeleton upon which the architecture of the solution can be built, incrementally, iteratively, and most important, effectively.