This eBook includes the following formats, accessible from your Account page after purchase:
EPUB The open industry format known for its reflowable content and usability on supported mobile devices.
PDF The popular standard, used most often with the free Acrobat® Reader® software.
This eBook requires no passwords or activation to read. We customize your eBook by discreetly watermarking it with your name, making it uniquely yours.
Also available in other formats.
Register your product to gain access to bonus material or receive a coupon.
Leverage leadership knowledge to make better software architecture decisions. Think deeply but implement slowly.
The overarching goal of software systems (hence, for software architecture) is to build systems that meet quality standards and that provide the highest return on investment (ROI) in the long run or within a defined period of time.
A great product requires a combination of technology, leadership, and product management (including UX). Leadership is primarily about managing uncertainty and making the right judgment. To build great products, technical leaders need to combine technology, leadership, and product management knowledge, and make the right decisions. Many technical mistakes come from the gap between knowledge about these three items and judgment.
In Software Architecture and Decision-Making, Srinath Perera explains principles and concepts that software architects must understand deeply and how to employ those principles to manage uncertainty. The questions and principles discussed in this book help manage uncertainty while building software architecture and provide a framework for making decisions. This book is for all technical leaders in the software industry who make holistic judgments about the systems they build and for future leaders learning the craft.
This definitive guide explains principles and concepts--technical and non-technical alike--that software architects, senior software engineers, and technical leads must understand to manage the inevitable uncertainty involved in building software systems and to drive success of the products for which they are responsible.
Register your book for convenient access to downloads, updates, and/or corrections as they become available. See inside book for details.
Chapter 1: Introduction to Software Leadership 1
Role of Judgment 1
Goal of This Book 3
Part I: Introduction 6
Part II: Essential Background 7
Part III: System Design 7
Part IV: Putting Everything Together 8
Chapter 2: Understanding Systems, Design, and Architecture 9
What Is Software Architecture? 9
How to Design a System 11
Five Questions 12
Seven Principles: The Overarching Concepts 16
Designing for an Online Bookstore 24
Designing for the Cloud 27
Summary 29
Chapter 3: Mental Models for Understanding and Explaining System Performance 31
A Computer System 32
Models for Performance 33
Optimization Techniques 41
Intuitive Feel for Performance 46
Leadership Considerations 46
Summary 47
Chapter 4: Understanding User Experience (UX) 49
General UX Concepts for Architects 49
UX Design for Configurations 53
UX Design for APIs 54
UX Design for Extensions 56
Leadership Considerations 57
Summary 57
Chapter 5: Macro Architecture: Introduction 59
History of Macro Architecture 60
Modern Architectures 62
Macro Architectural Building Blocks 63
Leadership Considerations 66
Summary 68
Chapter 6: Macro Architecture: Coordination 69
Approach 1: Drive Flow from Client 69
Approach 2: Use Another Service 70
Approach 3: Use Centralized Middleware 71
Approach 4: Implement Choreography 71
Leadership Considerations 73
Summary 73
Chapter 7: Macro Architecture: Preserving Consistency of State 75
Why Transactions? 75
Why Do We Need to Go Beyond Transactions? 76
Going Beyond Transactions 77
Best Practices 80
Leadership Considerations 81
Summary 83
Chapter 8: Macro Architecture: Handling Security 85
User Management 86
Interaction Security 88
Storage, GDPR, and Other Regulations 96
Security Strategy and Advice 98
Leadership Considerations 101
Summary 103
Chapter 9: Macro Architecture: Handling High Availability and Scale 105
Adding High Availability 105
Understanding Scalability 109
Scaling for a Modern Architecture: Base Solution 110
Scaling: The Tools of Trade 111
Building Scalable Systems 113
Leadership Considerations 117
Summary 118
Chapter 10: Macro Architecture: Microservices Considerations 119
Decision 1: Handling Shared Database(s) 120
Decision 2: Securing Microservices 122
Decision 3: Coordinating Microservices 122
Decision 4: Avoiding Dependency Hell 122
Loosely Coupled, Repository-Based Teams as an Alternative to Microservices 125
Leadership Considerations 126
Summary 127
Chapter 11: Server Architectures 129
Writing a Service 129
Understanding Best Practices for Writing a Service 130
Understanding Advanced Techniques 132
Using These Techniques in Practice 143
Leadership Considerations 146
Summary 147
Chapter 12: Building Stable Systems 149
Why Do Systems Fail, and What Can We Do About Them? 149
How to Handle Known Errors 151
Common Bugs 159
How to Handle Unknown Errors 161
Graceful Degradation 163
Leadership Considerations 163
Summary 164
Chapter 13: Building and Evolving the Systems 165
Getting Your Hands Dirty 165
Communicating the Design 172
Evolving the System: How to Learn from Your Users and Improve the System 172
Leadership Considerations 175
Summary 176
Index 179