Software Architecture and Decision-Making: Leveraging Leadership, Technology, and Product Management to Build Great Products (Early Release)

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

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. As software architects, we learn about abstractions, architecture styles, and patterns. We study their pros and cons, which one to use in a given situation, and how to compose them with an awareness of pitfalls, negative examples, and use cases. However, many errors are made not because we do not understand these things. Most design mistakes are caused by a lack of judgment, not by a lack of knowledge. Here, judgment refers to the ability to make considered decisions or arrive at sensible conclusions optimizing for the most important outcome. 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.

Author(s): Srinath Perera
Publisher: Addison-Wesley Professional
Year: 2024

Language: English
Pages: 234

Cover Page
Title Page
Contents
Table of Contents
1. Introduction to Software Leadership
Role of Judgment
Goal of This Book
Part I: Introduction
Part II: Essential Background
Part III: System Design
Part IV: Putting Everything Together
2. Understanding Systems, Design, and Architecture
What Is Software Architecture?
How to Design a System
Five Questions
Seven Principles: The Overarching Concepts
Designing for an Online Bookstore
Designing for the Cloud
Summary
3. Mental Models for Understanding and Explaining System Performance
A Computer System
Models for Performance
Optimization Techniques
Intuitive Feel for Performance
Leadership Considerations
Summary
4. Understanding User Experience (UX)
General UX Concepts for Architects
UX Design for Configurations
UX Design for APIs
UX Design for Extensions
Leadership Considerations
Summary
5. Macro Architecture: Introduction
History of Macro Architecture
Modern Architectures
Macro Architectural Building Blocks
Leadership Considerations
Summary
6. Macro Architecture: Coordination
Approach 1: Drive Flow from Client
Approach 2: Use Another Service
Approach 3: Use Centralized Middleware
Approach 4: Implement Choreography
Leadership Considerations
Summary
7. Macro Architecture: Preserving Consistency of State
Why Transactions?
Why Do We Need to Go Beyond Transactions?
Going Beyond Transactions
Best Practices
Leadership Considerations
Summary
8. Macro Architecture: Handling Security
User Management
Interaction Security
Storage, GDPR, and Other Regulations
Security Strategy and Advice
Leadership Considerations
Summary
9. Macro Architecture: Handling HA and Scale
Adding High Availability
Understanding Scalability
Scaling for a Modern Architecture: Base Solution
Scaling: The Tools of Trade
Building Scalable Systems
Leadership Considerations
Summary
10. Macro Architecture: Microservices Considerations
Decision 1: Handling Shared Database(s)
Decision 2: Securing Microservices
Decision 3: Coordinating Microservices
Decision 4: Avoiding Dependency Hell
Loosely Coupled, Repository-Based Teams as an Alternative to Microservices
Leadership Considerations
Summary
11. Server Architectures
Writing a Service
Understanding Best Practices for Writing a Service
Understanding Advanced Techniques
Using These Techniques in Practice
Leadership Considerations
Summary
12. Building Stable Systems
Why Do Systems Fail, and What Can We Do About Them?
How to Handle Known Errors
Common Bugs
How to Handle Unknown Errors
Graceful Degradation
Leadership Considerations
Summary
13. Building and Evolving the Systems
Getting Your Hands Dirty
Communicating the Design
Evolving the System: How to Learn from Your Users and Improve the System
Leadership Considerations
Summary
Author Bio