This chapter covers the following topics:
Anything that we can classify as a system has an architecture, including buildings, living organisms (including humans), organisations, complex enterprise IT systems, software applications and individual components of those. When referring to IT systems, a core definition of what is meant by the term ‘architecture’ is provided by the ISO/IEC 42010:20111 ‘Systems and software engineering – Architecture description’ standard:
‘The fundamental organization of a system embodied in its components, their relationships to each other, and to the environment, and the principles guiding its design and evolution.’ (ISO, 2011)
This standard considers an architecture to be ‘a conception of a system’, in other words it is in the human mind, which can exist without being written down. This abstract idea of an architecture can be captured and communicated in the form of an architecture description.
The ISO standard also reinforces the idea that no architecture exists in isolation; it exists in a context which needs to be understood so that the architecture’s relationship with its context can also be described.
The objective of anyone working on architecture is to determine the appropriate way in which to represent this architecture description; and this is often in the form of documentation containing an appropriate set of models.
In many respects, this chapter is an extension of Chapter 7 (‘System modelling techniques’) in that a lot of architecture is about modelling and so much of the theory about forms of abstraction and levelling contained therein applies equally apply to this chapter. It is therefore recommended that you read Chapter 7 before this one unless you are familiar with these concepts:
It is worth re-reading the ISO 42010 definition again, particularly the last part; ‘... and the principles guiding its design and evolution’. This emphasises that an architecture includes aspects such as requirements and constraints (in particular architecture principles) that inform what that architecture needs to be to satisfy key concerns of major stakeholders.
While the ISO 42010 standard is specifically aimed at systems and software engineering, the definitions contained are used consistently to refer to related types of architecture.
Many related architecture disciplines have evolved over the last 20 years, each focusing on different forms of systems. This chapter begins with the broadest and then focuses in on more specific architectures. The chapter will consider three levels of granularity:
Before these are described, the following section explains some common patterns that all of these architecture types share.
Architecture structures are typically models and there are some fundamental patterns that apply in various contexts, as will be discussed later in the chapter.
In the early days of information systems, monolithic software architecture (where various aspects such as data input and output, data processing and the user interface were not architecturally separated into modules or components) was common. This was not such an issue, as the technical architecture was somewhat simpler (often a single physical node) and much of the data processing was batch-driven and managed by job control software; each executable program tended to be limited in functionality.
There would, however, be issues associated with applying certain aspects consistently across the suite of executables where a change to a single business rule or to the structure of a data element might typically require multiple changes to ensure consistency and prevent processing errors.
Structured programming languages and tools introduced the ability to write software library modules containing routines that dealt with such issues that could be shared and invoked by multiple executables, although these would often be statically linked into a single executable during compilation and linking; this meant that a change to one of these modules would require that all executables that used it would need to be recompiled.
The introduction of dynamically linkable modules, or libraries, meant that this static, compile-time dependency could potentially be broken. The library modules could be updated independently of the calling modules, although these often needed to be updated too. Issues would frequently arise when a developer changed a library module to support their program’s requirements without realising the impact on other programs.
Configuration and version management was key to prevent chaos. It was not until independently defined interfaces were available that these modules could be loosely coupled (see below), allowing them to be maintained independently. Software architectures, and consequently the physical architectures, could become truly modular and flexible. Modules began to possess properties that led them to be called components to distinguish them from their predecessors.
Coupling is a term used to refer to the level of dependency between two software components, although the term applies equally to hardware components. The earlier modules described above tended to have a high level of dependency, in other words they were tightly coupled. Table 10.1 compares some features of loose and tight coupling.
It should not be assumed that loose coupling is always preferable to tight coupling; there are situations where tightly coupled components are required, for example to achieve demanding performance levels.
The fundamental structural element that enables loose coupling is an interface that is abstractly defined separately from the module’s implementation code, this defines the signatures of the module’s functions, operations, methods, algorithms, strategies or services (these terms are interchangeable depending on context). Clients should ideally be dependent on the abstract function definition rather than the implementation. This allows the implementation of the module to be updated, replaced or dynamically interchanged providing that the interface is supported.
The important role of interfaces means that their definition is a key focus of architecture. When modelling how ‘black-box’ modules can be assembled to create a system, the functional requirements of those modules can be defined through defining the system’s interfaces, both at a logical and physical level. Once these requirements are defined, then the modules can be implemented in the most suitable way for the solution to meet all requirements (including non-functional requirements).
When coarse-grained components or sub-systems are being referred to, then the term ‘Application Programming Interface’ or API is commonly used.
‘Coupling and cohesion’ are often used in the same phrase. As we have seen, coupling relates to how dependent modules are on each other. Cohesion looks at how closely modular elements need to operate or be changed together; where this is the case, then there is high cohesion (and probably tight coupling). It is less problematic if these modules are co-located within the same coarser-grained component, which means that they will be deployed and maintained together.
There are different kinds of functional elements in any solution or software architecture based upon its responsibilities; for example, those that represent and manipulate data as compared with those that handle the system’s interface. These can be organised into distinct layers or tiers of modules with similar responsibilities.
It is preferable in layered architectures the higher layer is dependent on the services provided by the layer below, but not vice versa. This provides flexibility in that components at one layer can be servicing multiple clients at the layer above; for example, application components sharing common infrastructure services (and their underlying components).
Specific examples of layered and hierarchical architectures are provided later in the chapter when discussing Solution and Software Architecture, for example Figure 10.2.
An architecture composed of, or assembled from, discrete components or sub-systems needs those components to communicate and interoperate. Some basic patterns are evident at both logical and physical views of business, application and infrastructure architectures.
This is the most direct and, in many respects, simplest pattern and can range from logically indicating that a particular client communicates directly with a specific server to physically laying a cable between two geographic locations or attaching a mobile device to your computer via a USB cable. Point-to-Point tends to be tightly coupled, as the components are specifically linked logically or physically and they need to share common protocols, data formats and so forth.
Problems arise when multiple point-to-points are required to connect a number of nodes, as the number of links required potentially increase exponentially when new components are added.
Where a significant number of components need to interoperate, this can be set up as a set of point-to-point connections between each component and a single hub component. This component primarily exists to provide the means of connecting any component with any other. In doing so, the hub is potentially de-coupling each component pair to some extent and it can achieve this, first, by acting as an introduction broker or discovery agent, dynamically linking client to server component pairs on demand.
The hub can also offer other brokering services such as determining whether the client has security access to the server or by performing translations of communication protocols or data structures. It can even take over some of the logic processing and manage complex distributed transactions, at which point it has become a processing server component in its own right.
The service-oriented model is fundamentally about how components can be defined by the services they require as a service consumer (or client) and provided as a service provider (server). These components are typically as de-coupled as possible in all aspects,
This model also applies to how we organise our business functions and it is the model that allows organisations to outsource certain functions, where they are defined, and interoperate according to the services they provide rather than according to how they perform the service. If done properly, it should not be evident to a service consumer whether the service is provided by an internal or an outsourced provider.
In a service-oriented IT architecture, there is typically a broker hub, often in the form of a service bus, that allows:
The consumer and provider can then interact in one of two ways:
For many organisations, a significant development has been the adoption of enterprise architecture (EA) as typically the highest level and most holistic form of architecture developed and evolved about the organisation (the enterprise) over a strategic timeframe. The organisations in question can be massive, global multi-nationals employing hundreds of thousands of employees all over the world and operating in many geographical marketplaces; or they can be a small businesses run by families. One is clearly a lot more complex than the other, but fundamentally both are systems with similar features. For example, both have:
Most important of all, any organisation should have:
Enterprise architecture is primarily concerned with these highest-level, long-term, strategic issues. The individual changes conducted to support this strategy can usually be seen as shorter-term, tactical changes, which include some business as usual activities intended to support the strategy; for example, a shift in the marketing messages to effect changes to customer perceptions and potentially alter the customer base.
These tactical changes are typically evolving and different aspects of the business, particularly its operating model, which includes:
Enterprise architecture is usually broken down into distinct architecture domains. EA frameworks relevant to most business or government enterprises typically use the following four domains:
These domains each contain a subset of the overall EA; they are interdependant and there will be overlaps of interest between them (see Figure 10.1).
Organisations often employ other domains that cut across the main domains, the best example being security architecture, which is concerned with the consistency and completeness of security aspects across the whole enterprise. These domains will be discussed in more detail under solution architecture.
As with any development function, an enterprise architecture function needs to determine:
There are many frameworks available that organisations may adopt and/or adapt to fit their needs. Some well-known generic frameworks include:
There are frameworks specifically aimed at particular countries and organisations, for example:
An important function of enterprise architecture is to put in place principles and policies that constrain any change in activities to ensure that the strategic objectives are met. These will obviously have an effect on any solution, software or infrastructure architecture and the resulting development work.
Architecture principles are high-level constraints that are not directly actionable but that represent underlying rules and guidelines that drive the architecture.
‘Principles are general rules and guidelines, intended to be enduring and seldom amended, that inform and support the way in which an organization sets about fulfilling its mission.’
(from TOGAF 9.1)
‘Architecture principles fill the gap between high-level strategic intentions and concrete design’ (Greefhorst and Proper, 2011). Principles can be defined that relate to any domain or aspect; for example:
These examples are taken from Greefhorst and Proper (2011).
Policies are needed as a more actionable implementation of the architecture principles. These may include:
All of these are put in place for the benefit of the organisation in the long term, even though – for some change activities – these may be inconvenient or even more expensive.
It is the role of a specific authority (perhaps the EA function) to ensure that the policies are complied with through governance activities; although the ability to grant dispensation to be non-compliant for valid business reasons should always be considered.
If EA is for long-term, strategic architecture then solution architecture is a shorter-term, tactical form of architecture. EA guides evolutionary changes to the whole enterprise over a period of time, whereas many of those individual changes will require the oversight of a solution architecture.
First, solution architecture should be distinguished from the conventional design activities described in Chapters 8 and 9 on systems design. Initially, the solution architecture will be a high-level description of the building blocks of the total, holistic solution architecture and how they interface and interoperate to meet the requirements.
This outlines the work for more detailed design and implementation which then needs to be overseen or governed by the solution architect; if any need to change any of the requirements or building blocks is identified, then they are best placed to analyse the impact across the architecture and resolve any issues.
The solution building blocks described above are not just IT software- and hardware- based. In most organisations, any solution should be regarded as a business solution. Even with organisations that are simply updating the IT infrastructure, there should be a business driver for any solution – in other words, a business issue that needs to be addressed. The domains described above apply equally, therefore, to solution architecture.
For example, any software applications that rely on the infrastructure will typically have service levels that the business needs to be met; and improvements to those service levels required by the business users (such as better performance, availability or reliability) typically involve improving the platform upon which the applications run – that is, the infrastructure and its components.
The domain seemingly missing from that description is the data architecture. This can be seen as cutting across or mapping into the other domains (as it does in Figure 10.1), with different views relevant to each. Simplistically, data might be considered at the conceptual level (meaning) for the business, logically (structure and rules) for the applications and physically for the infrastructure (how and where it is stored or persisted) although other abstraction forms will also be involved.
An alternative view of the domains presented in Figure 10.1 is to consider how these domains describe layers of a hierarchical architecture where each layer provides services to the layer above (see Figure 10.2).
This layered architecture, where layers are offering services to the layer above, follows several of the patterns described earlier in the chapter, particularly the de-coupling of the hierarchical layers.
Any solution needs its scope to be defined and there are three dimensions of scope to be considered (see Figure 10.3):
Focus
The scope of a particular change that requires a solution architecture description may involve any or all of the domains discussed above; this reflects dependencies and the fact that the business requirements driving changes to the information systems are effectively from the business architecture. The solution may, however, be focused on changing aspects of the infrastructure architecture, whose requirements are driven by the application and data architectures’ reliance on infrastructure services; thus, business architecture may not figure in this solution. It should not be forgotten, however, that non-functional requirements or the technology are ultimately reflections of business needs (for example for performance and availability).
Breadth
Within each of the domains that are in focus, a solution is concerned with sets of architecture elements. Examples include business processes and people’s roles within the business architecture as well as new application software and infrastructure components and changes to the services being offered and depended on at each layer.
The broader context of a solution architecture is the enterprise architecture. The breadth of the architecture needs to be clearly understood.
For any solution architecture description, there comes a point where the architecture description stops and detailed design takes over; this is the depth. There are various ways of defining architecture levels; the perspectives of the Zachman Framework are worth considering as a classification.
As with any work specification, the solution architecture deliverables, related activities, roles and responsibilities should be defined before work begins. This is typically done in the form of an architecture contract. This can be considered as the architecture’s terms of reference. The deliverables can be defined using the three dimensions of scope discussed above.
In our three levels of architecture granularity, solution architecture fits between enterprise architecture and software architecture. In terms of compliance, two issues are involved:
Within this governance brief, the solution architect needs to be able to respond and react to issues that arise from the ensuing work, such as when technologies do not behave as expected or where non-functional requirements are not achievable without compromise or a change in the architecture.
Software architecture is fundamentally concerned with the purpose and structure of software applications, including software components, that may be considered to deliver platform services within the Infrastructure architecture. If operating within a described solution architecture, then its purpose is typically to break down the solution architecture functional building blocks or components into more granular, decomposed and eventually more physically implementable software components where appropriate.
The software architect incorporates more implementation-specific factors such as:
There is clearly a significant overlap between this level of architecture and the solution design activities described in Chapters 8 and 9.
The concept of tiered or layered architecture as a basic pattern was introduced earlier in the chapter. We now explore the concept in more detail.
Two-tier, client-server
An early, basic version of this tiered pattern is a client-server arrangement, as illustrated in Figure 10.4.
In this arrangement we see:
This arrangement was common in the 1980s and 1990s, when PCs, as opposed to dumb terminals, became common on user’s desktops. Typically in this arrangement, both the client and the server may each be performing different aspects of business logic. Where there was a lot of this business logic occurring on the part of the client, it would be referred to as a ‘thick client’; where most of this was on the server, it would be called a ‘thin client’.
This arrangement has usually involved tightly coupled client and server components, where the client was dependent on that specific server and the server was in turn dependent on that specific client. This may have solved the immediate problem of deploying clients but it did not provide sufficient flexibility for future development.
This problem could be addressed by de-coupling the client from the server, where the server delivers its services in a more generic manner (typically through the interface pattern). Multiple alternative clients could be developed for different platforms, each of which could access the services. Typically, the servers became thicker and the clients thinner in order to ‘centralise’ as much business logic as possible on the server.
Three-tiered software architecture
The client-server approach works well when the application exists within a silo; typically a single database dedicated to that application, even with its multiple clients. In most organisations, these silo-ed applications needed to be integrated – particularly where databases needed to be shared by multiple applications and clients potentially require data from multiple sources.
A third, middle tier provides the means to achieve this, where the business logic is de-coupled from the data sources and components within that layer can be shared by multiple clients. The concept of an application as a silo-ed set of software began to break down and the focus was placed instead on the application being defined by the services provided at the point of delivery to the business users via the user interface client. This is why, in enterprise and solution architecture in particular, application architecture that models and controls this complexity of dependencies across applications to deliver services to the business architecture is important.
Figure 10.5 illustrates how multiple applications can share a number of components at the middle and data tiers.
N-tiered software architecture
The three-tier architecture is, however, simplistic. Typically, in modern architectures, these need to be sub-divided further (see Figure 10.6), for example:
Not all of these tiers are needed all the time but, as organisations with complex IT systems begin to integrate their applications using enterprise technologies, then several are often required.
Today, most applications, no matter how many tiers are involved, are built as assemblies of components. By doing so they tend to be:
Systems as assemblies of components
The primary role of a software architect is to understand these complex software architectures and to be able to determine any specific solution:
Component diagrams and models are available in the Unified Modelling Language (UML) and other notations to allow such an architecture to be modelled.
Functionality provided through component interactions
Applications deliver their functionality and services through their software components interacting with each other. In Chapter 7, various forms of functional modelling are described, including system use cases, as a means of describing the application services provided to the users. The functional model map shows how system use cases can be realised through UML interaction models, particularly sequence diagrams that are commonly referred to as use case realisations. The participants within the software system in this top level of interaction modelling are typically components. Such modelling shows where existing components and their services can be utilised and where new functionality is required, either as new services on existing components or through new components.
Component specification
Specification of software components at this level can typically be done at a ‘black-box’ level by specifying:
The components can then be designed, built and tested to meet these specifications and the requirements behind them.
The ability to specify components in this manner means that their behaviour and non-functional aspects can be black-box tested, providing confidence in them before they are integrated into broader systems for further testing, including regression testing of other components and applications (and even business processes) that may be effected by the change.
If this chapter has revealed anything, it is that the amount and level of complexity within many organisations in terms of their business functions and the IT they utilise is difficult to manage when organisations are looking to make changes to any aspect. Therefore, a variety of roles can be recognised that contribute to this management.
Enterprise and solutions architecture can provide a holistic view of all these aspects as indicated in all the various architecture domains. Enterprise architects attempt to model the whole enterprise (at a high level of abstraction) to help specify and oversee long-term, strategic change to these domains in order to deliver the strategic vision; solution architects focus on a subset of the enterprise architecture to specify and oversee shorter-term tactical changes in order to deliver a solution.
Within a solution, the solution architects include software applications and their high-level building blocks, usually alongside business, data and infrastructure building blocks. Software architects typically focus on the software components at the next level of detail, particularly where those components may be reused across a number of applications.
The specific architecture domains cut across these strategic and tactical architectures:
Domain architects who work in these areas are typically involved in defining domain-specific standards and governing domain issues that ensure that all solutions are working in a consistent manner to deliver the vision. By doing so, they may also identify and be involved in the resolution of conflicts between different solution activities.
Each type of architecture needs to engage with the relevant stakeholders, internal and external. The following list is not exhaustive, but provides an indication of the range of stakeholder types that need to be engaged with.
Organisation owners/board
The board is responsible for delivering both long- and short-term returns to the owners. They do this by ensuring that the organisation is fit for purpose to deliver its mission, not only today but also into the future. That requires the organisation to change to meet the challenges of the changing world around it as determined in its strategy.
Strategic change usually involves all aspects of the organisation and is where enterprise architecture becomes a tool for the organisation to understand the complexities involved and to determine how those changes can be delivered over time piece-by-piece, without breaking the organisation in the process. This involves significant investment in change decisions; the board are spending the owners’ money and need to identify which change activities not only provide short-term gains but also support the long-term vision. EA can provide such information and advice.
External legal, standard and compliance regimes
A common driver of change is the legal and compliance environment in which the organisation operates. New legislation and standards may require changes to how the organisation operates and this may require changes to business processes and/or IT systems in order to comply. There are often agencies or other authorities that can be engaged with in order to clarify any compliance issues and minimise risk to the business of being fined, prosecuted or even disqualified from conducting business.
Senior business management
Senior managers across the organisation are typically the ‘owners’ of business units and are responsible for ensuring that they operate effectively. Those units discharge various business functions involving business processes performed by their staff, often through the use of IT applications. Change activities may be funded through their delegated budget and they will be concerned that any outcomes are achieved after the change, particularly those that impact on their unit’s key performance indicators (KPIs).
Project, programme and portfolio management
Significant change activities are often managed by project and/or programme managers. Architects need to work closely with them to ensure that architecture activities are built into the plans, especially any governance activities.
Operations managers
These are often mid-level managers responsible for ensuring that day-to-day business and IT operations are conducted properly. They need to ensure that the correct processes are performed and that the appropriate level of resources are available to meet any performance or other service level targets.
Changes to the operating model obviously have a significant impact on these stakeholders; they are often a key source of change requests, problem statements and requirements that require a solution and they will need to be satisfied that any changes are fit for purpose.
Process workers and application users
Most solutions will struggle to succeed unless the users accept them. They may provide useful requirements that help ensure that any solutions are a good fit for their tasks. They may need to be re-organised and reskilled as part of any holistic solution.
Suppliers
Components of a solution may be procured externally, whether it be software, hardware; or even business or application services. Business functions may be outsourced, but they need to be interfaced with correctly; many application services can be outsourced as cloud services or Software as a Service (SaaS).
Solutions developers
This is a broad definition that includes business and system analysts, designers, programmers and testers. These may be internal, contracted or outsourced resources that will deliver parts of the solution.
Given the wide range of architecture roles and related stakeholders, there are many organisational frameworks to determine where architecture functions are placed within an organisation, including reporting lines.
Strategic
Enterprise architecture should be a business-as-usual function, constantly helping organisations to manage strategic change. As well as maintaining the EA content, this function should be prioritising and planning tactical change activities, often communicated in the form of a ‘road-map’.
The road-map should show how various streams of change activities will deliver change in the various business segments and domains, particularly where a number of these deliver a tranche of changes, synchronised at a milestone, which represent a significant holistic step change in the enterprise architecture. There will be key business events, such as strategic review cycles, or responses to significant unexpected changes in the environment, to which the EA function will need to respond and update the road-map.
Tactical
Enterprise and solution architects may be involved in a number of projects, such as a programme that delivers a number of changes as outlined in the EA road-map. Where there are a number of separate deliverables to be assembled to deliver a holistic solution, the programme plan can be regarded as a more detailed tactical road-map reflecting inter-project dependencies and synchronisation issues that need to be managed as risks. Day-to-day management of these plans and risks typically falls to programme and project managers, supported by the architects as the governors of the architecture behind these risks.
Other architects, such as domain architects and software architects are also involved in the definition, planning and governance of these changes.
Governance has been mentioned throughout this chapter. It is a key function of an architect, as it is a crucial part of architecture management. Architecture without governance is like requirements without testing. There is little point in establishing policies, standards and architectures if there is no check that these are being followed and complied with; that is the role of governance.
This chapter began with the ISO 42010 definition of architecture as:
‘The fundamental organization of a system embodied in its components, their relationships to each other, and to the environment, and the principles guiding its design and evolution’.
Governance therefore needs to oversee all these aspects, particularly through validation and verification of both the final structure and the adherence to principles and other constraints imposed on its development.
Governance therefore requires:
Greefhorst, D. and Proper, E. (2011) Architecture principles: the cornerstone of enterprise architecture. Springer, London and New York.
ISO (2011) ISO/IEC/IEEE 42010:2011 – ‘Systems and software engineering’ – Architecture description. International Standards Organisation.
The Open Group (2011) TOGAF® Version 9.1. Van Haren, Zaltbommel, NL.
Buschmann, F., Meunier, R., Rohnert, H., Sommerland, P. and Staf, M. (1996) Pattern-oriented software architecture. Wiley, Chichester.
Fowler, M. (2003) Patterns of enterprise application architecture. Addison-Wesley, Boston, MA.
Gamma, E., Helm, R., Johnson, R. and Vlissides, J. (1994) Design patterns: elements of reusable object-oriented software. Addison-Wesley, Boston, MA.
Lankhorst, M., et al. (2009) Enterprise architecture at work: modelling, communication and analysis. Springer, London and New York.
Larman, C. (2005) Applying UML and patterns (3rd edition). Prentice Hall, Indianapolis, IN.
Linthicum, D. S. (2004) Next generation application integration. Addison-Wesley, Boston, MA.
Op’t Land, M., Proper, E., Waage, M., Cloo, J. and Steghuis, C. (2009) Enterprise architecture: creating value by informed governance. Springer, London and New York.