Sustainable Software Architecture

Analyze and Reduce Technical Debt

Carola Lilienthal

Cite this publication as

Carola Lilienthal, Sustainable Software Architecture (2019), dpunkt.verlag, Heidelberg, ISBN: 9783960887805

588
accesses
9
quotes

Description / Abstract

Today's programmers don't develop software systems from scratch. instead, they spend their time fixing, extending, modifying, and enhancing existing software. Legacy systems often turn into an unwieldy mess that becomes increasingly difficult to modify, and with architecture that continually accumulates technical debt.
Carola Lilienthal has analyzed more than 300 software systems written in Java, C#, C++, PHP, ABAP, and TypeScript and, together with her teams, has successfully refactored them. This book condenses her experience with monolithic systems, architectural and design patterns, layered architectures, domain-driven design, and microservices.
With more than 200 color images from real-world systems, good and sub-optimal sample solutions are presented in a comprehensible and thorough way, while recommendations and suggestions based on practical projects allow the reader to directly apply the author's knowledge to their daily work.
"Throughout the book, Dr. Lilienthal has provided sound advice on diagnosing, understanding, disentangling, and ultimately preventing the issues that make software systems brittle and subject to breakage. In addition to the technical examples that you'd expect in a book on software architecture, she takes the time to dive into the behavioral and human aspects that impact sustainability and, in my experience, are inextricably linked to the health of a codebase. She also expertly zooms out, exploring architecture concepts such as domains and layers, and then zooms in to the class level where your typical developer works day-to-day.
This holistic approach is crucial for implementing long-lasting change."
From the Foreword of Andrea Goulet
CEO, Corgibytes,
Founder, Legacy Code Rocks

Description

Carola Lilienthal is managing director of WPS - Workplace Solutions GmbH and is responsible for the department of software architecture. Since 2003, Dr. Carola Lilienthal has been analyzing over 300 architectures in Java, TypeScript, C #, C ++, ABAP and PHP, and advising development teams on how to improve the sustainability of their software systems. She is particularly interested in the education of software architects, which is why she regularly passes on her knowledge at conferences, in articles and training courses.

Table of content

  • BEGINN
  • 1 Introduction
  • 1.1 Software Architecture
  • 1.2 Sustainability
  • 1.3 Technical Debt
  • 1.4 The Systems I Have Seen
  • 1.5 Who Is This Book For?
  • 1.6 How To Use This Book?
  • 2 Tracking Down Technical Debt
  • 2.1 Building Block Terminology
  • 2.2 Target and Actual Architecture
  • 2.3 Improvements to a Running System
  • 2.4 False Positives and Generated Code
  • 2.5 Cheat Sheet for Sotograph
  • 3 Architecture in Programming Languages
  • 3.1 Java Systems
  • 3.2 C# Systems
  • 3.3 C++ Systems
  • 3.4 ABAP Systems
  • 3.5 PHP Systems
  • 4 Architecture Analysis and Improvement
  • 4.1 Developers and Architects
  • 4.2 Working on Architecture is a “Holschuld†
  • 4.3 Live Architecture Improvement Workshop
  • 4.4 Dealing with Mothers and Fathers
  • 4.5 Modularity Maturity Index (MMI)
  • 4.6 Technical Debt in the Lifecycle
  • 5 Cognitive Psychology and Architectural Principles
  • 5.1 Modularity
  • 5.2 Pattern Consistency
  • 5.3 Hierarchy
  • 5.4 Cycles = Failed modularity + Pattern
  • 5.5 Consequences for Architectural Analysis
  • 6 Architectural Styles that Reduce Technical Debt
  • 6.1 Rules of Architectural Styles
  • 6.2 Separation of Business and Technical Building Blocks
  • 6.3 Layered Architecture
  • 6.4 Hexagonal, Onion, and Clean Architecture
  • 6.5 Microservices and Domain-Driven Design
  • 6.6 Pattern Languages
  • 6.7 Sustainability and Architectural Styles
  • 7 Pattern in Software Architecture
  • 7.1 Mapping the Target to the Actual Architecture
  • 7.2 The Ideal Structure: Domain-Oriented or Technical?
  • 7.3 Public Interfaces for Building Block
  • 7.4 Interfaces: The Architectural Miracle Cure?
  • 7.5 The Need for Microservices
  • 8 Pattern Languages: A True Architectural Treasure!
  • 8.1 The Treasure Hunt
  • 8.2 Software Archaeology
  • 8.3 From the Treasure Chest
  • 8.4 How Much Gold Is There?
  • 8.5 Annual Growth Rings
  • 8.6 Unclear Patterns Provoke Cycles
  • 9 Chaos Within Layers: The Daily Pain
  • 9.1 Evaluating the Mess
  • 9.2 The Big Ball of Mud
  • 9.3 Uneven Modules
  • 10 Refining Modularity
  • 10.1 Building Block Cohesion
  • 10.2 Building Block Sizes
  • 10.3 Class Sizes
  • 10.4 Method Size and Complexity
  • 10.5 Loose Coupling
  • 10.6 Coupling and Class Size
  • 10.7 How Modular Are You?
  • 11 Real-World Case Studies
  • 11.1 The Java System Alpha
  • 11.2 The C# System Gamma
  • 11.3 The C++ System Beta
  • 11.4 The Java System Delta
  • 11.5 The Java System Epsilon (with C# Satellites)
  • 11.6 The ABAP system Lambda
  • 12 Conclusion: The Path Toward Sustainable Architecture
  • Appendix
  • A Analysis Tools
  • A.1 Lattix
  • A.2 Sonargraph Architect
  • A.3 Sotograph and SotoArc
  • A.4 Structure101
  • References
  • Index

Related titles

    More of this author(s)