Why Software Architecture Fails: Entropy, Broken Windows, and Sustainable Design
This article explains how entropy, the broken‑window effect, and accumulated complexity erode software systems, compares behavior and architecture value dimensions, and presents fundamental principles such as Ockham's razor, SOLID, layering, and anti‑corruption layers to build maintainable, low‑cost architectures.
Entropy Law
Entropy, originally from thermodynamics, measures disorder; in software it appears as increasing code decay and technical debt, making systems harder to maintain.
Broken Window Effect
Neglected minor issues invite more problems, leading to a cascade of defects and reduced quality.
Value Dimensions
Software has two value dimensions: behavior (functionality) and architecture (flexibility, low cost). Both must be maintained over the system’s lifecycle.
Behavior Value
Implementing requirements and fixing bugs; delivering profit to users.
Architecture Value
Designing flexible, low‑cost systems that can be easily modified when requirements change.
Which Value Is More Important?
Behavior is urgent but not always critical; architecture is important but less urgent. Good architecture maximizes developer productivity and minimizes total operating cost.
Complexity
Complexity arises from dependencies and obscurity, accumulates through many small issues, and is measured by change amplification, cognitive load, and unknown unknowns.
Principles to Reduce Complexity
Avoid tactical programming; favor strategic design.
Apply Ockham’s razor: keep it simple.
Maintain consistency across code, APIs, documentation.
Ensure orthogonality to isolate changes.
Use reversibility and layer abstraction.
Follow SOLID principles (SRP, OCP, LSP, ISP, DIP).
Design components with clear boundaries, no circular dependencies.
Layering and Abstraction
Separate system into layers with well‑defined interfaces, e.g., the TCP/IP model, to limit impact of changes.
Complexity Sinking
Push complexity down to lower layers (e.g., language runtime, service mesh) so users face simpler interfaces.
Communication and Integration
Use anti‑corruption layers, open host services, and publish/subscribe events to decouple components.
Keeping Details Separate
Treat databases, web UI, and frameworks as details; keep core business logic independent.
UML for Modeling
Use use‑case, class, activity, sequence, and state diagrams to visualize designs.
Source: Tencent Developer
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
21CTO
21CTO (21CTO.com) offers developers community, training, and services, making it your go‑to learning and service platform.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
