0% found this document useful (0 votes)
41 views89 pages

Oreillysaconlondon2017 Software Architecture For Developers

The document outlines five key principles of software architecture that every developer should understand, emphasizing the importance of flexibility over rigid upfront design. It highlights the necessity for teams to engage with architecture to avoid chaos and ensure effective collaboration, as well as the role of software architects in coding and coaching. Additionally, it argues that a good architecture fosters agility and continuous improvement in software development.

Uploaded by

KK
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
41 views89 pages

Oreillysaconlondon2017 Software Architecture For Developers

The document outlines five key principles of software architecture that every developer should understand, emphasizing the importance of flexibility over rigid upfront design. It highlights the necessity for teams to engage with architecture to avoid chaos and ensure effective collaboration, as well as the role of software architects in coding and coaching. Additionally, it argues that a good architecture fosters agility and continuous improvement in software development.

Uploaded by

KK
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 89

Software Architecture

for Developers

@simonbrown
Five things every developer should
know about software architecture
1. Software architecture isn't
about big design up front
Historically there’s been
a tendency towards
big design up front
“Waterfall”
“ ”
I believe in this concept, but the
implementation described above
is risky and invites failure.
Managing the development of large software systems
Dr Winston W. Royce
“ ”
Responding to change
over
following a plan
Moving fast, embracing change,
delivering value early, getting feedback

vs
Understanding everything up front,
defining a blueprint for the team to “follow”
Big design
up front
vs
Software
Architecture
Document
No design
up front
“ ”
Big design up front is dumb.
Doing no design up front
is even dumber.
Dave Thomas
How much up front design
should you do?

0% 100%
“ ”
just enough
It’s not about creating a
perfect end-state or
complete architecture
You need a
starting point
Evolutionary Design
Beginning With A Primitive Whole
If you don’t engage in the problem, you end up with
a very simplified and superficial view of the solution
1. Is that what we’re going to build?

2. Is it going to work?
“ ”
Architecture represents the
significant decisions, where significance
is measured by cost of change.

Grady Booch
Architecture Programming language
Monolith, microservices or hybrid approach

Design

Implementation Curly braces on the same or next line


Whitespace vs tabs
Identify and mitigate
your highest priority risks
“ ”
Base your architecture on
requirements, travel light
and prove your architecture
with concrete experiments.
Agile Architecture: Strategies for Scaling Agile Development
Scott Ambler
Concrete experiment
Proof of concept, prototype, spike, tracer, vertical slice,
walking skeleton, executable reference architecture, …
Just enough up front design to create
firm and sufficient foundations
Thinking about
software architecture lets you
stack the odds of success
in your favour
2. Every software team needs
to consider software
architecture
What happens if a software
development team doesn’t
think about architecture?
Chaos
Big ball of mud, spaghetti code, inconsistent
approaches to solving the same problems,
quality attributes are ignored, deployment
problems, maintenance issues, etc
Every team needs
technical leadership
3. The software architecture
role is about coding, coaching
and collaboration
Software development
is not a relay sport

Software
Architecture
Document
AaaS
Architecture as a Service
Continuous
technical
leadership
Different types of teams need
different leadership styles
Pair architecting
Soft skills
(leadership, communication, presentation, influencing,
negotiation, collaboration, coaching and mentoring,
motivation, facilitation, political, etc)
Good software architects
are typically
good software developers
The people designing software must
understand technology …
all decisions involve trade-offs
1. Is that what we’re going to build?

2. Is it going to work?
Should software architects
write code?
Production code, prototypes,
frameworks, foundations, code
reviews, experimenting, etc
Don’t code all of the time!
Software architects
should be
master builders
Experience is important …
software architecture is not a rank!
Progress Toward an Engineering Discipline of Software
Mary Shaw
The software architecture role
is multi-faceted
(technical depth, technical breadth, soft skills)
4. You don't need to use UML
Do you use UML?
In my experience, optimistically,

1 out of 10 people use UML


1. Is that what we’re going to build?

2. Is it going to work?
A common set of abstractions
is more important
than a common notation
Software System

Container Container Container


lient-side web app, server-side web app, console application, (e.g. client-side web app, server-side web app, console application, (e.g. client-side web app, server-side web app, console applic
obile app, microservice, database schema, file system, etc) mobile app, microservice, database schema, file system, etc) mobile app, microservice, database schema, file system, e

Component Component Component

Class Class Class

A software system is made up of one or more containers,


each of which contains one or more components,
which in turn are implemented by one or more classes (or code).
C4
c4model.com
Diagrams are maps
that help software developers navigate a large and/or complex codebase
Software Guidebook
(maps, points of interest, sights, itineraries,
history, culture, practical information, etc)
“ ”
What tools do you
recommend?
public static void main(String[] args) throws Exception {
Workspace workspace = new Workspace("Getting Started", "This is a model of
Model model = workspace.getModel();

Person user = model.addPerson("User", "A user of my software system.");


SoftwareSystem softwareSystem = model.addSoftwareSystem("Software System",
user.uses(softwareSystem, "Uses");

ViewSet views = workspace.getViews();


SystemContextView contextView = views.createSystemContextView(softwareSyste
contextView.addAllSoftwareSystems();
contextView.addAllPeople();

Styles styles = views.getConfiguration().getStyles();


styles.addElementStyle(Tags.SOFTWARE_SYSTEM).background("#1168bd").color("#
styles.addElementStyle(Tags.PERSON).background("#08427b").color("#ffffff").
}
static void Main()
{
Workspace workspace = new Workspace("Getting Started", "This is a model of
Model model = workspace.Model;

Person user = model.AddPerson("User", "A user of my software system.");


SoftwareSystem softwareSystem = model.AddSoftwareSystem("Software System",
user.Uses(softwareSystem, "Uses");

ViewSet viewSet = workspace.Views;


SystemContextView contextView = viewSet.CreateSystemContextView(softwareSys
contextView.AddAllSoftwareSystems();
contextView.AddAllPeople();

Styles styles = viewSet.Configuration.Styles;


styles.Add(new ElementStyle(Tags.SoftwareSystem) { Background = "#1168bd",
styles.Add(new ElementStyle(Tags.Person) { Background = "#08427b", Color =
}
For more information about
software architecture
diagrams and documentation…
5. A good software
architecture enables agility
Agile is about moving fast,
embracing change, releasing often,
getting feedback, …
Agile is about a mindset of
continuous improvement
A good architecture
enables agility
Modular
Microservices
monolith
Modularity

Monolithic Distributed
big ball of mud big ball of mud

Number of deployment units


Agility is a
quality attribute
A good architecture rarely
happens through
architecture-indifferent design
Five things every developer should
know about software architecture
1. Software architecture isn't about big design up front
2. Every software team needs to consider software architecture
3. The software architecture role is about coding, coaching and collaboration
4. You don't need to use UML
5. A good software architecture enables agility

[email protected]
@simonbrown

You might also like