System Design vs. Software Design: Stop Arguing, Start Architecting

When you ask an engineer to provide clear cut definitions of System Design, System Architecture, Software Design, Software Architecture… the conversation suddenly has lots of hand waving, context-specific definitions, and “according to [insert popular engineering book]”. The truth is that, as with many terms in software engineering, there isn’t a clear-cut, industry-wide definition. That’s because it’s both a broad area of study, but also because it’s a constantly moving target due to the rapidly evolving developments in the tech ecosystem. Let’s reduce the hand-waving While building Multiplayer, I realized that we were also using these terms interchangeably. Our mission is to make visualizing, designing, and managing distributed systems effortless for developers, so it was inevitable that we would have to define the scope of “system design”, agree on what we expect when we say “system architecture”, and describe the people who are building the “software systems”. Even without clear-cut definitions, we would be able to get our point across, but we felt that to ensure full alignment, we needed clarity and a reduction in hand-waving in all of our communications. Both internally, in how we discussed our product and roadmap, and externally, in how we described our solution to other developers. We came up with shared definitions for all these terms, specifically in the context of distributed systems, and we hope you find this useful as well. Terms in Distributed Systems 1. Distributed Systems Distributed Systems, also known as distributed computing, are a collection of multiple independent software components - located on different machines that communicate through a network - that split up the work, coordinating efforts to achieve common goals. The ultimate goal of a distributed system is to enable the scalability, performance and high availability of applications - in fact, the vast majority of products and applications rely on them nowadays. The size, complexity, and topology a Distributed System can vary significantly, from as few as three servers to a few thousand servers, making their design, development, and management a unique challenge. 2. System Design “A system’s architecture is a representation of a system in which there is a mapping of functionality onto hardware and software components, a mapping of the software architecture onto the hardware architecture, and a concern for the human interaction with these components. That is, system architecture is concerned with the totality of hardware, software and humans.” - “Software Architecture in Practice” System Design is the process of defining the System Architecture and how it will be implemented, to meet the requirements and expected functionality of the application. In other words, it involves defining the high-level conceptual structure of an entire complex system (System Architecture) and all its major components and interactions - encompassing all aspects of the system (i.e. software, hardware, data, interfaces, and user interactions), to ensure that they work together effectively and efficiently to achieve specific goals. System Architecture is often intended for a broader audience besides developers: it includes stakeholders, managers, and decision-makers who need to understand the system's design at a conceptual level. Keep in mind that System Design is an iterative process: it will evolve as the technology ecosystem evolves and as your application requirements change. For the System Architecture Diagrams to be effective tools, they need to be constantly updated and provide a real-time, accurate, and interactive view of your system. Likewise, all the documentation mentioned should be always up-to-date, thorough and easily accessible - there are few things in the developer world as painful as incorrect or outdated documentation! 3. Software Design “[…] software architecture consists of the structure of the system [i.e. Software Architecture Styles], combined with the architecture characteristics the system must support, architecture decisions, and finally design principles” - Fundamentals of Software Architecture* * Availability, Reliability, Testability, Scalability, Security, Agility, Fault Tolerance, Elasticity, Recoverability, Performance, Deployability, Learnability Software Design defines the Software Architecture, providing a blueprint / roadmap / high level structure of the entire software system It zooms in on the nitty-gritty of how individual software components are crafted and communicate, and how the code is written (e.g. classes, functions, and modules). Although Software Architecture has a narrower scope than System Architecture (i.e. it specifically focuses on the software), it is similarly dynamic: it evolves overtime, as the application requirements change. What's Next This is just a brief overview and it doesn't include many important as

Apr 24, 2025 - 17:16
 0
System Design vs. Software Design: Stop Arguing, Start Architecting

When you ask an engineer to provide clear cut definitions of System Design, System Architecture, Software Design, Software Architecture… the conversation suddenly has lots of hand waving, context-specific definitions, and “according to [insert popular engineering book]”.

The Wolf of Wall Street –

The truth is that, as with many terms in software engineering, there isn’t a clear-cut, industry-wide definition. That’s because it’s both a broad area of study, but also because it’s a constantly moving target due to the rapidly evolving developments in the tech ecosystem.

Let’s reduce the hand-waving

While building Multiplayer, I realized that we were also using these terms interchangeably. Our mission is to make visualizing, designing, and managing distributed systems effortless for developers, so it was inevitable that we would have to define the scope of “system design”, agree on what we expect when we say “system architecture”, and describe the people who are building the “software systems”.

Even without clear-cut definitions, we would be able to get our point across, but we felt that to ensure full alignment, we needed clarity and a reduction in hand-waving in all of our communications. Both internally, in how we discussed our product and roadmap, and externally, in how we described our solution to other developers.

We came up with shared definitions for all these terms, specifically in the context of distributed systems, and we hope you find this useful as well.

Terms in Distributed Systems

1. Distributed Systems

Distributed Systems, also known as distributed computing, are a collection of multiple independent software components - located on different machines that communicate through a network - that split up the work, coordinating efforts to achieve common goals.

The ultimate goal of a distributed system is to enable the scalability, performance and high availability of applications - in fact, the vast majority of products and applications rely on them nowadays.

The size, complexity, and topology a Distributed System can vary significantly, from as few as three servers to a few thousand servers, making their design, development, and management a unique challenge.

2. System Design

“A system’s architecture is a representation of a system in which there is a mapping of functionality onto hardware and software components, a mapping of the software architecture onto the hardware architecture, and a concern for the human interaction with these components. That is, system architecture is concerned with the totality of hardware, software and humans.” - “Software Architecture in Practice”

System Design is the process of defining the System Architecture and how it will be implemented, to meet the requirements and expected functionality of the application.

In other words, it involves defining the high-level conceptual structure of an entire complex system (System Architecture) and all its major components and interactions - encompassing all aspects of the system (i.e. software, hardware, data, interfaces, and user interactions), to ensure that they work together effectively and efficiently to achieve specific goals.

System Architecture is often intended for a broader audience besides developers: it includes stakeholders, managers, and decision-makers who need to understand the system's design at a conceptual level.

Keep in mind that System Design is an iterative process: it will evolve as the technology ecosystem evolves and as your application requirements change. For the System Architecture Diagrams to be effective tools, they need to be constantly updated and provide a real-time, accurate, and interactive view of your system.

Likewise, all the documentation mentioned should be always up-to-date, thorough and easily accessible - there are few things in the developer world as painful as incorrect or outdated documentation!

3. Software Design

“[…] software architecture consists of the structure of the system [i.e. Software Architecture Styles], combined with the architecture characteristics the system must support, architecture decisions, and finally design principles” - Fundamentals of Software Architecture*

* Availability, Reliability, Testability, Scalability, Security, Agility, Fault Tolerance, Elasticity, Recoverability, Performance, Deployability, Learnability

Software Design defines the Software Architecture, providing a blueprint / roadmap / high level structure of the entire software system

It zooms in on the nitty-gritty of how individual software components are crafted and communicate, and how the code is written (e.g. classes, functions, and modules).

Although Software Architecture has a narrower scope than System Architecture (i.e. it specifically focuses on the software), it is similarly dynamic: it evolves overtime, as the application requirements change.

What's Next

This is just a brief overview and it doesn't include many important aspects of System Design and Software Design in Distributed Systems such as:

  • Phases in the System Design Process
  • System Architecture Styles
  • Distributed System Design Patterns
  • Phases in the Software Design Process
  • Software Architecture Styles
  • Software Design Patterns

If you are interested in a deep dive in the above concepts, visit the original article: System Design and Software Design in Distributed Systems

If you'd like to chat about this topic, DM me on any of the socials (LinkedIn, X/Twitter, Threads, Bluesky) - I'm always open to a conversation about tech!