This book introduces the concepts and practice of software architecture-what a system is designed to do, and on how its components are meant to interact with each other. An architecture is an abstract view, distinct from the details of implementation, algorithm, and data representation. Its creation is the first step in designing a system with properties desired by customers, end users, developers, maintainers, and other interested parties. The authors cover here not only essential technical topics for specifying and validating a system, but, for the first time, emphasize the importance of the business context in which large systems are designed. Enhancing both technical and organizational discussions, key points are illuminated by substantial case studies undertaken by the authors and the Software Engineering Institute.


Architecture is crucial to the success of any large software system -- but even a superb architecture will fail if it isn't communicated well. Now, there's a language- and notation-independent guide to capturing architecture so it can be used successfully by every analyst, software designer, and developer. The authors review the diverse goals and uses of software architecture documentation, providing documentation strategies for several common scenarios. They identify the basic unit of software architecture documentation: the viewtype, which specifies the type of information to be provided in an architectural view. For each viewtype -- Modules, Component-and-Connectors, and Allocation -- they offer detailed guidance on documenting what really matters. Next, they demonstrate how to package architecture documentation in coherent, usable form: augmenting architectural views with documentation of interfaces and behavior; accounting for architectural variability and dynamic systems; and more.

The foundation of any software system is its architecture. Using this book, you can evaluate every aspect of architecture in advance, at remarkably low cost -- identifying improvements that can dramatically improve any system's performance, security, reliability, and maintainability. As the practice of software architecture has matured, it has become possible to identify causal connections between architectural design decisions and the qualities and properties that result downstream in the systems that follow from them. This book shows how, offering step-by-step guidance, as well as detailed practical examples -- complete with sample artifacts reflective of those that evaluators will encounter. The techniques presented here are applicable not only to software architectures, but also to system architectures encompassing computing hardware, networking equipment, and other elements. For all software architects, software engineers, developers, IT managers, and others responsible for creating, evaluating, or implementing software architectures.


DevOps

by Len Bass, Ingo Weber, and Liming Zhu

Published 8 May 2015

The First Complete Guide to DevOps for Software Architects

 

DevOps promises to accelerate the release of new software features and improve monitoring of systems in production, but its crucial implications for software architects and architecture are often ignored.

 

In DevOps: A Software Architect’s Perspective, three leading architects address these issues head-on. The authors review decisions software architects must make in order to achieve DevOps’ goals and clarify how other DevOps participants are likely to impact the architect’s work. They also provide the organizational, technical, and operational context needed to deploy DevOps more efficiently, and review DevOps’ impact on each development phase. The authors address cross-cutting concerns that link multiple functions, offering practical insights into compliance, performance, reliability, repeatability, and security.

 

This guide demonstrates the authors’ ideas in action with three real-world case studies: datacenter replication for business continuity, management of a continuous deployment pipeline, and migration to a microservice architecture.

 

Comprehensive coverage includes

• Why DevOps can require major changes in both system architecture and IT roles

• How virtualization and the cloud can enable DevOps practices

• Integrating operations and its service lifecycle into DevOps

• Designing new systems to work well with DevOps practices

• Integrating DevOps with agile methods and TDD

• Handling failure detection, upgrade planning, and other key issues

• Managing consistency issues arising from DevOps’ independent deployment models

• Integrating security controls, roles, and audits into DevOps

• Preparing a business plan for DevOps adoption, rollout, and measurement


Designing Software Architectures will teach you how to design any software architecture in a systematic, predictable, repeatable, and cost-effective way.


This book introduces a practical methodology for architecture design that any professional software engineer can use, provides structured methods supported by reusable chunks of design knowledge, and includes rich case studies that demonstrate how to use the methods.

 

Using realistic examples, you’ll master the powerful new version of the proven Attribute-Driven Design (ADD) 3.0 method and will learn how to use it to address key drivers, including quality attributes, such as modifiability, usability, and availability, along with functional requirements and architectural concerns.

 

Drawing on their extensive experience, Humberto Cervantes and Rick Kazman guide you through crafting practical designs that support the full software life cycle, from requirements to maintenance and evolution. You’ll learn how to successfully integrate design in your organizational context, and how to design systems that will be built with agile methods.


Comprehensive coverage includes

  • Understanding what architecture design involves, and where it fits in the full software development life cycle
  • Mastering core design concepts, principles, and processes
  • Understanding how to perform the steps of the ADD method
  • Scaling design and analysis up or down, including design for pre-sale processes or lightweight architecture reviews
  • Recognizing and optimizing critical relationships between analysis and design
  • Utilizing proven, reusable design primitives and adapting them to specific problems and contexts
  • Solving design problems in new domains, such as cloud, mobile, or big data 


DevOps Powerpoints

by Len Bass, Ingo Weber, and Liming Zhu

Published 7 June 2017