Software Architecture and Decision-Making: Leveraging Leadership, Technology, and Product Management to Build Great Products, 1st edition

Published by Addison-Wesley Professional (21 November 2023) © 2024

  • Srinath Perera
Products list

Details

  • A print edition

This product is expected to ship within 3-6 business days for US and 5-10 business days for Canadian customers.

Title overview

Leverage leadership knowledge to make better software architecture decisions. Think deeply but implement slowly.

Theoverarching goal of software systems (hence, for software architecture)is to build systems that meet quality standards and that provide thehighest return on investment (ROI) in the long run or within a definedperiod of time.

A great product requires a combinationof technology, leadership, and product management (including UX).Leadership is primarily about managing uncertainty and making the rightjudgment. To build great products, technical leaders need to combinetechnology, leadership, and product management knowledge, and make theright decisions. Many technical mistakes come from the gap betweenknowledge about these three items and judgment.

In Software Architecture and Decision-Making,Srinath Perera explains principles and concepts that softwarearchitects must understand deeply and how to employ those principles tomanage uncertainty. The questions and principles discussed in this bookhelp manage uncertainty while building software architecture and providea framework for making decisions. This book is for all technicalleaders in the software industry who make holistic judgments about thesystems they build and for future leaders learning the craft.

  • Understandthe importance of strong decision making with examples from greattechnical leaders such as the Wright brothers and Kelly Johnson
  • Leveragefive key questions and seven important principles to understanduncertainties during the design process and make strategic architecturaldecisions
  • Approach the design systematically, first at the macro level and then the individual service level

Thisdefinitive guide explains principles and concepts--technical andnon-technical alike--that software architects, senior softwareengineers, and technical leads must understand to manage the inevitableuncertainty involved in building software systems and to drive successof the products for which they are responsible.

Table of contents

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

Need help?Get in touch