Software Architecture Fundamentals - 06

 

๐Ÿ—️ System Architecture vs. Enterprise Architecture. And Why Design Patterns Matter

As developers or architects, we often get lost in the layers of structure we build. We use big words, system architecture, enterprise architecture, design patterns, but what do they really mean, and why should you care?

Let’s break these ideas down.


๐Ÿงฑ 1. System Architecture: Building a Specific Machine

System Architecture is the blueprint for a single computer system. It’s the detailed plan for:

  • How code is organized

  • How data flows

  • What subsystems exist

  • How those parts communicate

Think of it like designing a car: engine, wheels, sensors. all working together to move one vehicle forward.

✅ Goals:

  • Solve a specific business problem

  • Be lean, understandable, and maintainable

  • Use tools and structures fit for purpose

It’s focused, agile, and designed for one job, like the comment approval workflow in a blog platform.


๐Ÿข 2. Enterprise Architecture (EA): Designing the Whole Factory

Enterprise Architecture, on the other hand, is the structure of the entire business, its departments, people, processes, and the IT systems that support them.

๐Ÿ“š MIT Sloan’s definition:

“The organizing logic for business processes and IT infrastructure reflecting the integration and standardization requirements of the company's operating model.”

That’s a mouthful. Here's the gist:

๐Ÿ›️ EA Includes:

  • Departmental roles and workflows

  • Company-wide standards (for software, data, communication)

  • Infrastructure that supports everyone

It treats the entire business as a system, often pushing toward total standardization.


๐Ÿงจ 3. Where EA Can Go Wrong

While EA sounds smart on paper, it often leads to:

  • Massive, bloated systems

  • One-size-fits-all models (e.g., a “universal” Employee object)

  • Slow development due to over-engineering

  • A “cathedral” architecture no one fully understands

๐Ÿคฏ Consequence: Even a small change takes weeks because it affects a dozen departments and systems.

Agile thinkers push back: Why model the whole enterprise when you're solving a small problem? EA’s complexity often fights against the agility we need in real-world projects.


๐Ÿง  4. The Agile Alternative: Small, Focused Systems

Instead of one monolith, build independent, cooperating systems:

Agile architecture respects the bounded context, each team builds what it needs, for its own part of the problem space.


๐ŸŽต 5. Enter Design Patterns: Architecture’s Shared Language

Now that we’ve covered structure, let’s talk about how we solve problems inside those systems.

Design patterns are the recurring solutions to common problems in software design.

Think of them like musical genres: jazz, classical, hip hop. The exact notes differ, but the form and feel are instantly recognizable.

๐ŸŽท Example: The Singleton Pattern



“A Singleton is a globally accessible, one-of-a-kind object.”

You can build it many ways, but as long as it’s:

  • Unique

  • Central

  • Encapsulated
    …then it’s a Singleton.

Same goes for:

  • Factory Pattern: Delegate object creation

  • Observer Pattern: Notify listeners when something changes

  • Decorator Pattern: Add features without changing the base class

Patterns aren’t about syntax, they’re about intent.


๐Ÿงฉ 6. Patterns Interact: Context Is Everything

Just like a window might be part of both the Corner Office and Cross Ventilation patterns in architecture, software elements often participate in multiple design patterns.

๐Ÿงช You can't identify a pattern from structure alone.
You need to know the surrounding context and purpose.

That’s what makes software design a craft: recognizing patterns in the wild, applying them intentionally, and adapting them to the moment.


✨ 7. Patterns + Architecture = Shared Understanding

Whether you're working on a small system or part of an enterprise ecosystem, design patterns give teams a shared vocabulary.

Saying:

“This service is a Singleton, used inside a Factory.”

…is way more helpful than explaining hundreds of lines of implementation.


๐Ÿ“Œ Final Thoughts

  • System architecture builds focused solutions.

  • Enterprise architecture tries to model the business, often at a cost.

  • Design patterns are the vocabulary we use to build and talk about those solutions.

Keep it simple. Build only what you need. Use patterns wisely. And never confuse complexity with capability.

Comments

Popular posts from this blog

SQL Query and performance tuning - Indexing in depth

Apache Kafka - The basics

Spring: How to deal with circular dependencies