Simon Brown — The lost art of software design

Agile meets Architecture
24 Oct 202241:07

Summary

TLDRSimon Brown advocates for a balanced approach to software design in his talk, criticizing the extremes of 'big design up front' and no design at all. He emphasizes the importance of upfront design to set a direction while acknowledging the need for evolutionary architecture to adapt to changes. Brown introduces the C4 model for visualizing software architecture at different levels of abstraction, promoting better communication and decision-making within teams. His presentation encourages technical leadership and the use of various techniques to address risks and ensure the design's effectiveness.

Takeaways

  • 📚 The speaker emphasizes the importance of not completely abandoning upfront design in software development, as it can be a valuable tool when done correctly.
  • 🔄 The Agile Manifesto does not discourage upfront design; it encourages doing what adds value, and sometimes that includes some degree of design before development begins.
  • 💡 The talk highlights the need for a balanced approach to design, advocating for 'evolutionary architecture' that allows for both planned and unplanned evolution over time.
  • 🚫 The speaker criticizes the extreme approaches of either doing 'big design up front' or no design at all, suggesting that both extremes can be detrimental to effective software development.
  • 🛠 The speaker introduces the C4 model for visualizing software architecture, which provides a hierarchical set of diagrams at different levels of abstraction to communicate design decisions effectively.
  • 🤔 The importance of being able to answer two key questions in design is stressed: whether the diagrams reflect what we think we're going to build, and whether it's going to work.
  • 📉 The script discusses the S-curve of learning, indicating that many people get stuck at the early stages of learning about upfront design and fail to progress to a more sophisticated understanding.
  • 🤝 The speaker encourages the use of diagrams as a communication tool, stating that better diagrams lead to better design discussions and improved team alignment.
  • 📈 The talk underlines the significance of making architectural decisions related to technology and modularity upfront, as these are the decisions that are hard to change later.
  • 🧩 The speaker suggests using various techniques and practices, such as risk storming and architecture evaluations, to ensure that the design is robust and addresses key risks and requirements.
  • 🔍 The importance of having a common set of abstractions and a ubiquitous language for discussing architecture is highlighted, as it aids in scaling teams and maintaining a shared understanding of the system.

Q & A

  • What is the main argument Simon Brown makes about software design in his talk?

    -Simon Brown argues that while big upfront design has been largely abandoned in favor of agile practices, it's a mistake to throw out all upfront design work. Instead, he advocates for a balanced approach that incorporates some upfront design to set a direction, while also embracing evolutionary architecture to adapt to changes.

  • What does Brown mean by 'The Agile Manifesto does not say, don't do any of that stuff'?

    -Brown is referring to the common misconception that agile development excludes any form of upfront design. He clarifies that the Agile Manifesto does not explicitly forbid upfront design activities; rather, it encourages flexibility and adaptation, which does not preclude doing design work that adds value.

  • What is the quote from Dave Thomas that Brown frequently uses in his talks?

    -The quote from Dave Thomas that Brown frequently uses is 'Big design up front is dumb. Doing no design up front is even dumber.' This quote encapsulates Brown's stance on the importance of a balanced approach to design in software development.

  • Why does Brown emphasize the importance of technical leadership in software design?

    -Brown emphasizes the importance of technical leadership because it provides direction and ensures that all team members, regardless of team size or distribution, are aligned in their approach to design and development. It helps in making significant design decisions and maintaining a good architectural structure.

  • What is the C4 model that Simon Brown created and what does it represent?

    -The C4 model is a tool created by Simon Brown for visualizing software architecture. It consists of a hierarchical set of diagrams at different levels of abstraction, including system context, container, component, and code. It is designed to help teams communicate their design effectively and is notation-independent, allowing the use of various diagramming styles.

  • What does Brown suggest is the minimum level of upfront design needed before starting development?

    -Brown suggests that the minimum level of upfront design should include understanding the key requirements, important quality attributes, and constraints that drive the architecture. Specifically, one should be able to confidently draw a system context diagram and a container diagram that illustrate the design direction.

  • Why does Brown criticize the lack of technical decisions on architecture diagrams?

    -Brown criticizes the lack of technical decisions on diagrams because it leads to ambiguity and a lack of clarity about the system's design. Without specifying technologies and significant design decisions, it's difficult for teams to understand, evaluate, and communicate the architecture effectively.

  • What is the 'S-curve of learning' that Brown refers to and how does it relate to upfront design?

    -The 'S-curve of learning' is a concept that describes the rate of skill acquisition over time. Brown uses it to illustrate the initial slow progress in learning upfront design, followed by a phase of accelerated learning, and eventually a plateau. He encourages designers to push through the initial slow phase to gain a deeper understanding of design principles before they plateau.

  • What is Brown's view on the use of UML in modern software design?

    -Brown notes that UML is not widely used in modern software design due to various reasons, such as it being seen as too detailed, old-fashioned, or a tool for imposing solutions on developers. However, he suggests that the issue is not with UML itself but with how it is applied and that a common set of abstractions could be more useful than the standard notation.

  • What are some of the techniques Brown suggests for determining how much upfront design is sufficient?

    -Brown suggests techniques such as risk storming, architecture spike, threat modeling, and the use of architecture decision records to determine when enough upfront design has been done. The key is to stop when the team understands the significant design decisions and is comfortable with the risks of proceeding.

Outlines

00:00

🔄 The Shifting Perception of Software Design

Simon Brown discusses the evolution of software design over the past two decades, noting a pendulum swing from extensive upfront design to none at all. He emphasizes that while big upfront design can be wasteful, the complete abandonment of design principles has left a void. Brown highlights the Agile Manifesto's non-prescriptive approach to design, advocating for value-adding design work. He introduces the concept of evolutionary architecture and design, stressing the importance of making informed, adaptable design decisions that can guide a project through both planned and unplanned evolutions.

05:01

🤔 The Misinterpretation of Agile Design Principles

This paragraph delves into common misconceptions about Agile design, particularly the belief that Agile等同于no upfront design. Brown refutes this by referencing Agile literature and the Agile Manifesto, which do not preclude upfront design but rather encourage design that adds value. He uses a quote from Dave Thomas to illustrate the balanced approach needed, stating that while big design upfront is not ideal, doing no design at all is even worse. Brown also addresses the challenges of creating an architecture that is easy to evolve and the importance of making significant, yet adaptable, decisions.

10:02

📈 The Importance of Evolutionary Design and Technical Leadership

Simon Brown explains the concept of evolutionary design as starting with a simple foundation and iteratively adding features. He stresses the importance of establishing a good enough 'version one' to build upon, avoiding future rework. Brown also discusses the role of technical leadership in guiding design decisions across various team sizes and organizational structures, emphasizing the need for a shared understanding of design direction and principles.

15:03

📚 The Knowledge Gap in Software Design Practices

The speaker addresses the concerning gap in knowledge regarding fundamental software design practices. He points out that many teams lack a shared understanding of design techniques and heuristics, which hampers their ability to articulate and teach design processes. Brown laments the loss of traditional design methods like decomposition and the CRC card technique, which are essential for transforming business ideas into structured software solutions.

20:04

🛠️ The Role of Upfront Design in Agile Projects

Simon Brown discusses the role of upfront design in Agile projects, advocating for a balanced approach that avoids extremes. He argues that upfront design should focus on significant decisions that are costly to change later, such as technology choices and modularity. Brown emphasizes the importance of creating diagrams that can be understood and critiqued by others, facilitating better design discussions and enabling technical leadership.

25:05

🗺️ The Utility of Diagrams in Communicating Design

The speaker critiques the common practice of creating ambiguous diagrams that fail to communicate design effectively. He argues for the use of diagrams as a visual checklist for design decisions, advocating for clarity and precision in diagramming to foster better understanding and discussion. Brown also addresses the misconception that diagrams are not needed if the team has had a conversation about the design, asserting that diagrams are essential for capturing and conveying design intent.

30:05

📝 The Need for a Ubiquitous Language in Design Communication

Simon Brown discusses the need for a common set of abstractions and a ubiquitous language to communicate design effectively across teams. He introduces the C4 model, a hierarchical set of architecture diagrams at different levels of abstraction, designed to tell different stories to different audiences. The C4 model is notation-independent, allowing the use of various diagramming styles to suit the audience's technical level.

35:06

🔍 Deepening Design Understanding Through C4 Diagrams

The speaker explains how the C4 model helps teams deepen their understanding of the system they are designing. By creating system context and container diagrams, teams can answer key questions about the system's scope, user roles, integration points, and technology building blocks. Brown emphasizes that these diagrams should spark meaningful questions and discussions, leading to better design decisions.

40:08

🚦 Techniques for Assessing Design Adequacy

Simon Brown suggests techniques for assessing whether a design is adequate, including risk storming, threat modeling, and the use of architecture decision records. He advises using concrete experiments like prototypes and proof of concepts to validate architectural hypotheses. Brown also discusses the iterative nature of upfront design, recommending that teams stop when they understand the key drivers of their architecture and are comfortable with the risks of proceeding.

🛑 Knowing When to Stop with Upfront Design

The speaker addresses the question of how much upfront design is enough by suggesting that teams should stop when they have a good understanding of their key requirements, quality attributes, and constraints. Brown emphasizes the importance of being able to confidently draw system context and container diagrams and being comfortable with the design's ability to meet its objectives. He encourages teams to adopt an agile mindset, using various techniques as needed to reach this point of confidence.

📚 Seeking Resources for Improving Design Skills

In the final paragraph, Simon Brown is asked about resources for improving design skills. He acknowledges the lack of a single comprehensive resource and suggests that a portfolio of books, including classic design texts, may be necessary. Brown also expresses concern about teams becoming too focused on specific methodologies like DDD and hexagonal architecture, advocating for a broader understanding of design principles to deliver business value effectively.

Mindmap

Keywords

💡Agile Manifesto

The Agile Manifesto is a guiding set of principles for software development that values individuals and interactions, working software, customer collaboration, and responding to change over strict processes and plans. In the video, it is discussed in the context of how it does not discourage upfront design but rather emphasizes value addition through design if it supports the project's goals.

💡Evolutionary Architecture

Evolutionary Architecture refers to a design approach where the architecture of a system is allowed to evolve over time through incremental changes. The speaker mentions this concept, advocating for a balance between upfront design and the flexibility to adapt and evolve the architecture as needed.

💡Technical Design

Technical Design in the context of the video pertains to the process of making decisions about the modularity, technology choices, and other structural aspects of a software system. The speaker emphasizes the importance of technical design in creating a solid foundation for software development, beyond just writing better code.

💡Upfront Design

Upfront Design is the practice of conducting significant design work before the development phase begins. The video discusses the misconception that Agile methodologies reject upfront design, clarifying that Agile actually encourages design when it adds value, and that a balanced approach is preferable to extreme positions.

💡Modularity

Modularity is a design principle that involves dividing a system into separate, interchangeable modules or components. The script discusses the importance of modularity in creating an architecture that is easy to evolve and maintain, which is a key aspect of the speaker's argument for thoughtful upfront design.

💡Microservices

Microservices is an architectural style that structures an application as a collection of small, loosely coupled services. The speaker warns against the blind adoption of microservices, suggesting that while they offer benefits for agility and evolution, they are not suitable for every project and can introduce complexity.

💡Risk Storming

Risk Storming is a collaborative technique for identifying and addressing potential risks in a project. The video mentions this as a method to deal with risk in agile projects, emphasizing the importance of proactively identifying and mitigating risks, especially those related to architectural decisions.

💡Architectural Decisions

Architectural Decisions are significant choices made during the design of a software system that can have lasting impacts on its structure and function. The speaker discusses the importance of making informed and deliberate architectural decisions, particularly those related to technology and modularity.

💡C4 Model

The C4 Model is a method for visualizing software architecture through a hierarchy of diagrams at different levels of abstraction. The speaker introduces the C4 Model as a tool for creating clear, communicative diagrams that can help teams understand and evaluate their architectural decisions.

💡System Context Diagram

A System Context Diagram is a type of architecture diagram that shows the system of interest in the middle, surrounded by its users and the environment. The video script uses this term to illustrate the level of detail and understanding required to create a meaningful diagram that reflects the system's scope and integration points.

Highlights

The talk emphasizes the balance between big upfront design and no design, advocating for a middle ground that incorporates evolutionary architecture and design.

Agile manifesto does not discourage upfront design; it encourages doing work that adds value, which can include design activities.

Dave Thomas' quote 'big design up front is dumb, doing no design up front is even dumber' encapsulates the need for a balanced approach to design.

The speaker introduces the concept of evolutionary architecture, which involves making significant decisions that are hard to change, and planning for both planned and unplanned evolution.

The importance of creating an architecture that is easy to evolve is discussed, highlighting the challenges in making decisions that will stand the test of time.

The speaker differentiates between technical design (modularity, technology choices) and UI/UX/product design, focusing the talk on the former.

The talk argues that good design is essential for agility, supported by the Agile Manifesto's principle of continuous attention to technical excellence and good design.

The speaker introduces the C4 model for visualizing software architecture, emphasizing its hierarchical structure and notation independence.

The concept of 'diagrams as maps' is introduced, suggesting that different levels of diagrams should cater to different audiences and purposes.

The speaker discusses the importance of including technology choices on architecture diagrams to aid in understanding and communication.

The talk addresses the common misconception that architects should not impose solutions, arguing that making significant design decisions is part of an architect's role.

The speaker advocates for a common set of abstractions in architecture diagrams, rather than relying solely on standard boxes and lines notation.

The C4 model is described as a way to provide a visual checklist for design decisions, helping teams understand the scope and functionality of the system.

The speaker introduces the idea of using architecture diagrams to spark meaningful questions and discussions about the design, rather than just as decorative elements.

The talk discusses the need for better communication in design, suggesting that rich diagrams can lead to better design discussions and decision-making.

The speaker recommends techniques like risk storming, threat modeling, and architecture evaluations to help teams understand when they have done enough upfront design.

The closing point emphasizes adopting an agile mindset and having a toolbox of techniques to apply as appropriate, rather than a one-size-fits-all approach to design.

Transcripts

play00:05

[Applause]

play00:07

thank you very much so good afternoon

play00:09

the lost art of software design

play00:11

over the past decade maybe two decades

play00:13

teams have thrown away big design up

play00:15

front

play00:16

this is generally

play00:18

uva's talk caveat of course this has

play00:21

generally been a very good thing big

play00:23

upfront design is very wasteful et

play00:24

cetera et cetera however

play00:27

those same teams have also thrown away

play00:29

all of this stuff

play00:30

and it turns out that all of this stuff

play00:32

is actually quite useful

play00:34

now the agile manifesto does not say

play00:36

don't do any of that stuff

play00:38

but it's not very specific about teams

play00:41

should do that stuff if it adds value so

play00:44

dave thomas is in the room so i saw dave

play00:46

speak at a conference i think it was

play00:48

amsterdam and i think dave just threw

play00:50

this comment out off the cuff

play00:51

and i thought i loved that comment and

play00:54

it's been in every single talk since

play00:56

big design front is dumb doing no design

play00:58

front is even dumber and i love this

play01:00

this really epitomizes exactly what i've

play01:03

seen over the past 20 years with this

play01:05

flip-flop between doing everything to

play01:07

doing nothing

play01:09

why do we do this why do we take extreme

play01:12

approaches to everything what's in the

play01:14

middle

play01:15

and that's really what this talk is all

play01:16

about

play01:17

so

play01:18

of course agile doesn't say

play01:20

don't do design and

play01:22

people are probably not doing no design

play01:25

and really the emphasis that you'll see

play01:27

many people

play01:28

encouraging these days is really about

play01:30

evolutionary architecture and

play01:31

evolutionary design and of course we've

play01:33

heard lots of that uh today and

play01:35

yesterday with rebecca and pat and

play01:37

there's a fabulous book about this whole

play01:38

topic that i thoroughly recommend

play01:41

but it's not that easy

play01:44

creating an architecture that is easy to

play01:47

evolve

play01:49

by doing that

play01:50

you are

play01:52

creating and making a number of

play01:54

significant decisions

play01:56

that are hard to change themselves and

play01:59

many people jump on architectures

play02:01

microservices architectures serverless

play02:03

architectures anyone who went to randy's

play02:05

talk earlier you know 99 of people don't

play02:08

need microservices i completely agree

play02:09

but people jump on these things because

play02:11

they think they give them

play02:13

they think these architectural styles

play02:14

give them the ability to move fast and

play02:16

evolve quickly and they do but there are

play02:18

some caveats

play02:20

and of course when we think about

play02:22

changes and evolution

play02:24

there's both planned evolution and

play02:26

there's both unplanned evolution there's

play02:29

things we know that are going to happen

play02:30

in the future and things we have no idea

play02:33

about

play02:34

and we also need to make sure these

play02:36

changes are done in a guided fashion to

play02:38

repeat what pat said earlier

play02:40

to caveat this talk i'm going to use the

play02:42

word design

play02:44

i'm really focusing on technical design

play02:47

so modularity choosing technologies etc

play02:50

etc i'm not focusing on ui ux product

play02:53

design that stuff is super important

play02:55

super vital i'm just focusing on that on

play02:57

the tech stuff why

play03:00

because of that

play03:03

sure we have tdd and code reviews and

play03:06

pairing and we have lots of great

play03:08

techniques to help us make better code

play03:12

but this isn't just about writing better

play03:15

code this is so much bigger

play03:18

so the goal of my talk today

play03:20

is to explain why some upfront design is

play03:23

useful

play03:25

and i want to provide some real world

play03:27

tips that you can use tomorrow

play03:30

to take back to organizations and start

play03:32

to apply these things so my overall

play03:35

approach here to be very upfront is some

play03:38

design upfront

play03:39

but admitting that we can't know

play03:41

everything and we are going to have to

play03:42

do some degree of evolutionary

play03:44

architecture

play03:46

you all know the drill

play03:48

that's the length for the slides when

play03:49

the downstairs room

play03:51

uh so if you don't know me my name is

play03:53

simon brown i'm an independent

play03:54

consultant specializing in software

play03:55

architecture i'm the creator of the c4

play03:57

model for visualizing software

play03:58

architecture that will come up later of

play04:00

course

play04:01

i've been talking about this topic for

play04:04

pretty much 15 almost 20 years in some

play04:06

cases

play04:07

and

play04:08

i could have done this talk 20 years ago

play04:11

from my perspective nothing has really

play04:13

changed here and when i was listening to

play04:15

the panel so i arrived late yesterday

play04:16

because all the flight debacle etc but

play04:18

when i was listening to the panel

play04:19

yesterday

play04:21

this sign caught my eye

play04:23

architect sorry agile mates architecture

play04:27

and i thought

play04:28

the ordering of those words was kind of

play04:30

interesting because i've been calling

play04:32

this conference

play04:34

this

play04:35

and architecture meets agile kind of

play04:38

simultaneously in my head

play04:40

and that really reflects the stuff i've

play04:41

been doing in this in the interview of

play04:43

the past decade or so i've been flying

play04:44

around the world helping teams

play04:46

and many of the teams

play04:48

still have these big upfront design

play04:50

processes and they want to become more

play04:52

agile so i'm helping those teams kind of

play04:54

strip down those processes and become

play04:55

more lightweight and also i'm now seeing

play04:57

more and more teams who are saying we've

play04:59

been through our agile transformation

play05:01

for the past five years and we're in a

play05:03

total mess we have no docs our code's a

play05:05

complete mess can you come and help us

play05:07

can you come and reintroduce some degree

play05:09

of structure so really for me this is

play05:12

the same topic approach from multiple

play05:14

different angles

play05:16

so my workshops i get to fly around the

play05:18

world do

play05:19

it's basically it's a simple architect

play05:20

jakarta it's like here are some

play05:21

requirements break up to groups two

play05:23

three people go do some design draw some

play05:25

pictures and this is literally how the

play05:28

task is phrased

play05:30

so it's very open it's very vague and

play05:32

this is kind of what happens in the real

play05:33

world of course

play05:35

90 minutes during iteration one during

play05:37

the first iteration of this exercise we

play05:39

get diagrams like that

play05:42

and if anybody has seen my talks before

play05:44

you know exactly what these things mean

play05:47

nothing

play05:48

so we do a bunch of stuff we do some

play05:49

reviews and we drop into iteration 2 and

play05:52

during iteration 2 guess what we get

play05:54

some nicer pictures

play05:56

so this is an initial picture for a

play05:58

solution and then we kind of dive into

play06:00

some detail and we get another nice

play06:02

picture

play06:04

yay

play06:07

and it's at this point people say well

play06:09

interesting you're basically teaching

play06:11

people how to create nice pictures

play06:13

well yes

play06:14

but there's actually much more that goes

play06:16

into this and that's what this talk is

play06:19

about so i want to talk about a number

play06:21

of different topics related to this

play06:23

central theme and the first of these is

play06:24

just upfront design

play06:27

i get many of my customers and clients

play06:30

and the teams

play06:32

literally asking me this question out

play06:33

loud

play06:35

so you're talking about upfront design

play06:36

are we allowed to do web front design

play06:38

because we do extreme programming i'm

play06:40

like what

play06:41

they're like yeah we do extreme

play06:42

programming

play06:44

a customer comes to us they give us a

play06:46

bunch of things that need to be done and

play06:47

we go write code

play06:50

to which my response is so how is that

play06:51

working out for you and they're like bad

play06:53

that's why you're here oh yeah so don't

play06:55

do that then i get a lot of people say

play06:57

we're agile so we don't do what front

play06:58

design i'm like what

play07:00

like nothing says you can't do what

play07:02

front design i get lots of people still

play07:03

telling me these are all genuine excuses

play07:06

reasons that people have given me over

play07:08

the past couple of decades for not doing

play07:10

design it's not expecting agile where

play07:12

does it say this and it turns out if you

play07:15

go dig through some of the older agile

play07:16

literature you'll see things like this

play07:18

you know there is no big design upfront

play07:21

agreed most of the design activity takes

play07:24

place on the fly and incrementally

play07:27

again reinforcing that kind of

play07:28

evolutionary architecture approach you

play07:31

go look at some other texts uh some of

play07:33

the more aggressive xp are putting more

play07:35

energy into avoiding upfront

play07:37

architectural design

play07:40

and of course the agile manifesto

play07:41

doesn't say this it doesn't say don't do

play07:43

that that upfront work

play07:46

and the people behind our manifesto are

play07:48

also not saying by the way you should

play07:50

still go and do design that whole topic

play07:52

is not being talked about and it's

play07:53

really easy to read between the lines

play07:56

and come to the wrong conclusion

play07:58

just because people are no longer

play08:00

talking about upfront design it doesn't

play08:02

mean it's not important

play08:04

and of course the people who put the

play08:05

mantra the agile manifesto together have

play08:07

a ton of experience

play08:10

and our teams likely don't our teams are

play08:12

likely younger

play08:13

so all of these things kind of factor in

play08:16

here now

play08:17

i kind of wondered what happens if you

play08:19

take these agile people

play08:21

into a non-software world

play08:24

and this happened so kent beck a couple

play08:27

years ago now posted i'm writing a new

play08:28

book

play08:29

and he posted a photo upside down for

play08:32

some reason maybe this is twitter

play08:34

and it's it's a photo of an of the

play08:36

outline for his book

play08:39

and yeah i know where this is going yeah

play08:40

exactly so somebody said it's

play08:42

interesting that you have an outline uh

play08:44

my daughter's also writing a book and i

play08:45

and she kind of works with just writing

play08:47

and

play08:48

refactoring which is basically what tdd

play08:50

is all about right

play08:52

and his response was yeah i've done like

play08:54

20 000 words

play08:56

i need to basically step back and see

play08:58

the hole so it's very easy to get stuck

play09:00

down that rabbit hole to kind of do tdd

play09:03

tdd tdd and not step back and see the

play09:05

bigger picture

play09:06

and even someone like kent beck

play09:08

has to step back at some point and i'm

play09:11

exactly the same if i jump into a

play09:13

solution too much depth i'm lost

play09:16

and i need to step back and some people

play09:17

need to step back earlier than others

play09:19

that's essentially what all this is

play09:20

about the whole agility thing

play09:24

it requires a

play09:25

toolbox of various techniques and

play09:27

practices

play09:29

and i think we've stopped teaching a lot

play09:30

of this stuff

play09:32

and that kind of makes me sad

play09:34

go ask your colleagues back at work how

play09:36

do you design software so if you get

play09:38

some requirements what do you do next

play09:40

how do you design software they're like

play09:41

what

play09:42

i know what's your process how do you

play09:44

take requirements and go through and get

play09:46

some software

play09:48

like uh we use a whiteboard

play09:50

right

play09:51

what for

play09:52

the drawing pictures well obviously

play09:54

drawing pictures for what are you

play09:55

drawing on these on these on these

play09:56

pictures i would draw boxes and lines

play09:58

those are our architecture diagrams

play10:00

quite unquote

play10:01

great so what did the boxes represent

play10:03

well it depends isn't it well no go what

play10:06

you know one of the boxes well the boxes

play10:07

represent components what's a component

play10:09

i have no idea because everybody thinks

play10:10

of components as being different things

play10:12

and ultimately when you kind of fraud

play10:14

people enough like why are you drawing

play10:16

three components not for the like oh

play10:17

we're just using experience

play10:19

and we've lost the ability to explain

play10:21

how we do design

play10:23

the heuristics we use to take a business

play10:26

idea and transform it do some analysis

play10:29

in our mind and transform it into

play10:30

something we write on a piece of paper

play10:33

and that's

play10:34

a shame because now we if we can't

play10:36

articulate how we do design we can't

play10:39

teach other people to do design

play10:42

and it turns out

play10:43

this is not new like there's a whole

play10:45

bunch of stuff out there that exists and

play10:47

has existed for decades

play10:49

like decomposition how do you take a

play10:50

thing and chop it up into smaller parts

play10:53

there's a whole ton of different

play10:55

decomposition techniques and like people

play10:57

haven't heard of these things

play10:58

every time you go to a serverless or

play11:00

microservices talk you'll see people

play11:02

quoting citing this paper from parnasse

play11:04

about modularity

play11:06

like none of this stuff is basically

play11:08

like take a big thing and chop it up

play11:09

into smaller things whether it's modules

play11:11

in a monolith or services services in a

play11:13

distributed architecture the the

play11:15

overriding principles are exactly the

play11:17

same

play11:18

go back to the 90s you get things like

play11:19

crc classes responsibilities

play11:21

collaborators this is a fabulous

play11:22

workshop technique for doing

play11:24

collaborative design

play11:25

now we don't all sit around the room and

play11:27

do like

play11:28

low level class level code level design

play11:31

as a committee but maybe we can take the

play11:33

same approach and apply it to

play11:36

services

play11:37

or components

play11:38

so you can take the same approach and

play11:40

apply it to different types different

play11:42

levels of abstractions

play11:44

and this is really what i

play11:46

kind of focus on when we talk about

play11:48

upfront design and for me upfront design

play11:50

is not about creating a perfect end

play11:52

state that's what we used to do 20 years

play11:54

ago it's like here's a set of blueprints

play11:55

now let's go and we must never deviate

play11:58

for me this is about doing something

play12:00

different

play12:01

it's a shame that joshua's not here he's

play12:04

he's upstairs but here's his picture so

play12:06

there's a great way to explain this

play12:07

whole concept it's evolutionary design

play12:09

it's beginning with the primitive whole

play12:12

and we've seen this a million times

play12:13

before you go to any agile conference

play12:15

like start with something simple add

play12:17

features iterate

play12:18

you know that whole thing's been done to

play12:19

death we hopefully get that by now

play12:22

the reason i'm bringing this up is

play12:23

because the thing we never talk about

play12:25

is version one

play12:28

but how do you make version one

play12:31

a good enough thing that you can add

play12:34

features to it

play12:37

how do you put some sufficient

play12:38

foundations in place

play12:40

so you're not going to have to do lots

play12:42

of unnecessary rework expensive rework

play12:45

if i go back to slide you can see the

play12:47

journey between the iterations

play12:49

so at the end of your life cycle when

play12:50

you're you're delivering no more

play12:52

software you can now look back at all of

play12:53

the releases and you can see the deltas

play12:56

between the releases

play12:57

if you're here on day one of your new

play12:59

product

play13:01

you don't know what the future looks

play13:02

like

play13:03

again it's the planned versus unplanned

play13:05

evolution

play13:07

it turns out the manifesto does talk

play13:09

about design if you go to page two the

play13:12

principles page principle number nine

play13:13

says this continuous attention to

play13:15

technical excellence and good design

play13:18

enhances agility

play13:21

this is the manifesto explicitly calling

play13:23

out that good design is super important

play13:26

a simple way to think about this is a

play13:27

good architecture enables agility

play13:31

now good is subjective i grant you that

play13:33

but for me a good architecture is really

play13:35

something that's well structured

play13:38

and has a high degree of modularity

play13:41

this is why i talk so much about

play13:42

creating good modular monoliths

play13:46

because this helps you move fast so what

play13:49

i think we're trying to do here is we're

play13:50

trying to do enough up front design to

play13:53

put a starting point in place

play13:57

and set a general direction

play14:00

but that direction might and probably

play14:03

will change in the future

play14:06

so this is that blended approach it's

play14:08

some upfront designed to put starting

play14:09

point in place set the direction and

play14:11

then use your evolutionary design to

play14:13

change direction when needed and i think

play14:15

that starting point adds a huge amount

play14:17

of value

play14:19

this is essentially what i refer to as

play14:20

technical leadership

play14:22

it's like we have a bunch of programmers

play14:24

developers etc we all need to go in the

play14:26

same direction how do you do that

play14:28

technical leadership

play14:30

and every team needs this

play14:32

if you're a one-person team you need a

play14:34

small degree of technical leadership if

play14:36

you're a 100 or 1000 person team with

play14:38

offices around the world

play14:40

you need more technical leadership

play14:44

this also exists in multiple dimensions

play14:46

which gets very complicated

play14:49

you'll see big organizations have

play14:51

hierarchies of architects

play14:52

corporate architects centralized

play14:54

architects enterprise architects

play14:56

centralized article architecture groups

play14:58

people think those are bad and

play14:59

anti-patents they're not they're needed

play15:01

in big organizations because your

play15:03

product teams might not be looking as

play15:05

forward into the future as some of the

play15:07

higher levels of architects in your

play15:09

hierarchy

play15:10

if you have a situation where you've got

play15:13

multiple services and complete code

play15:15

ownership across your entire

play15:16

organization where any product team can

play15:18

change any line of code in any

play15:20

production service

play15:22

you have to ask yourself

play15:23

so who's applying technical leadership

play15:25

on those product teams but also who's

play15:27

making sure that there still exists

play15:30

some degree of technical leadership on

play15:31

the shared services that everybody is

play15:34

changing

play15:35

so that's why this is a little bit more

play15:36

complicated than it first seems

play15:40

diagrams

play15:42

i had to get back to diagrams of entry

play15:43

who uses uml here

play15:46

wow

play15:48

i thought it'd be more than that because

play15:49

i'm in germany

play15:52

no that's that's a compliment so when i

play15:54

ask this question it's normally like 10

play15:57

maybe there are two countries uh that

play15:59

i've visited that predominantly have

play16:01

more than 10 and it's germany and the

play16:03

netherlands and i don't know what it is

play16:05

it just is and i think that's a good

play16:06

thing so why don't people use your ml

play16:08

well i'm the only person on the team who

play16:10

knows it that's one the answers people

play16:12

give to me quite frequently

play16:15

more frequently i don't know it

play16:17

i mean that's a good reason to not use

play16:18

uml if you don't know don't use it i did

play16:21

some

play16:22

workshops for a very very well-known

play16:24

company

play16:25

and i asked them do you use uml here and

play16:29

they replied to my face

play16:31

no because you'll be seen as old

play16:34

and i really i'm the oldest person in

play16:36

this room

play16:37

and then they said oh and old-fashioned

play16:39

i'm like what

play16:40

like

play16:41

do those boxes look old-fashioned or

play16:43

something i get a lot of people saying

play16:45

well you uml is too detailed

play16:47

uml is just a language you don't have to

play16:49

use the whole language but this there is

play16:51

something about uml that kind of sucks

play16:53

you in and then you get drawn into those

play16:55

discussions of black diamonds versus

play16:56

white diamonds you're like i don't know

play16:58

the difference go look it up aggravation

play17:00

versus composition don't know the

play17:01

difference go look it up and just go

play17:03

down the rabbit hole

play17:04

um why don't we use uml we don't want to

play17:06

tell developers what to do like what

play17:10

like somehow people have attached uml to

play17:12

the process of telling developers what

play17:14

to do probably from those wall tool

play17:16

processes 20 years ago

play17:18

yes

play17:19

and again it's not expected in agile

play17:22

there's this uml is not expected in

play17:24

agile thing where did this come from

play17:25

it's the same thing you go look through

play17:27

all of the old agile literature

play17:29

would it be better if we used a case

play17:30

tool to lay out the design no just use

play17:32

crc or a bar napkin

play17:35

thanks ron

play17:36

a bar napkin

play17:39

this guy has a youtube channel and he

play17:41

said uml is a very elaborate waste of

play17:43

time

play17:44

thanks

play17:45

so what's his recommendation just use a

play17:48

whiteboard

play17:50

i mean that kind of works

play17:51

but it doesn't because i've see this

play17:54

whenever i

play17:55

do my workshop people just use a

play17:56

whiteboard and the diagrams are

play17:58

horrendous that no one can understand

play17:59

them okay so what's wrong with these

play18:01

diagrams

play18:02

something i do during my workshops is

play18:03

called the perfection game it's like

play18:05

write a list of things you like things

play18:07

you don't like give a score between one

play18:09

and ten one is horrendous 10 is

play18:10

absolutely perfect

play18:12

here's a real diagram from a workshop it

play18:14

was scored a 7 out of 10.

play18:16

i'm like well it doesn't

play18:18

tell me much about the solution here

play18:20

here's another one from the same

play18:21

workshop

play18:22

also scored a 7 out of 10. i love this

play18:24

little user up here

play18:27

kind of a

play18:28

little shock user i love looking for

play18:30

little

play18:31

funny things in these diagrams

play18:33

uh here's another one also scored a

play18:34

seven out of ten it's like here's a

play18:36

layered architecture with a bunch of

play18:37

stuff

play18:39

angularfront.net back end doesn't really

play18:40

tell you much about the

play18:43

business domain i guess

play18:45

uh here's a funny another one

play18:47

seven out of ten

play18:49

x com

play18:51

no idea

play18:53

uh here's another one seven out of ten i

play18:54

love this little

play18:56

thing there it's like a little database

play18:58

maybe hanging off config

play19:00

no one knows what that's for but

play19:01

whatever

play19:02

uh here's another one which also scored

play19:04

seven out of ten do you get a feeling

play19:07

here

play19:08

uh and this one's called six and

play19:09

ironically this might have the most

play19:10

detail but i think the detail put people

play19:12

then like now it's too complicated

play19:14

most people score these diagrams seven

play19:16

out of ten

play19:17

sometimes it's out of politeness

play19:20

depending on the country um but other

play19:22

times it's just people don't have the

play19:24

prerequisite experience to

play19:26

critique these diagrams they've never

play19:28

seen a good architecture diagram and

play19:30

they don't know how to compare theirs to

play19:32

a good diagram so something i do instead

play19:34

i say right

play19:36

you're in groups swap your diagrams with

play19:38

another group

play19:39

and ask them to review your diagrams and

play19:41

answer these two questions

play19:43

so do you think the solutions

play19:46

satisfy the drivers the requirements

play19:48

quality attributes and if you were the

play19:49

bank would you buy the solution

play19:53

and i give people like a few minutes to

play19:56

ponder this question and they're like oh

play19:58

we can't answer those

play20:00

like why can't you answer those two

play20:01

questions they're pretty simple like

play20:03

well we can't answer the questions

play20:04

because we can't see and understand the

play20:06

solutions

play20:07

and that's the problem if you can't

play20:09

understand what the diagrams are showing

play20:10

you you can't interpret them so you

play20:12

can't understand the solution so you

play20:14

can't evaluate the solution

play20:16

and many people are basing their entire

play20:18

company's fortunes off designed to look

play20:20

like those diagrams and that's a

play20:22

horrendous state of the industry to be

play20:23

in

play20:26

oh yeah people tell me this the values

play20:28

in the conversation so we don't need

play20:30

your stinking pictures

play20:32

thanks

play20:33

where did this come from it's the same

play20:35

thing it's like do we need uml pictures

play20:36

no because you might just have better

play20:40

experiences

play20:41

with conversation in your co located

play20:43

whole team

play20:48

i've had people say that actually all

play20:50

those diagrams that you've just slated

play20:51

they're good they're excellent as long

play20:53

as there's a discussion a conversation

play20:55

about the meaning and intent of those

play20:56

pictures

play20:58

well that's fine but this whole the

play20:59

value in the conversation thing only

play21:00

works if you're all having the same

play21:01

conversation and if there's lots of

play21:03

ambiguity in the diagrams there's no way

play21:05

you can possibly do that

play21:07

this leads me on two superficial views

play21:09

of upfront design so when i look over

play21:11

these pictures

play21:13

i often get some quite startling

play21:15

questions in in response

play21:17

for example i've seen a diagram that's a

play21:19

bunch of boxes and arrows and somebody

play21:21

said to me is that a microservices

play21:22

architecture or monolithic architecture

play21:24

i'm like

play21:25

good question because it's not obvious

play21:26

from the diagram and i've actually had

play21:28

groups where half the group thinks is a

play21:29

monolith and harp the group thinks it's

play21:31

a microservices architecture but they

play21:32

never said they never agreed on

play21:36

the basics of their architectural style

play21:38

which is

play21:39

absolutely astounding

play21:42

why is the orm directly connected to the

play21:45

angular front end this is very specific

play21:47

let me take you on back to one of those

play21:48

pictures i showed you

play21:49

we have an angular front end here we

play21:51

have a net back end here there's an

play21:53

entity framework object relational

play21:55

mapping framework with an arrow going

play21:56

from net to angular

play21:58

like what like how does that work no

play22:01

idea

play22:02

is the web ui getting data from amazon

play22:04

s3 i see a ton of people drawing like a

play22:06

web box a web ui box and an amazon s3

play22:09

box and a line between them all right

play22:10

perfect so you're pulling a date out of

play22:12

s3 sticking it on the web love it how

play22:14

are you doing that

play22:15

like oh well there's a javascript api

play22:18

and we can use the javascript api

play22:21

in our angular app to talk to s3 okay

play22:24

perfect where are you putting your secur

play22:25

your security credentials

play22:27

on the web page yeah that's not a good

play22:29

idea is it and people are just not

play22:31

thinking through the implications of

play22:33

their designs

play22:34

and it's because people are rushing

play22:36

they're not putting some time and effort

play22:39

into considering

play22:41

the implications of what they're drawing

play22:46

we need to slow down a little bit

play22:49

and make sure we invest some time and

play22:51

effort into probably understanding

play22:55

the solution space

play22:58

rather than jumping on solutions george

play23:00

fairbanks has a great book on

play23:01

architectures called just enough

play23:02

software architecture and he says this a

play23:04

good architecture rarely happens through

play23:06

architecture in different design this is

play23:08

just jumping on a solution because

play23:12

that's what we've always done

play23:13

all hype and trend and fashion and i'm

play23:16

going to squarely throw microservices

play23:18

right into that bucket i've seen a ton

play23:19

of teams jump on mic services

play23:21

and guess what now they're regretting it

play23:23

and you'll see this when you go to

play23:24

conferences now people are saying

play23:25

actually this is a bad idea we're going

play23:27

back to monolith

play23:29

you need to save some time to discover

play23:30

that unknowns

play23:34

somebody mentioned the s curve earlier

play23:36

and i i i'm sorry i completely forgot

play23:38

who what uh it was i think it was randy

play23:39

actually

play23:40

i'd like to use the s-curve of learning

play23:42

to kind of illustrate the same point

play23:44

when many people are doing upfront

play23:47

design

play23:48

they're getting stuck here

play23:50

so you're learning a new skill it's very

play23:52

slow to get started you have to learn

play23:54

the terminology and the jargon and the

play23:55

basics and that can take some time

play23:58

but after a while something clicks you

play23:59

get that accelerated learning

play24:01

and then after maybe 10 000 hours you

play24:03

start to plateau

play24:05

i like to liken this to doing upfront

play24:08

design

play24:09

most people attempting upfront design

play24:11

are getting stuck here

play24:12

they're not learning much and they they

play24:14

come up with those very superficial

play24:16

approaches to front design

play24:18

i want to get people here i want to get

play24:19

people learning fast

play24:22

but stopping before they plateau you

play24:24

know the platter is big design front

play24:30

tech decisions something i've noticed

play24:32

over the years is that people don't put

play24:34

tech decisions on architecture diagrams

play24:36

and it drives me bonkers

play24:39

like why have you not put tech decisions

play24:41

on your diagrams

play24:45

and what's interesting here is there's a

play24:46

conflict the people producing diagrams

play24:48

don't want to put tech choices on them

play24:50

they don't want to name technologies

play24:52

but when you do the swapping exercise

play24:54

and you ask people to review the

play24:55

diagrams the comment often comes back is

play24:58

if these diagrams had tech choices on

play25:00

them i would maybe able to be able to

play25:02

understand them easier

play25:04

so why don't people put tech choices on

play25:06

diagrams

play25:07

again i've had people say this to my

play25:09

face we don't solutionize i'm like what

play25:11

that's not even a word

play25:14

our architects are not allowed to do

play25:16

solutioneering

play25:18

like what the whole point of being an

play25:20

architect is to come up with a solution

play25:22

so what on earth does that mean we don't

play25:24

want to impose a solution upon your

play25:26

development team you do

play25:28

right constraints are useful

play25:31

otherwise if you if you want the

play25:33

trade-off and you want full autonomy

play25:34

exactly as pat said earlier then give

play25:36

all the teams full autonomy if you don't

play25:38

want full autonomy then maybe this is

play25:40

useful we want to leave our developers

play25:42

to use implementation details same thing

play25:43

i'm not saying we need to choose all the

play25:44

implementation details for them

play25:47

and obviously it's a java solution

play25:48

because we're a java team well i don't

play25:50

know that and people joining our team

play25:52

are not going to know that either

play25:54

so let's be a bit more specific please

play25:57

so how much design should we do

play26:00

imagine you're back in your office

play26:01

you're drawing some pictures you're

play26:02

doing an upfront design exercise i want

play26:04

you to be able to answer two basic

play26:07

questions question number one

play26:09

do the diagrams reflect what we think

play26:10

we're going to build

play26:12

question number two is it going to work

play26:15

again we're not trying to decide

play26:16

everything like we would do 20 years ago

play26:19

with big design up front

play26:22

so what are we trying to decide

play26:25

i love the grady boots quote here about

play26:26

architecture architecture represents the

play26:28

significant decisions where significance

play26:30

is measured by cost of change so there

play26:33

are some decisions that once you make

play26:34

them they're really hard to

play26:36

change like adopting a distributed

play26:39

microservices architectural style like

play26:42

once you have a bunch of services in

play26:43

production you're kind of stuck with it

play26:45

similarly you lock yourself into a

play26:47

monolith with a single language maybe a

play26:49

bit you're burning like a hexagonal

play26:51

architecture with spring boots you're

play26:52

stuck with those things now

play26:56

for me the significant decisions we want

play26:57

to think about

play26:59

are technology and modularity related

play27:02

decisions

play27:03

it's not do we use tabs or white spaces

play27:06

and curly braces on the same line i

play27:08

don't care about that stuff right

play27:09

literally don't care about it

play27:10

it's those bigger ticket decisions i

play27:13

want us to think about as teams and

play27:15

agree upon upfront

play27:17

including things like error handling how

play27:19

we're going to do error handling

play27:20

consistently across our code base or

play27:22

logging or authentication or

play27:23

authorization

play27:25

martin fowler said the same thing years

play27:28

and years ago he said i think there's a

play27:29

broad role for starting point

play27:31

architecture

play27:32

like how to do layering interacting with

play27:34

the database web service approaches that

play27:36

sort of thing so again these are the big

play27:38

ticket decisions

play27:40

so this whole just user whiteboard the

play27:42

values in the conversation thing does

play27:44

not cut it

play27:46

we need better

play27:48

we need better pictures because then

play27:50

that forces to make better decisions

play27:52

this is not a tooling issue

play27:54

this is something much more fundamental

play27:56

if you go to google and you do search

play27:57

with architecture diagram you get

play27:58

garbage like this

play28:00

and these have all the same issues that

play28:01

the hand-drawn pictures do

play28:03

and with these diagrams you can't answer

play28:05

that first question

play28:07

the diagrams are just far too ambiguous

play28:10

and we need a ubiquitous language

play28:12

to communicate effectively and this

play28:14

sounds like a really silly thing to

play28:15

still be saying in 2022 like we have a

play28:18

bunch of developers and they still can't

play28:20

talk in the same language about what

play28:22

this system looks like from an

play28:23

architectural perspective

play28:26

and we could all go use uml

play28:28

who wants to use uml here

play28:30

no one right

play28:32

so that idea is dead

play28:36

so i think we need to step back and i

play28:37

think what's really missing here is a

play28:39

common set of things

play28:41

a common set of abstractions and i think

play28:43

those abstractions are potentially much

play28:44

more useful

play28:46

than the standard boxes and lines

play28:48

notation and of course uml gives you

play28:50

both but we always focus on on the

play28:52

latter so this is where my c4 model

play28:54

comes into play you go to c4model.com

play28:56

there's a whole bunch of information on

play28:57

there but essentially it's a

play28:59

hierarchical set of architecture

play29:00

diagrams

play29:02

at named levels of abstraction

play29:05

software systems containers not docker

play29:07

sorry components and code ask me later

play29:10

if you want to and the concept here is

play29:12

diagrams as maps we want different

play29:14

levels of diagrams to be able to tell

play29:16

different stories of different audiences

play29:18

sometimes we want the 30 000 foot view

play29:20

and other times we want to zoom in so we

play29:22

want to zoom in for the more technical

play29:23

audiences we want to zoom out for the

play29:24

less technical audiences

play29:26

and the c4 model is notation independent

play29:28

so you can use boxes and arrows of

play29:31

pretty colors

play29:32

knock yourself out or you could use uml

play29:35

or archimate or other formal notations

play29:37

that get created in the future

play29:39

and the reason i talk about diagrams so

play29:41

much is because they're a fantastic

play29:43

visual checklist

play29:45

for design

play29:46

decisions

play29:49

in order to draw a c4 model system

play29:51

context diagram

play29:53

so a system context diagram shows you

play29:56

the system you are focused on in the

play29:58

middle the people using it and how it

play30:00

fits into the world around it in order

play30:01

to draw that diagram you need to answer

play30:03

those questions

play30:04

so what is the scope of the system we're

play30:06

building what functionality sits inside

play30:08

the system boundaries what sits outside

play30:11

in the existing environment

play30:13

who's using my system what types of

play30:15

things they expecting to do

play30:18

and what system integration points do we

play30:19

need to support once you answer those

play30:21

questions even at a high level you can

play30:22

draft up something like a nice looking

play30:24

system context diagram

play30:26

so here we can see the red box the

play30:28

financial risk system box here that's

play30:30

the system people are designing they've

play30:32

identified rightly a couple of different

play30:34

roles here so roles actors personas

play30:37

there are various ways to represent your

play30:38

users and they've also identified a

play30:41

bunch of system integration points which

play30:42

is fantastic

play30:44

we do the pinch to zoom in movement like

play30:46

you do in google maps to that red box

play30:48

and drop down to level two level two is

play30:49

a container diagram

play30:51

a container diagram basically shows you

play30:53

applications and data sources that sit

play30:55

inside your system boundary that's it

play30:57

in order to draw that diagram

play30:59

different set of questions

play31:01

so what are the major technology

play31:02

building blocks that we are going to

play31:04

create as a team is it a monolith

play31:05

talking to a database or is it like a

play31:07

bunch of services who knows

play31:09

what are the responsibilities of each of

play31:10

these boxes what do they do

play31:12

and how do they communicate answer those

play31:14

questions you can draft up a container

play31:16

diagram so here we can see there are a

play31:18

couple of react web apps

play31:21

javaspring web server thing

play31:24

a couple of command line apps and some

play31:25

data storage and that's exactly what a

play31:27

container diagram shows you then these

play31:29

diagrams should now spark meaningful

play31:32

questions

play31:33

so the next time you go and look at an

play31:35

architecture diagram if you're finding

play31:36

yourself asking these questions like

play31:39

what do the colors mean what are the

play31:40

boxes represent the diagram is not good

play31:43

enough

play31:44

the questions i want developers to be

play31:46

asking are

play31:47

oh i can see you've got two java apps

play31:49

and there's an arrow between them

play31:52

but the arrows are unlabeled

play31:54

why are these two java apps talking to

play31:56

each other what technology are they

play31:58

using what's the interface what's the

play31:59

api

play32:00

these are much more targeted questions

play32:02

maybe scan your eyes over a diagram and

play32:04

there's a database and it says mongodb

play32:06

and you're like but we don't use

play32:08

here we use oracle

play32:10

again challenge those decisions have a

play32:12

conversation

play32:14

so these diagrams the richer diagrams

play32:16

lead to better design discussions

play32:18

because now people talk in the same

play32:20

language and they can challenge the

play32:21

designs because they can see the designs

play32:24

this makes it easier to have better

play32:26

communication which makes it easier to

play32:27

scale teams

play32:29

and the diagram should also provide a

play32:31

decent level of feedback

play32:33

one of the questions i always get my

play32:34

workshop is

play32:35

we're trying to build or design a

play32:37

microservices architecture

play32:39

with 20 services

play32:41

and our diagram is really complicated

play32:42

because now we're showing 20 services

play32:44

and arrows between them

play32:46

how do we make our diagram better

play32:49

simplify your solution

play32:51

this is not a diagramming thing the

play32:53

diagrams should show you complexity if

play32:55

you have a complicated solution you're

play32:58

going to get a complicated diagram let's

play32:59

just admit that

play33:01

and if we're not if we're not happy with

play33:02

that let's change the solution

play33:04

so the c410 lygrams definitely help us

play33:07

answer that first question because

play33:08

there's so much more rich and sad but

play33:10

they still don't answer question number

play33:12

two

play33:14

is it going to work

play33:16

and this is where i'm going to bring

play33:18

scott ambler into play he has a bunch of

play33:20

stuff on agile architecture and he says

play33:22

this in one of his essays base your

play33:23

architectural requirements

play33:25

it's kind of what pat said this morning

play33:27

there's a bunch of stuff that's really

play33:28

important security

play33:30

resilience like

play33:32

what are you interested in what are you

play33:33

trying to trade off here and not trade

play33:34

off

play33:35

so focus on the stuff that's important

play33:37

to you travel light

play33:39

just enough be sufficient be lean

play33:41

etcetera and prove your architect with

play33:42

concrete experiments

play33:46

writing code

play33:48

prototypes proof of concepts traces

play33:51

stripes slices excuse architectures

play33:53

architecture runways there's like a

play33:55

million terms the same thing

play33:56

it's like i have a hypothesis let's

play33:59

write some code and test out that

play34:00

hypothesis

play34:01

how do you choose which hypotheses

play34:04

to

play34:05

spike

play34:07

risk

play34:08

one of the questions i get is how do we

play34:09

deal with risk in our agile projects my

play34:11

answer is

play34:13

go and read the rational unified process

play34:15

book

play34:17

not all of it because it's really big

play34:20

but rupp is a is a risk-driven approach

play34:22

to delivering software and it front

play34:24

loads the risky stuff to the early

play34:25

stages and that's all we want to do here

play34:27

if there's something super risky let's

play34:29

get out of the way

play34:31

risks are also very subjective aren't

play34:33

they like estimates like how long will

play34:34

it take to build a thing i don't know

play34:35

we're gonna get different answers so i

play34:37

have a technique you can find called

play34:39

risk storming

play34:40

so this is a nice visual collaborative

play34:42

technique for identifying risks

play34:44

basically it's a bunch of people still

play34:45

in front of some nice diagrams

play34:47

identifying risks

play34:48

you can do things like threat modeling

play34:50

when you have good architecture diagrams

play34:52

all of these things can of course feed

play34:54

into things like your fitness functions

play34:57

people say how do we how do we represent

play34:59

decisions on diagrams you don't your

play35:02

diagrams represent the end state of all

play35:04

of decisions you've made

play35:06

you should recall those decisions as

play35:08

things like architecture decision

play35:09

records

play35:10

so all of the stuff we're trying to

play35:12

weave in our version of upfront design

play35:14

so how much upfront design should we do

play35:17

well sometimes you know what you're

play35:18

doing and sometimes you don't

play35:20

i think kind of randy alluded to this as

play35:22

well

play35:23

if you're like doing an enterprise thing

play35:25

and maybe you're building a piece of

play35:26

software for a compliance reason or

play35:28

regulatory reason you've got some hard

play35:30

known well-known requirements

play35:33

if you're doing a product or a startup

play35:34

it's a completely different ballgame

play35:36

i think oovy said the same

play35:38

so how much design should we do

play35:41

i had someone say this to me i'm good

play35:42

with maybe a day for a one year effort

play35:44

like wow one day of design for one

play35:47

year of development effort that might

play35:48

work for your team is not going to work

play35:50

for my team

play35:51

so i don't like answering the question

play35:53

how much upfront design should we do i

play35:55

think it's a poor question to ask so the

play35:56

question i want to ask is well let's

play35:58

assume we're going to do some design

play36:00

how do we know when to stop

play36:02

and for me upfront design is iterative

play36:05

and you should stop when you understand

play36:07

the things that drive your architecture

play36:10

your key requirements your important

play36:11

quality attributes security performance

play36:13

scaling et cetera and the constraints

play36:15

that exist in your environment once you

play36:17

understand those things you're good

play36:19

if you can understand the context and

play36:21

the scope of what you're designing what

play36:23

you're building you're in a good spot so

play36:24

if you can confidently draw a system

play36:27

context diagram

play36:29

you're good

play36:30

if you understand the significant design

play36:32

decisions you're having to make in terms

play36:33

of modularity and technology

play36:35

you're good so if you can draw a

play36:36

container diagram to illustrate your

play36:38

design you're done

play36:40

if you have a way to share these ideas

play36:42

with other people both inside your team

play36:44

and outside your team

play36:46

you're done and of course the c4

play36:47

diagrams help teams do that

play36:50

if you're confident that your design is

play36:52

going to work

play36:53

so it satisfies those architectural

play36:55

drivers you've done

play36:57

risk storming you've done threat

play36:58

modeling you've maybe written some

play37:00

fitness functions you've done some

play37:01

testing then you're in a good spot

play37:04

and basically if you're comfortable with

play37:06

the risks of proceeding

play37:07

go

play37:09

how do you do that there's a whole bunch

play37:11

of techniques out there

play37:13

old-fashioned ooad crc uml ddd there's

play37:17

all the ddds these days of course event

play37:19

storming impact mapping et cetera et

play37:21

cetera you've got my risk forming

play37:23

architecture to dry runs architecture

play37:24

evaluations both formal and informal

play37:27

there's a whole bunch of techniques out

play37:28

there that we need in our toolbox to get

play37:30

to that point but for me

play37:32

that's my definition of how much upfront

play37:34

design should we do and again just to

play37:36

reiterate this i'm trying to put a good

play37:38

starting point in place

play37:40

with an admittance that we're not going

play37:42

to learn everything upfront and we are

play37:43

going to have to change direction and

play37:45

that's where evolutionary design comes

play37:46

into play so my closing point here is

play37:49

adopt an agile mindset as uva said

play37:51

before there's no one-size-fits-all

play37:54

and you should have all these tools in

play37:56

your toolbox and get them out when

play37:57

appropriate

play37:58

so thank you very much

play38:01

[Applause]

play38:09

i bet we have a ton of questions right

play38:12

there's one um one we've got one

play38:13

question it's not the docker question

play38:16

um if you can't explain

play38:18

how you design how can you know you're

play38:20

doing it right

play38:23

that's the question isn't it if you

play38:24

can't articulate and explain how you do

play38:26

design

play38:28

it's kind of hard to

play38:29

quantify elaborate it explain to other

play38:31

people and you don't know if you're

play38:32

doing a good job

play38:34

so how do you know if you're doing a

play38:35

good job

play38:36

i don't know

play38:38

are you getting fired on a regular basis

play38:40

is your is your company making lots of

play38:41

money are your fitness functions passing

play38:44

on a regular basis there's a whole bunch

play38:45

of other stuff that you need to even

play38:46

describe here but of course there's no

play38:48

one design fits all situations either so

play38:51

you can have a single problem solved in

play38:52

multiple different ways and they can all

play38:54

be good from different perspectives

play38:58

that's my way of getting out that

play38:59

question

play39:01

brilliant um do you have some examples

play39:03

of your workshops available online

play39:07

do i have some examples of my workshops

play39:09

available online so

play39:11

if you go to my website which is linked

play39:13

somewhere there's architecture.je

play39:15

that look so i showed you a slide with

play39:17

the requirements for the financial risk

play39:19

system so that pdf is available free on

play39:21

my website and also the entire slide set

play39:23

for my workshop is also available free

play39:25

on my website so i i'm not sure if that

play39:27

answers the question but yeah there's

play39:28

all the workshop materials available

play39:31

sure it does another one and what book

play39:33

could you recommend that help people

play39:35

improve their design skills

play39:38

oh that's an interesting question

play39:40

because

play39:41

i think this is an a little bit of an

play39:44

untapped area

play39:46

um

play39:48

this might be an unpopular opinion but

play39:51

someone on twitter last week said

play39:53

they're kind of getting tired of

play39:56

all of the ddd and hexagonal

play39:58

architecture stuff and clean

play39:59

architecture stuff because teams are

play40:00

kind of getting too sucked into all of

play40:02

that stuff

play40:03

and i kind of agree

play40:05

i i'm i'm i'm super happy that people

play40:07

are focused on like how do we make and

play40:09

create good code structures

play40:11

but as i've said you know it this is not

play40:13

just about good coding there's so much

play40:15

more stuff

play40:16

that really kind of

play40:18

is important here when we're trying to

play40:19

deliver business value and move fast etc

play40:21

etc so

play40:25

if people were kind of

play40:27

wondering would he say go and read this

play40:29

tdd book and this bdd book and this ddd

play40:32

book etc etc the answer is no

play40:34

i think we need to look at how do you do

play40:36

design from a high-level perspective and

play40:38

honestly i don't think there's a single

play40:39

book i can recommend that says this is

play40:41

how you do design well

play40:42

i think lots of the classic books

play40:45

so enterprise integration patterns and

play40:47

some of the kind of older design books

play40:48

are still very very relevant today but i

play40:52

think you'd have to get like a bunch of

play40:54

books a portfolio of books in place to

play40:56

answer that question

play40:57

wonderful thank you so much simon brown

play41:00

thank you

play41:07

you