Fundamentals 17 min read

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.

21CTO
21CTO
21CTO
Why Software Architecture Fails: Entropy, Broken Windows, and Sustainable Design

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
Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

Software Architecturecomplexitydesign principlesentropySOLID
21CTO
Written by

21CTO

21CTO (21CTO.com) offers developers community, training, and services, making it your go‑to learning and service platform.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.