Skip to main content

Published by Addison-Wesley Professional (February 1, 2024) © 2024

Srinath Perera
    VitalSource eTextbook (Lifetime access)
    €29,99
    ISBN-13: 9780138249595

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

    Access details

    • Instant access once purchased
    • Fulfilled by VitalSource

    Features

    • Add notes and highlights
    • Search by keyword or page

    Language: English

    Product Information

    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.

    • Understand the importance of strong decision making with examples from great technical leaders such as the Wright brothers and Kelly Johnson
    • Leverage five key questions and seven important principles to understand uncertainties during the design process and make strategic architectural decisions
    • Approach the design systematically, first at the macro level and then the individual service level

     

    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

    Top