Lesson 167 - Architecture vs Design

Mark Richards
13 Aug 202312:09

Summary

TLDRIn this episode of Software Architecture Monday, Mark Richards explores the nuanced differences between architecture and design in software development. He introduces a spectrum of decisions rather than a binary distinction and provides criteria to determine the nature of decisions, such as their structural impact, strategic vs. tactical nature, effort involved, and the significance of trade-offs. Using examples like choosing microservices and design patterns, Richards illustrates how these criteria can help identify who should make certain decisions and their overall system impact, offering a practical tool for developers and architects to navigate their responsibilities.

Takeaways

  • 🏛 Architecture and design are not binary but a spectrum of decisions, with varying degrees of impact and responsibility.
  • 🔍 The first criterion to differentiate between architecture and design is the involvement of structural aspects of the system, such as component organization and coupling.
  • 📈 Strategic decisions typically involve more people, take longer to make, and have a broader impact, whereas tactical decisions are quicker and involve fewer people.
  • 💪 High effort decisions are more likely to be architectural, while low effort decisions tend to be more design-oriented.
  • ⚖️ Trade-offs are inherent in software architecture, with significant trade-offs usually indicating an architectural decision and less significant ones leaning towards design.
  • 🤔 Determining the nature of a decision helps in identifying who should be responsible for making it, either the architect or the development team.
  • 🔑 Understanding the impact of a decision is crucial; architectural decisions generally have a higher impact on the system compared to design decisions.
  • 🌟 The example of choosing microservices as an architectural style demonstrates a high-impact, strategic, high-effort decision with significant trade-offs.
  • 🛠 The use of a strategy design pattern is an example of a tactical, low-effort decision with less significant trade-offs, typically a design responsibility.
  • 🔄 The decision to break up a payment service into separate services is a gray area, requiring analysis of structural change, strategic/tactical nature, effort, and trade-offs.
  • 🛑 The criteria provided can act as a tool to determine the responsibility and impact of decisions, helping to avoid conflicts and ensure appropriate decision-making roles.

Q & A

  • What is the main topic of the lesson in the provided video script?

    -The main topic of the lesson is the difference between architecture and design in software development.

  • How does Mark Richards define the difference between architecture and design?

    -Mark Richards explains that the difference between architecture and design is not a binary decision but a spectrum of decisions that lie between architecture and design.

  • What is the first criterion mentioned to determine if a decision is architectural or design-related?

    -The first criterion is whether the decision involves some structural aspect of the system or is merely about the source code.

  • How can you differentiate between strategic and tactical decisions?

    -Strategic decisions tend to involve a lot more people and take weeks to months to make, while tactical decisions can be decided with one or two people within an hour or a day.

  • What does the level of effort criterion indicate about a decision?

    -The higher the effort required, the more architectural the decision probably is.

  • Why is the significance of trade-offs an important criterion in differentiating architecture from design?

    -Significant trade-offs usually indicate architectural decisions, while less significant trade-offs are typically associated with design decisions.

  • Why is it important to understand whether a decision is architectural or design-related?

    -Understanding this helps determine who has the responsibility for making the decision and the overall impact of the decision on the system.

  • What is an example of a decision that is clearly architectural?

    -Choosing to use microservices for a new system is an example of a decision that is clearly architectural.

  • Can you provide an example of a decision that is clearly design-related?

    -Choosing to use the strategy design pattern for a part of the code is an example of a decision that is clearly design-related.

  • What is an example of a decision that falls in the middle of the spectrum between architecture and design?

    -Choosing to break up the payment service into separate services for each payment type is an example of a decision that falls in the middle of the spectrum.

  • How can the criteria discussed help avoid conflicts between architects and developers?

    -The criteria help determine who should have the ultimate responsibility for a decision, avoiding stepping on each other's toes or making decisions that one shouldn't have the responsibility to make.

  • What is the overall impact of architectural decisions compared to design-related ones?

    -Architectural decisions tend to have a higher impact on the system compared to design-related decisions.

Outlines

00:00

🏛 Understanding Architecture vs. Design

In this segment, Mark Richards introduces the topic of differentiating between architecture and design in software development. He emphasizes that the distinction is not binary but exists on a spectrum, and provides criteria to determine where a decision lies on this spectrum. The criteria include the structural aspect of the system, the strategic versus tactical nature of the decision, the level of effort involved, and the significance of trade-offs. Richards explains that understanding this spectrum is crucial for determining responsibility and impact, suggesting that architects and developers should collaborate but also know who should ultimately make the decision.

05:01

🛠 Criteria for Architectural Decisions

This paragraph delves into the criteria for making architectural decisions. Richards uses the example of choosing to use microservices for a new system to illustrate how to apply these criteria. He discusses the structural aspect of such a decision, its strategic nature, the high level of effort involved, and the significant trade-offs associated with microservices, such as fault tolerance and scalability versus complexity and potential performance issues. The paragraph highlights how these factors position the decision firmly on the architectural side of the spectrum, indicating that it should be made by an architect with input from the development team.

10:03

🎨 Design Decisions and Their Impact

In contrast to architectural decisions, this section examines design decisions, using the strategy design pattern as an example. Richards explains that such decisions are more about how source code is organized and written, are tactical, require minimal effort, and have less significant trade-offs. This positions the decision on the design end of the spectrum, suggesting that a development team or individual developer should be responsible for making this type of decision, albeit with collaboration from architects and other stakeholders.

🤔 Navigating the Gray Areas of Decision Making

Richards presents a scenario where the decision to break up a payment service into separate services for different payment types is analyzed using the established criteria. He discusses how this decision involves structural changes, is more tactical than strategic, requires a moderate level of effort, and involves significant trade-offs, such as potential impacts on performance and data integrity versus benefits like agility and extensibility. This analysis places the decision in a gray area, more towards the architectural side, indicating that while it may not be solely the architect's responsibility, it is significant enough to warrant careful consideration.

Mindmap

Keywords

💡Architecture

Architecture in the context of software refers to the high-level structure of the system, including the organization of components and their interactions. It is a fundamental concept in the video, as it discusses the differences between architecture and design. For instance, the script mentions 'architecture' when discussing the decision to use microservices, which is a structural choice impacting the overall system.

💡Design

Design, in software development, pertains to the detailed planning and creation of individual components or features. It is juxtaposed with architecture in the script to illustrate the spectrum of decisions. An example from the script is the use of the strategy design pattern, which is more of a design-level decision, focusing on how source code is organized within classes.

💡Spectrum

The term 'spectrum' is used to describe the range of decisions between architecture and design. It is a key concept in the video, as it highlights that decisions are not strictly binary but exist along a continuum. The script uses the spectrum to guide viewers in determining the nature of their decisions, as seen when discussing the criteria for evaluating decisions.

💡Structural Aspect

A 'structural aspect' refers to the organization of the source code into components and the relationships between them, including coupling and communication. The script emphasizes this as a criterion for differentiating architectural decisions from design decisions, such as when discussing the choice to use microservices versus a monolithic approach.

💡Strategic

Strategic decisions are those that are long-term and involve extensive planning and collaboration among many stakeholders. The script uses 'strategic' to describe decisions that take weeks to months and require input from multiple people, such as the choice to implement microservices architecture.

💡Tactical

Tactical decisions are more immediate and can be made quickly, often by a smaller group or even an individual. The script contrasts this with strategic decisions, using the example of choosing a design pattern, which can be a tactical decision made within an hour or a day.

💡Effort

The 'level of effort' refers to the amount of work required to implement a decision. The script uses this as a criterion to distinguish between architectural and design decisions, noting that decisions requiring more effort, like setting up a microservices ecosystem, tend to be more architectural.

💡Trade-offs

Trade-offs are the pros and cons associated with a decision, and they are a central theme in the video. The script discusses how significant trade-offs are typically associated with architectural decisions, such as the trade-offs involved with microservices, which offer benefits like fault tolerance and scalability but at the cost of complexity and potential performance issues.

💡Responsibility

Responsibility in the script refers to who should make a particular decision—whether it's the architect or the development team. The video emphasizes the importance of determining responsibility to ensure appropriate collaboration and decision-making, as illustrated when discussing the criteria for decision-making.

💡Impact

Impact denotes the effect a decision has on the overall system. The script discusses how architectural decisions tend to have a higher impact than design decisions, which is why it's important to understand the nature of the decision being made, as seen when evaluating the choice to break up the payment service into separate services.

Highlights

The difference between architecture and design is not binary but a spectrum.

Decisions can be categorized by their structural aspect, involving the system's organization or source code.

Strategic decisions usually involve more people and take longer to make compared to tactical decisions.

High effort decisions are more likely to be architectural, while low effort suggests a design focus.

Significant trade-offs are characteristic of architectural decisions, whereas less significant ones lean towards design.

Understanding the difference helps determine responsibility for making decisions between architects and developers.

Architectural decisions have a higher impact on the system compared to design decisions.

Using microservices is an example of an architectural decision due to its structural and strategic nature.

The choice of design patterns is a design decision, being tactical and involving low effort with less significant trade-offs.

Breaking up the payment service into separate services is a decision with significant trade-offs, falling more on the architectural side.

Most decisions will fall in the gray area between architecture and design, requiring careful consideration.

A tool is presented to help determine the responsibility and impact level of decisions in software architecture.

Collaboration between architects and developers is essential, but ultimate responsibility depends on the decision's nature.

The criteria provided can help avoid conflicts and ensure that decisions are made by the appropriate party.

The importance of understanding the spectrum between architecture and design for effective software development.

A spectrum slider is introduced as a visual tool to gauge the nature of decisions in software architecture.

Lesson 167 concludes with the practical application of the criteria to distinguish between architectural and design decisions.

Transcripts

play00:00

hello everyone and welcome to software

play00:03

architecture Monday my name is Mark

play00:05

Richards and in this lesson number 167

play00:08

we'll take a look at the difference

play00:10

between architecture

play00:12

and Design

play00:14

you can get a listing of all the lessons

play00:16

I do and software architecture Monday

play00:19

from my website at

play00:21

developer2architect.com lessons

play00:25

so is there a difference between

play00:28

architecture and design and it turns out

play00:32

that there is however here's something

play00:35

very interesting

play00:37

the difference between architecture and

play00:39

design is not a binary decision but

play00:43

rather a spectrum of decisions that lie

play00:47

between architecture and Design

play00:50

so let me show you some criteria that

play00:54

you can use to determine where in this

play00:57

spectrum your architecture or your

play01:00

decision actually lies the first

play01:03

criteria is whether your decision

play01:05

involves some structural aspect of the

play01:08

system

play01:09

or is it merely about the source code

play01:12

now when I say the structural aspect

play01:15

it's the organization of the source code

play01:17

into components and the coupling between

play01:20

those components or in distributed

play01:23

architectures

play01:25

it might need to be the deployment units

play01:27

uh the communication between those

play01:30

deployment units as well as the

play01:33

communication and types of data and

play01:36

databases you have these all form the

play01:38

structural aspect of the system

play01:41

another criteria that you can use is

play01:44

whether the decision is strategic or

play01:47

Tactical

play01:48

now one way to determine whether it's

play01:51

strategic or Tactical

play01:53

is to say for example how many people

play01:57

need to be involved in this decision and

play02:01

how long is it going to take to make

play02:03

this decision things that are strategic

play02:06

tend to involve a lot more people and

play02:09

take weeks to potentially months to make

play02:12

the decision whereas things that are

play02:14

tactical in nature can be decided with

play02:18

one person maybe two people within an

play02:21

hour or a day and so it's a good way of

play02:23

determining whether something is

play02:25

strategic or tactical the other

play02:28

kind of criteria is whether the decision

play02:31

involves a lot of effort

play02:33

or fairly straightforward minimal effort

play02:37

the longer or larger or higher the

play02:41

effort more architectural that decision

play02:44

probably is and finally the last

play02:47

criteria is about the trade-offs

play02:50

everything in software architecture has

play02:53

trade-offs every decision we make has

play02:56

trade-offs pros and cons

play02:58

what's the significance of those

play03:00

trade-offs is it fairly significant or

play03:03

less significant

play03:05

significant trade-offs usually are more

play03:08

on the architecture side of the spectrum

play03:10

whereas less significant trade-offs

play03:13

usually more in terms of design

play03:17

so you might be asking Mark why does

play03:20

this really matter and it's two reasons

play03:23

I can give you the first is that this

play03:26

helps determine who has the

play03:28

responsibility

play03:29

for making the decision now both here

play03:33

the architect as well as the development

play03:37

team should always collaborate to get

play03:40

additional information to get thoughts

play03:41

ideas opinions maybe there's something

play03:44

we're missing so I'm not really talking

play03:47

about the collaboration piece but really

play03:49

after that collaboration who ultimately

play03:52

has the responsibility for that decision

play03:56

and then second

play03:58

is knowing when you make a decision

play04:01

what's the overall impact

play04:03

things that are architectural in nature

play04:06

tend to have a higher impact

play04:09

than ones that are design related

play04:13

so with all this

play04:16

and nine now let's actually take a look

play04:19

at some examples I'm going to show you

play04:22

two extreme examples and then we'll see

play04:24

one that's right in the middle of the

play04:26

spectrum so for example right here what

play04:30

about choosing to use microservices for

play04:33

the new system and this is an

play04:35

architectural style we saw a couple of

play04:37

lessons ago

play04:38

well let's go through our criteria to

play04:41

see whether it's architecture and design

play04:43

you see because you might say oh well

play04:46

that's obviously architecture

play04:48

but why is it obviously architecture

play04:53

is choosing to use microservices more

play04:55

about the structure of the system or

play04:59

more about how we code

play05:01

and in this case it's definitely more

play05:03

about the structure of the system it's

play05:05

an architectural style that we happen to

play05:08

be using

play05:09

it's the decision to use microservices

play05:12

more strategic in nature or is this a

play05:14

quick tactical decision how many people

play05:17

are involved and how long will this

play05:19

decision take

play05:21

you might guess uh weeks to months and a

play05:25

lot of people are going to want to be

play05:27

involved in this decision so it tends to

play05:29

be more strategic

play05:32

up the level of effort

play05:34

High effort or low well those of you who

play05:36

have experienced microservices know this

play05:39

is pretty high effort and finally what

play05:43

about the trade-offs are there

play05:44

significant trade-offs or less

play05:46

significant trade-offs and here it turns

play05:49

out there's a lot of significant

play05:51

trade-offs with microservices for all

play05:54

the superpowers we get with great fault

play05:57

tolerance

play05:58

great things about scalability

play06:00

elasticity we pay the price

play06:04

with high cost very complex systems and

play06:09

also sometimes a lack of performance

play06:13

these trade-offs tend to be fairly

play06:15

significant especially when we start to

play06:17

talk about physical bounded contexts and

play06:20

data and it's like okay you've convinced

play06:22

me they're significant

play06:24

can see that is why this is on the far

play06:28

end of the architecture side of the

play06:30

spectrum

play06:31

but let's do a different kind of

play06:34

decision you choose to use the strategy

play06:37

design pattern for a part of your code

play06:41

well is this structural in nature or

play06:45

does this have to really do with how we

play06:47

write source code and clearly this is

play06:50

how we organize and write our source

play06:52

code in class files

play06:54

is this a strategic decision that

play06:56

involves a lot of people and a lot of

play06:58

planning and Analysis or is it fairly

play07:00

tactical something you can make a

play07:02

decision in a hour or less well it turns

play07:06

out this is a fairly straightforward

play07:07

decision it's fairly Tactical

play07:10

what's the level of effort here compared

play07:13

to something like building out a

play07:15

microservices ecosystem has fairly low

play07:18

effort and finally there are trade-offs

play07:22

but how significant are those pros and

play07:24

cons of choosing to use the strategy

play07:27

design pattern in it and it turns out

play07:29

they're less significant and so this is

play07:32

why this falls on the far end of the

play07:35

design Spectrum a development team or a

play07:39

developer would have the responsibility

play07:40

for making this the decision whereas if

play07:44

you saw with the micro Services piece an

play07:47

architect really should have that

play07:49

responsibility for that decision even

play07:52

though

play07:53

they should always collaborate with

play07:55

others such as development teams

play07:57

business stakeholders and and so on

play08:01

well these two were quite obvious but

play08:03

let's take a look at another kind of

play08:06

decision and this is choosing to break

play08:09

up the payment service into separate

play08:11

Services one for each payment type and

play08:14

so we take credit cards gift cards

play08:17

Reward Points uh World pay all these

play08:20

kind of different payment methods

play08:22

so instead of one Consolidated single

play08:25

service

play08:26

we're going to choose to break it apart

play08:29

is that architecture or design

play08:32

most

play08:33

of the decisions

play08:35

that you make

play08:37

will fall in this category those gray

play08:40

areas so let's use our criteria to see

play08:44

if we can help us decide where in the

play08:46

Spectrum this decision fits

play08:49

is this structural or code well we're

play08:52

going to have to move a lot of source

play08:54

code but we are creating additional

play08:57

deployment units and possibly more

play09:00

communication points between those so

play09:02

this is more on the architectural side

play09:05

of the spectrum

play09:07

is this a strategic decision

play09:09

that involves a lot of people and a lot

play09:12

of time or is it more Tactical

play09:15

well here it's neither of those extremes

play09:18

but it's probably more of a tactical

play09:21

decision and we can make this decision

play09:23

fairly quickly with only a few people

play09:26

what about the level of effort to break

play09:28

apart this service we're going to have

play09:31

to create new deployment units possibly

play09:33

break up the data so that might be a

play09:35

consideration but largely we're moving a

play09:38

lot of source code around to different

play09:40

projects or workspaces

play09:42

so it's more on the low effort side of

play09:47

the spectrum

play09:48

well you can start to see we're getting

play09:51

kind of close but we've got one more

play09:52

criteria

play09:54

about the trade-offs are they

play09:56

significant or less significant

play09:59

well think about it if we break up that

play10:02

payment service

play10:04

we may have communication between those

play10:07

which may impact performance

play10:09

if we can pay with multiple payment

play10:11

types we might be impacting data

play10:14

Integrity because now we have to have a

play10:17

distributed transaction but we get much

play10:20

better agility and extensibility and

play10:24

evolutionary architecture to add

play10:26

additional payment types so we're much

play10:28

better agility

play10:29

I would say those trade-offs are fairly

play10:32

important and fairly significant we

play10:35

could potentially derail a part of the

play10:38

system based on this decision

play10:41

and you can kind of see balancing these

play10:43

it falls right about here in B which is

play10:47

more on the architectural side of things

play10:50

and this is where a lot of your or I

play10:52

should say most of your decisions will

play10:54

lie so you can see by using these

play10:58

criteria we can kind of use this slider

play11:00

bar to really determine should I

play11:04

as a developer

play11:06

be making this decision

play11:08

or is this something an architect should

play11:10

probably make

play11:11

and conversely me as an architect should

play11:15

I be making certain decisions or defer

play11:18

those to a development team and this

play11:21

kind of tool helps avoid stepping on

play11:24

each other's Toes or making a decision

play11:27

that we probably shouldn't have the

play11:30

responsibility to make

play11:33

so this has been lesson 167 uh the

play11:36

differences between architecture and

play11:38

design and kind of a little tool that

play11:41

you can use to go through this criteria

play11:44

to really determine whose responsibility

play11:46

is this decision even though we do

play11:49

collaborate who should have the ultimate

play11:51

responsibility and how important

play11:54

is this decision in terms of the overall

play11:56

impact of our system

play11:58

so thank you so much for listening and

play12:01

stay tuned in two weeks for the next

play12:03

lesson in software architecture Monday

Rate This

5.0 / 5 (0 votes)

関連タグ
Software ArchitectureDesign DecisionsStructural AspectsStrategic ChoicesTactical MovesEffort AnalysisTrade-offsArchitectural StyleMicroservicesDesign Patterns
英語で要約が必要ですか?