SlideShare a Scribd company logo
Giovanni Asproni
email: giovanni.asproni@zuhlke.com
gasproni@asprotunity.com
twitter: @gasproni
linkedin: http://www.linkedin.com/in/gasproni
Creating An Incremental
Architecture For Your System
ACCU Conference, April 2018, Bristol, UK
Agenda
• What is Software Architecture
• The problems with the “Rational Model”
• What is Incremental Architecture and its advantages
• Getting started
• Growing the system
• Incremental Architecture for legacy and brownfield systems
http://handbookofsoftwarearchitecture.com/?p=63
“Every software-intensive system has an
architecture. In some cases that architecture is
intentional, while in others it is accidental […]
the architecture of a system is the naming of
the most significant design decisions that
shape a system, where we measure significant
by cost of change and by impact upon use.”
Photo from: https://commons.wikimedia.org/wiki/
File:Grady_Booch,_CHM_2011_2_cropped.jpg
“Cost of change” is
a relative value
“Impact upon use” is about
how much the users of the
system are affected by those
decisions
“Today’s programmers make
design decisions about the
architecture every single day.
When one line of code can tank a
required quality attribute, then
you are a software architect
whether you identify as one or
not.”
Architecture Is For
• Making important structural choices
• Recording and communicating
decisions
• Guiding implementation decisions
• Splitting work among teams
What Does Architecture Include?
• Static and dynamic views of the system
• Sketches
• Prototypes and reference implementations
• Documentation
• Design and implementation guidelines
• Anything else necessary to understand “the shape” and the
behaviour of the system
Architectural Drivers
The Rational Design Process
From: The Design of Design, Fred Brooks
The Rational Design Process Doesn’t Work!
• Design Isn’t Just to Satisfy
Requirements, but Also to Uncover
them
• Design Isn’t Simply Selecting from
Alternatives, but Also Realizing
Their Existence
• Often the domain is not well
understood even by the domain
experts!
STAKT
1
- '•» T m mm |
II
The chances of success of a big
upfront design are inversely
proportional to the size of the
system being designed
BUFD Is A Red Herring
• Most projects have:
• Speculative Upfront Design
(SUFD)
• Absence of refactoring
“incremental design (also called
evolutionary design) allows you to
build technical infrastructure (such
as domain models and persistence
frameworks) incrementally, in
small pieces, as you deliver
stories”
Incremental Architecture
• One small (set of) feature(s) at a time
• Design
• Implement
• Test
• Deploy
Adding increments
is not enough, you
need to iterate as
well!
One More Thing…
An Incremental Approach Can Alleviate / Remove
Constraints
• Early production => early revenue => fewer budget
restrictions
• A technology can be learnt while creating and
deploying the system
• Often, important deadlines can be met with just some
basic functionality
An incremental approach
allows to create the right
domain model for the
application
Qualities: Incremental Approach
• Architectural Patterns
• Hoisting
• Prototyping
Getting started
“If the politics don’t fly,
the system never will”
Engage with
stakeholders and the
development team from
the start!
Start Small!
“A complex system that works is invariably
found to have evolved from a simple system
that worked.”
Focus On What You Know
• No SUFD
• Sufficient design
• Remove “reusable” and “flexible” from your dictionary
• Address major risks
“Favoring simplicity before generality
acts as a tiebreaker between otherwise
equally viable design alternatives. When
there are two possible solutions, favor
the one that is simpler and based on
concrete need rather than the more
intricate one that boasts of generality.”
Kevlin Henney
“Choose Your Tools With Care”
Giovanni Asproni
You may have an idea of the
final shape of the system.
However, that’s just as an
hypothesis
http://www.developerdotstar.com/mag/articles/reeves_design.html
Test Your Hypothesis
“Coding actually makes sense more often than
believed. Often the process of rendering the
design in code will reveal oversights and the
need for additional design effort. The earlier this
occurs, the better the design will be.”
Jack Reeves, “What Is Software Design?”
Don’t Fall in love with your design!
Walking Skeleton
From: http://alistair.cockburn.us/Walking+skeleton
“is a tiny implementation of the system
that performs a small end-to-end
function. It need not use the final
architecture, but it should link together
the main architectural components. The
architecture and the functionality can
then evolve in parallel.”
Walking Skeleton
Skeleton On Crutches
https://gojko.net/2014/06/09/forget-the-walking-skeleton-put-it-on-crutches/
Extracting A Service
Design for testability
The main purpose of automated
tests is to make the system
maintainable and evolvable
“When testing is done right, it is almost
unreasonably effective at uncovering
defects that matter.”
John Regehr
http://blog.regehr.org/archives/820
Create Feedback Loops
• Continuous Integration
• Continuous Deployment
• Continuous Delivery
TDD at all levels helps
Write a failing
acceptance test
Write a failing
unit test
Make the
test pass
Refactor
Often Forgotten Things
• Buildability
• Deployability
• Configurability
• Versioning strategies
How can I include architectural
tasks in my workflow?
• Architecture in the Backlog
• Architectural Trigger
• Architectural Spike
• Technical Debt Management
Patterns
Documenting The Design
IEEE TRANSACTIONS ON SOFTWARE ENGINEERING, VOL. SE-12, NO.2, FEBRUARY 1986 251
A Rational Design Process: How and Why to Fake It
DAVID LORGE PARNAS AND PAUL C. CLEMENTS
Abstract-Many have sought a software design process that allows a
program to be derived systematically from a precise statement of re-
quirements. This paper proposes that, although we will not succeed in
designing a real product in that way, we can produce documentation
that makes it appear that the software was designed by such a process.
We first describe the ideal process, and the documentation that it re-
quires. We then explain why one should attempt to design according to
the ideal process and why one should produce the documentation that
would have been produced by that process. We describe the contents of
each of the required documents.
Index Terms-Programming methods, software design, software
documentation, software engineering.
I. THE SEARCH FOR THE PHILOSOPHER'S STONE: WHY
Do WE WANT A RATIONAL DESIGN PROCESS?
APERFECTLY rational person is one who always has
a good reason for what he does. Each step taken can
be shown to be the best way to get to a well defined goal.
Most of us like to think of ourselves as rational profes-
sionals. However, to many observers, the usual process of
designing software appears quite irrational. Programmers
start without a clear statement of desired behavior and im-
plementation constraints. They make a long sequence of
design decisions with no clear statement of why they do
things the way they do. Their rationale is rarely explained.
Many of us are not satisfied with such a design process.
That is why there is research in software design, program-
ming methods, structured programming, and related top-
ics. Ideally, we would like to derive our programs from a
statement of requirements in the same sense that theorems
are derived from axioms in a published proof. All of the
methodologies that can be considered "top down" are the
result of our desire to have a rational, systematic way of
designing software.
This paper brings a message with both bad news and
good news. The bad news is that, in our opinion, we will
never find the philosopher's stone. We will never find a
process that allows us to design software in a perfectly
rational way. The good news is that we can fake it. We
can present our system to others as if we had been rational
designers and it pays to pretend do so during development
and maintenance.
Manuscript received March 18, 1985. This work was supported by the
U.S. Navy and by the National Science and Engineering Research Council
(NSERC) of Canada.
D. L. Parnas is with the Department of Computer Science, University
of Victoria, Victoria, B. C. V8W 2Y2, Canada, and the Computer Science
and Systems Branch, Naval Research Laboratory, Washington, DC 20375.
P. C. Clements is with the Computer Science and Systems Branch, Naval
Research Laboratory, Washington, DC 20375.
IEEE Log Number 8405736.
II. WHY WILL A SOFTWARE DESIGN "PROCESS"
ALWAYS BE AN IDEALIZATION?
We will never see a software project that proceeds in
the "rational" way. Some of the reasons are listed below:
1) In most cases the people who commission the build-
ing of a software system do not know exactly what they
want and are unable to tell us all that they know.
2) Even if we knew the requirements, there are many
other facts that we need to know to design the software.
Many of the details only become known to us as we pro-
gress in the implementation. Some of the things that we
learn invalidate our design and we must backtrack.Be-
cause we try to minimize lost work, the resulting design
may be one that would not result from a rational design
process.
3) Even if we knew all of the relevant facts before we
started, experience shows that human beings are unable
to comprehend fully the plethora of details that must be
taken into account in order to design and build a correct
system. The process of designing the software is one in
which we attempt to separate concerns so that we are
working with a manageable amount of information. How-
ever, until we have separated the concerns, we are bound
to make errors.
4) Even if we could master all of the detail needed, all
but the most trivial projects are subject to change for ex-
ternal reasons. Some of those changes may invalidate pre-
vious design decisions. The resulting design is not one
that would have been produced by a rational design pro-
cess.
5) Human errors can only be avoided if one can avoid
the use of humans. Even after the concerns are separated,
errors will be made.
6) We are often burdened by preconceived design ideas,
ideas that we invented, acquired on related projects, or
heard about in a class. Sometimes we undertake a project
in order to tryout or use a favorite idea. Such ideas may
not be derived from our requirements by a rational pro-
cess.
7) Often we are encouraged, for economic reasons, to
use software that was developed for some other project. In
other situations, we may be encouraged to share our soft-
ware with another ongoing project. The resulting software
may not be the ideal software for either project, i.e., not
the software that we would develop based on its require-
ments alone, but it is good enough and will save effort.
For all of these reasons, the picture of the software de-
signer deriving his design in a rational, error-free way
from a statement of requirements is quite unrealistic. No
0098-5589/86/0200-0251$01.00 © 1986 IEEE
Growing The System
When The System Grows…
• Increasing team size
• Increasing the number of teams
• Feature teams or component teams?
Brownfield And Legacy Systems
• Rewrite from scratch rarely works
• The incremental approach still
apply
Thank You!
giovanni.asproni@zuhlke.com
@gasproni
Books And References
ptg6985396
From the Library of Giovanni Asproni
ptg6985396
From the Library of Giovanni Asproni
IEEE TRANSACTIONS ON SOFTWARE ENGINEERING, VOL. SE-12, NO.2, FEBRUARY 1986 251
A Rational Design Process: How and Why to Fake It
DAVID LORGE PARNAS AND PAUL C. CLEMENTS
Abstract-Many have sought a software design process that allows a
program to be derived systematically from a precise statement of re-
quirements. This paper proposes that, although we will not succeed in
designing a real product in that way, we can produce documentation
that makes it appear that the software was designed by such a process.
We first describe the ideal process, and the documentation that it re-
quires. We then explain why one should attempt to design according to
the ideal process and why one should produce the documentation that
would have been produced by that process. We describe the contents of
each of the required documents.
Index Terms-Programming methods, software design, software
documentation, software engineering.
I. THE SEARCH FOR THE PHILOSOPHER'S STONE: WHY
Do WE WANT A RATIONAL DESIGN PROCESS?
APERFECTLY rational person is one who always has
a good reason for what he does. Each step taken can
be shown to be the best way to get to a well defined goal.
Most of us like to think of ourselves as rational profes-
sionals. However, to many observers, the usual process of
designing software appears quite irrational. Programmers
start without a clear statement of desired behavior and im-
plementation constraints. They make a long sequence of
design decisions with no clear statement of why they do
things the way they do. Their rationale is rarely explained.
Many of us are not satisfied with such a design process.
That is why there is research in software design, program-
ming methods, structured programming, and related top-
ics. Ideally, we would like to derive our programs from a
statement of requirements in the same sense that theorems
are derived from axioms in a published proof. All of the
methodologies that can be considered "top down" are the
result of our desire to have a rational, systematic way of
designing software.
This paper brings a message with both bad news and
good news. The bad news is that, in our opinion, we will
never find the philosopher's stone. We will never find a
process that allows us to design software in a perfectly
rational way. The good news is that we can fake it. We
can present our system to others as if we had been rational
designers and it pays to pretend do so during development
and maintenance.
Manuscript received March 18, 1985. This work was supported by the
U.S. Navy and by the National Science and Engineering Research Council
(NSERC) of Canada.
D. L. Parnas is with the Department of Computer Science, University
of Victoria, Victoria, B. C. V8W 2Y2, Canada, and the Computer Science
and Systems Branch, Naval Research Laboratory, Washington, DC 20375.
P. C. Clements is with the Computer Science and Systems Branch, Naval
Research Laboratory, Washington, DC 20375.
IEEE Log Number 8405736.
II. WHY WILL A SOFTWARE DESIGN "PROCESS"
ALWAYS BE AN IDEALIZATION?
We will never see a software project that proceeds in
the "rational" way. Some of the reasons are listed below:
1) In most cases the people who commission the build-
ing of a software system do not know exactly what they
want and are unable to tell us all that they know.
2) Even if we knew the requirements, there are many
other facts that we need to know to design the software.
Many of the details only become known to us as we pro-
gress in the implementation. Some of the things that we
learn invalidate our design and we must backtrack.Be-
cause we try to minimize lost work, the resulting design
may be one that would not result from a rational design
process.
3) Even if we knew all of the relevant facts before we
started, experience shows that human beings are unable
to comprehend fully the plethora of details that must be
taken into account in order to design and build a correct
system. The process of designing the software is one in
which we attempt to separate concerns so that we are
working with a manageable amount of information. How-
ever, until we have separated the concerns, we are bound
to make errors.
4) Even if we could master all of the detail needed, all
but the most trivial projects are subject to change for ex-
ternal reasons. Some of those changes may invalidate pre-
vious design decisions. The resulting design is not one
that would have been produced by a rational design pro-
cess.
5) Human errors can only be avoided if one can avoid
the use of humans. Even after the concerns are separated,
errors will be made.
6) We are often burdened by preconceived design ideas,
ideas that we invented, acquired on related projects, or
heard about in a class. Sometimes we undertake a project
in order to tryout or use a favorite idea. Such ideas may
not be derived from our requirements by a rational pro-
cess.
7) Often we are encouraged, for economic reasons, to
use software that was developed for some other project. In
other situations, we may be encouraged to share our soft-
ware with another ongoing project. The resulting software
may not be the ideal software for either project, i.e., not
the software that we would develop based on its require-
ments alone, but it is good enough and will save effort.
For all of these reasons, the picture of the software de-
signer deriving his design in a rational, error-free way
from a statement of requirements is quite unrealistic. No
0098-5589/86/0200-0251$01.00 © 1986 IEEE

More Related Content

What's hot (20)

PPT
Professional responsibilities of software engineering
Muhammad Haseeb Ahad
 
PDF
The Hurricane's Butterfly: Debugging pathologically performing systems
bcantrill
 
PPT
Bits of Evidence
Greg Wilson
 
PPT
Serco Usability Research, Ben Weedon, The challenge of measuring game play ex...
Use8.net
 
PDF
Leadership Without Management: Scaling Organizations by Scaling Engineers
bcantrill
 
PPTX
Workshop on software product development the backdrop
Joy Prabhakaran
 
PPT
Software Development in 21st Century
Henry Jacob
 
PDF
Rapid video prototyping for connected products
Martin Charlier
 
PPT
How to get what you really want from Testing' with Michael Bolton
TEST Huddle
 
PPT
World Usability day: Bridging Research-Practice Gap
Keith Instone
 
ODP
Two Solitudes
Greg Wilson
 
PDF
6 Rules of User Interface Design
Deepak Sahni
 
PPT
Demystifying Information Architecture
Patrick Kennedy
 
PDF
On System Design
mustafa sarac
 
PPT
We Know Less Than You Think (But We Do Know Something)
Greg Wilson
 
PPTX
Psychology and Engineering of Testing
Ilari Henrik Aegerter
 
PPTX
Prototype in HCI
Saqib Shehzad
 
PPT
User Interface Design in Practice
Justine Sanderson
 
PPTX
User Experience Design + Agile: The Good, The Bad, and the Ugly
Joshua Randall
 
PPTX
Prototyping
Eman Abed AlWahhab
 
Professional responsibilities of software engineering
Muhammad Haseeb Ahad
 
The Hurricane's Butterfly: Debugging pathologically performing systems
bcantrill
 
Bits of Evidence
Greg Wilson
 
Serco Usability Research, Ben Weedon, The challenge of measuring game play ex...
Use8.net
 
Leadership Without Management: Scaling Organizations by Scaling Engineers
bcantrill
 
Workshop on software product development the backdrop
Joy Prabhakaran
 
Software Development in 21st Century
Henry Jacob
 
Rapid video prototyping for connected products
Martin Charlier
 
How to get what you really want from Testing' with Michael Bolton
TEST Huddle
 
World Usability day: Bridging Research-Practice Gap
Keith Instone
 
Two Solitudes
Greg Wilson
 
6 Rules of User Interface Design
Deepak Sahni
 
Demystifying Information Architecture
Patrick Kennedy
 
On System Design
mustafa sarac
 
We Know Less Than You Think (But We Do Know Something)
Greg Wilson
 
Psychology and Engineering of Testing
Ilari Henrik Aegerter
 
Prototype in HCI
Saqib Shehzad
 
User Interface Design in Practice
Justine Sanderson
 
User Experience Design + Agile: The Good, The Bad, and the Ugly
Joshua Randall
 
Prototyping
Eman Abed AlWahhab
 

Similar to Creating An Incremental Architecture For Your System (20)

PDF
Creating An Incremental Architecture For Your System
Giovanni Asproni
 
PDF
Real software engineering
atr2006
 
PDF
Glenn Vanderburg — Real software engineering
atr2006
 
PDF
Developing applications that stand the test of time
Jeff Long
 
PPT
Best Practices - Software Engineering
3Quill Softwares
 
PPTX
Software Design And Architecture Introduction
arbabmehmoodpak
 
PDF
Towards a new paradigm to resolve the software crisis
Jeff Long
 
PPT
Avoiding Software Insanity
josephnaveen
 
PDF
Glenn Vanderburg. Craft and software engineering
atr2006
 
PPSX
Process model rup
Aryan Ajmer
 
PDF
Elevator pitch for testing software architecture and software design
Zarko Acimovic
 
PDF
Elevator pitch architecture design
Zarko Acimovic
 
PPTX
Software Architecture and Design -Development process
qudsiayousaf1
 
PPT
The Software Development Process
Cesar Augusto Nogueira
 
PPTX
Software Engineering Methodologies
Damian T. Gordon
 
PPTX
DESIGN RULES , PROCESS OF DESIGN, USER FOCUS
mohanrajm63
 
PPT
Software development life cycle
Nishant Srivastava
 
PPT
HCI chapter 3 notes on how students work with software process in design
Sarita Balshetwar
 
PDF
Design process
Divonis.com
 
PPTX
Designer engineering on the Data Science student
ArjunM99136
 
Creating An Incremental Architecture For Your System
Giovanni Asproni
 
Real software engineering
atr2006
 
Glenn Vanderburg — Real software engineering
atr2006
 
Developing applications that stand the test of time
Jeff Long
 
Best Practices - Software Engineering
3Quill Softwares
 
Software Design And Architecture Introduction
arbabmehmoodpak
 
Towards a new paradigm to resolve the software crisis
Jeff Long
 
Avoiding Software Insanity
josephnaveen
 
Glenn Vanderburg. Craft and software engineering
atr2006
 
Process model rup
Aryan Ajmer
 
Elevator pitch for testing software architecture and software design
Zarko Acimovic
 
Elevator pitch architecture design
Zarko Acimovic
 
Software Architecture and Design -Development process
qudsiayousaf1
 
The Software Development Process
Cesar Augusto Nogueira
 
Software Engineering Methodologies
Damian T. Gordon
 
DESIGN RULES , PROCESS OF DESIGN, USER FOCUS
mohanrajm63
 
Software development life cycle
Nishant Srivastava
 
HCI chapter 3 notes on how students work with software process in design
Sarita Balshetwar
 
Design process
Divonis.com
 
Designer engineering on the Data Science student
ArjunM99136
 
Ad

More from Giovanni Asproni (8)

PDF
Remote Mob Programming In A High Stakes Environment (Agile Manchester 2023)
Giovanni Asproni
 
PDF
Remote mobprogrammingina highstakesenvironment
Giovanni Asproni
 
PDF
Scaling Agile Done Right (XP 2017 version)
Giovanni Asproni
 
PDF
Scaling Agile Done Right (Agile Manchester 2017)
Giovanni Asproni
 
PDF
Design For Testability
Giovanni Asproni
 
PDF
Faking Hell
Giovanni Asproni
 
PDF
Methodology Patterns (Agile Cambridge 2014)
Giovanni Asproni
 
PDF
Writing usableap isinpractice
Giovanni Asproni
 
Remote Mob Programming In A High Stakes Environment (Agile Manchester 2023)
Giovanni Asproni
 
Remote mobprogrammingina highstakesenvironment
Giovanni Asproni
 
Scaling Agile Done Right (XP 2017 version)
Giovanni Asproni
 
Scaling Agile Done Right (Agile Manchester 2017)
Giovanni Asproni
 
Design For Testability
Giovanni Asproni
 
Faking Hell
Giovanni Asproni
 
Methodology Patterns (Agile Cambridge 2014)
Giovanni Asproni
 
Writing usableap isinpractice
Giovanni Asproni
 
Ad

Recently uploaded (20)

PPTX
Coefficient of Variance in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PPTX
Hardware(Central Processing Unit ) CU and ALU
RizwanaKalsoom2
 
PDF
How to Hire AI Developers_ Step-by-Step Guide in 2025.pdf
DianApps Technologies
 
PPTX
AEM User Group: India Chapter Kickoff Meeting
jennaf3
 
PDF
Driver Easy Pro 6.1.1 Crack Licensce key 2025 FREE
utfefguu
 
PDF
AI + DevOps = Smart Automation with devseccops.ai.pdf
Devseccops.ai
 
PDF
vMix Pro 28.0.0.42 Download vMix Registration key Bundle
kulindacore
 
PPTX
Empowering Asian Contributions: The Rise of Regional User Groups in Open Sour...
Shane Coughlan
 
PDF
Generic or Specific? Making sensible software design decisions
Bert Jan Schrijver
 
PPTX
Agentic Automation Journey Series Day 2 – Prompt Engineering for UiPath Agents
klpathrudu
 
PPTX
Tally_Basic_Operations_Presentation.pptx
AditiBansal54083
 
PDF
유니티에서 Burst Compiler+ThreadedJobs+SIMD 적용사례
Seongdae Kim
 
PDF
MiniTool Partition Wizard Free Crack + Full Free Download 2025
bashirkhan333g
 
PPTX
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PPTX
Comprehensive Risk Assessment Module for Smarter Risk Management
EHA Soft Solutions
 
PDF
Digger Solo: Semantic search and maps for your local files
seanpedersen96
 
PDF
SciPy 2025 - Packaging a Scientific Python Project
Henry Schreiner
 
PPTX
Finding Your License Details in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PDF
Odoo CRM vs Zoho CRM: Honest Comparison 2025
Odiware Technologies Private Limited
 
PDF
The 5 Reasons for IT Maintenance - Arna Softech
Arna Softech
 
Coefficient of Variance in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Hardware(Central Processing Unit ) CU and ALU
RizwanaKalsoom2
 
How to Hire AI Developers_ Step-by-Step Guide in 2025.pdf
DianApps Technologies
 
AEM User Group: India Chapter Kickoff Meeting
jennaf3
 
Driver Easy Pro 6.1.1 Crack Licensce key 2025 FREE
utfefguu
 
AI + DevOps = Smart Automation with devseccops.ai.pdf
Devseccops.ai
 
vMix Pro 28.0.0.42 Download vMix Registration key Bundle
kulindacore
 
Empowering Asian Contributions: The Rise of Regional User Groups in Open Sour...
Shane Coughlan
 
Generic or Specific? Making sensible software design decisions
Bert Jan Schrijver
 
Agentic Automation Journey Series Day 2 – Prompt Engineering for UiPath Agents
klpathrudu
 
Tally_Basic_Operations_Presentation.pptx
AditiBansal54083
 
유니티에서 Burst Compiler+ThreadedJobs+SIMD 적용사례
Seongdae Kim
 
MiniTool Partition Wizard Free Crack + Full Free Download 2025
bashirkhan333g
 
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Comprehensive Risk Assessment Module for Smarter Risk Management
EHA Soft Solutions
 
Digger Solo: Semantic search and maps for your local files
seanpedersen96
 
SciPy 2025 - Packaging a Scientific Python Project
Henry Schreiner
 
Finding Your License Details in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Odoo CRM vs Zoho CRM: Honest Comparison 2025
Odiware Technologies Private Limited
 
The 5 Reasons for IT Maintenance - Arna Softech
Arna Softech
 

Creating An Incremental Architecture For Your System

  • 1. Giovanni Asproni email: [email protected] [email protected] twitter: @gasproni linkedin: http://www.linkedin.com/in/gasproni Creating An Incremental Architecture For Your System ACCU Conference, April 2018, Bristol, UK
  • 2. Agenda • What is Software Architecture • The problems with the “Rational Model” • What is Incremental Architecture and its advantages • Getting started • Growing the system • Incremental Architecture for legacy and brownfield systems
  • 3. http://handbookofsoftwarearchitecture.com/?p=63 “Every software-intensive system has an architecture. In some cases that architecture is intentional, while in others it is accidental […] the architecture of a system is the naming of the most significant design decisions that shape a system, where we measure significant by cost of change and by impact upon use.” Photo from: https://commons.wikimedia.org/wiki/ File:Grady_Booch,_CHM_2011_2_cropped.jpg
  • 4. “Cost of change” is a relative value
  • 5. “Impact upon use” is about how much the users of the system are affected by those decisions
  • 6. “Today’s programmers make design decisions about the architecture every single day. When one line of code can tank a required quality attribute, then you are a software architect whether you identify as one or not.”
  • 7. Architecture Is For • Making important structural choices • Recording and communicating decisions • Guiding implementation decisions • Splitting work among teams
  • 8. What Does Architecture Include? • Static and dynamic views of the system • Sketches • Prototypes and reference implementations • Documentation • Design and implementation guidelines • Anything else necessary to understand “the shape” and the behaviour of the system
  • 10. The Rational Design Process From: The Design of Design, Fred Brooks
  • 11. The Rational Design Process Doesn’t Work! • Design Isn’t Just to Satisfy Requirements, but Also to Uncover them • Design Isn’t Simply Selecting from Alternatives, but Also Realizing Their Existence • Often the domain is not well understood even by the domain experts! STAKT 1 - '•» T m mm | II
  • 12. The chances of success of a big upfront design are inversely proportional to the size of the system being designed
  • 13. BUFD Is A Red Herring • Most projects have: • Speculative Upfront Design (SUFD) • Absence of refactoring
  • 14. “incremental design (also called evolutionary design) allows you to build technical infrastructure (such as domain models and persistence frameworks) incrementally, in small pieces, as you deliver stories”
  • 15. Incremental Architecture • One small (set of) feature(s) at a time • Design • Implement • Test • Deploy
  • 16. Adding increments is not enough, you need to iterate as well! One More Thing…
  • 17. An Incremental Approach Can Alleviate / Remove Constraints • Early production => early revenue => fewer budget restrictions • A technology can be learnt while creating and deploying the system • Often, important deadlines can be met with just some basic functionality
  • 18. An incremental approach allows to create the right domain model for the application
  • 19. Qualities: Incremental Approach • Architectural Patterns • Hoisting • Prototyping
  • 21. “If the politics don’t fly, the system never will”
  • 22. Engage with stakeholders and the development team from the start!
  • 23. Start Small! “A complex system that works is invariably found to have evolved from a simple system that worked.”
  • 24. Focus On What You Know • No SUFD • Sufficient design • Remove “reusable” and “flexible” from your dictionary • Address major risks
  • 25. “Favoring simplicity before generality acts as a tiebreaker between otherwise equally viable design alternatives. When there are two possible solutions, favor the one that is simpler and based on concrete need rather than the more intricate one that boasts of generality.” Kevlin Henney
  • 26. “Choose Your Tools With Care” Giovanni Asproni
  • 27. You may have an idea of the final shape of the system. However, that’s just as an hypothesis
  • 28. http://www.developerdotstar.com/mag/articles/reeves_design.html Test Your Hypothesis “Coding actually makes sense more often than believed. Often the process of rendering the design in code will reveal oversights and the need for additional design effort. The earlier this occurs, the better the design will be.” Jack Reeves, “What Is Software Design?”
  • 29. Don’t Fall in love with your design!
  • 30. Walking Skeleton From: http://alistair.cockburn.us/Walking+skeleton “is a tiny implementation of the system that performs a small end-to-end function. It need not use the final architecture, but it should link together the main architectural components. The architecture and the functionality can then evolve in parallel.”
  • 35. The main purpose of automated tests is to make the system maintainable and evolvable
  • 36. “When testing is done right, it is almost unreasonably effective at uncovering defects that matter.” John Regehr http://blog.regehr.org/archives/820
  • 37. Create Feedback Loops • Continuous Integration • Continuous Deployment • Continuous Delivery
  • 38. TDD at all levels helps Write a failing acceptance test Write a failing unit test Make the test pass Refactor
  • 39. Often Forgotten Things • Buildability • Deployability • Configurability • Versioning strategies
  • 40. How can I include architectural tasks in my workflow?
  • 41. • Architecture in the Backlog • Architectural Trigger • Architectural Spike • Technical Debt Management Patterns
  • 42. Documenting The Design IEEE TRANSACTIONS ON SOFTWARE ENGINEERING, VOL. SE-12, NO.2, FEBRUARY 1986 251 A Rational Design Process: How and Why to Fake It DAVID LORGE PARNAS AND PAUL C. CLEMENTS Abstract-Many have sought a software design process that allows a program to be derived systematically from a precise statement of re- quirements. This paper proposes that, although we will not succeed in designing a real product in that way, we can produce documentation that makes it appear that the software was designed by such a process. We first describe the ideal process, and the documentation that it re- quires. We then explain why one should attempt to design according to the ideal process and why one should produce the documentation that would have been produced by that process. We describe the contents of each of the required documents. Index Terms-Programming methods, software design, software documentation, software engineering. I. THE SEARCH FOR THE PHILOSOPHER'S STONE: WHY Do WE WANT A RATIONAL DESIGN PROCESS? APERFECTLY rational person is one who always has a good reason for what he does. Each step taken can be shown to be the best way to get to a well defined goal. Most of us like to think of ourselves as rational profes- sionals. However, to many observers, the usual process of designing software appears quite irrational. Programmers start without a clear statement of desired behavior and im- plementation constraints. They make a long sequence of design decisions with no clear statement of why they do things the way they do. Their rationale is rarely explained. Many of us are not satisfied with such a design process. That is why there is research in software design, program- ming methods, structured programming, and related top- ics. Ideally, we would like to derive our programs from a statement of requirements in the same sense that theorems are derived from axioms in a published proof. All of the methodologies that can be considered "top down" are the result of our desire to have a rational, systematic way of designing software. This paper brings a message with both bad news and good news. The bad news is that, in our opinion, we will never find the philosopher's stone. We will never find a process that allows us to design software in a perfectly rational way. The good news is that we can fake it. We can present our system to others as if we had been rational designers and it pays to pretend do so during development and maintenance. Manuscript received March 18, 1985. This work was supported by the U.S. Navy and by the National Science and Engineering Research Council (NSERC) of Canada. D. L. Parnas is with the Department of Computer Science, University of Victoria, Victoria, B. C. V8W 2Y2, Canada, and the Computer Science and Systems Branch, Naval Research Laboratory, Washington, DC 20375. P. C. Clements is with the Computer Science and Systems Branch, Naval Research Laboratory, Washington, DC 20375. IEEE Log Number 8405736. II. WHY WILL A SOFTWARE DESIGN "PROCESS" ALWAYS BE AN IDEALIZATION? We will never see a software project that proceeds in the "rational" way. Some of the reasons are listed below: 1) In most cases the people who commission the build- ing of a software system do not know exactly what they want and are unable to tell us all that they know. 2) Even if we knew the requirements, there are many other facts that we need to know to design the software. Many of the details only become known to us as we pro- gress in the implementation. Some of the things that we learn invalidate our design and we must backtrack.Be- cause we try to minimize lost work, the resulting design may be one that would not result from a rational design process. 3) Even if we knew all of the relevant facts before we started, experience shows that human beings are unable to comprehend fully the plethora of details that must be taken into account in order to design and build a correct system. The process of designing the software is one in which we attempt to separate concerns so that we are working with a manageable amount of information. How- ever, until we have separated the concerns, we are bound to make errors. 4) Even if we could master all of the detail needed, all but the most trivial projects are subject to change for ex- ternal reasons. Some of those changes may invalidate pre- vious design decisions. The resulting design is not one that would have been produced by a rational design pro- cess. 5) Human errors can only be avoided if one can avoid the use of humans. Even after the concerns are separated, errors will be made. 6) We are often burdened by preconceived design ideas, ideas that we invented, acquired on related projects, or heard about in a class. Sometimes we undertake a project in order to tryout or use a favorite idea. Such ideas may not be derived from our requirements by a rational pro- cess. 7) Often we are encouraged, for economic reasons, to use software that was developed for some other project. In other situations, we may be encouraged to share our soft- ware with another ongoing project. The resulting software may not be the ideal software for either project, i.e., not the software that we would develop based on its require- ments alone, but it is good enough and will save effort. For all of these reasons, the picture of the software de- signer deriving his design in a rational, error-free way from a statement of requirements is quite unrealistic. No 0098-5589/86/0200-0251$01.00 © 1986 IEEE
  • 44. When The System Grows… • Increasing team size • Increasing the number of teams • Feature teams or component teams?
  • 45. Brownfield And Legacy Systems • Rewrite from scratch rarely works • The incremental approach still apply
  • 47. Books And References ptg6985396 From the Library of Giovanni Asproni ptg6985396 From the Library of Giovanni Asproni IEEE TRANSACTIONS ON SOFTWARE ENGINEERING, VOL. SE-12, NO.2, FEBRUARY 1986 251 A Rational Design Process: How and Why to Fake It DAVID LORGE PARNAS AND PAUL C. CLEMENTS Abstract-Many have sought a software design process that allows a program to be derived systematically from a precise statement of re- quirements. This paper proposes that, although we will not succeed in designing a real product in that way, we can produce documentation that makes it appear that the software was designed by such a process. We first describe the ideal process, and the documentation that it re- quires. We then explain why one should attempt to design according to the ideal process and why one should produce the documentation that would have been produced by that process. We describe the contents of each of the required documents. Index Terms-Programming methods, software design, software documentation, software engineering. I. THE SEARCH FOR THE PHILOSOPHER'S STONE: WHY Do WE WANT A RATIONAL DESIGN PROCESS? APERFECTLY rational person is one who always has a good reason for what he does. Each step taken can be shown to be the best way to get to a well defined goal. Most of us like to think of ourselves as rational profes- sionals. However, to many observers, the usual process of designing software appears quite irrational. Programmers start without a clear statement of desired behavior and im- plementation constraints. They make a long sequence of design decisions with no clear statement of why they do things the way they do. Their rationale is rarely explained. Many of us are not satisfied with such a design process. That is why there is research in software design, program- ming methods, structured programming, and related top- ics. Ideally, we would like to derive our programs from a statement of requirements in the same sense that theorems are derived from axioms in a published proof. All of the methodologies that can be considered "top down" are the result of our desire to have a rational, systematic way of designing software. This paper brings a message with both bad news and good news. The bad news is that, in our opinion, we will never find the philosopher's stone. We will never find a process that allows us to design software in a perfectly rational way. The good news is that we can fake it. We can present our system to others as if we had been rational designers and it pays to pretend do so during development and maintenance. Manuscript received March 18, 1985. This work was supported by the U.S. Navy and by the National Science and Engineering Research Council (NSERC) of Canada. D. L. Parnas is with the Department of Computer Science, University of Victoria, Victoria, B. C. V8W 2Y2, Canada, and the Computer Science and Systems Branch, Naval Research Laboratory, Washington, DC 20375. P. C. Clements is with the Computer Science and Systems Branch, Naval Research Laboratory, Washington, DC 20375. IEEE Log Number 8405736. II. WHY WILL A SOFTWARE DESIGN "PROCESS" ALWAYS BE AN IDEALIZATION? We will never see a software project that proceeds in the "rational" way. Some of the reasons are listed below: 1) In most cases the people who commission the build- ing of a software system do not know exactly what they want and are unable to tell us all that they know. 2) Even if we knew the requirements, there are many other facts that we need to know to design the software. Many of the details only become known to us as we pro- gress in the implementation. Some of the things that we learn invalidate our design and we must backtrack.Be- cause we try to minimize lost work, the resulting design may be one that would not result from a rational design process. 3) Even if we knew all of the relevant facts before we started, experience shows that human beings are unable to comprehend fully the plethora of details that must be taken into account in order to design and build a correct system. The process of designing the software is one in which we attempt to separate concerns so that we are working with a manageable amount of information. How- ever, until we have separated the concerns, we are bound to make errors. 4) Even if we could master all of the detail needed, all but the most trivial projects are subject to change for ex- ternal reasons. Some of those changes may invalidate pre- vious design decisions. The resulting design is not one that would have been produced by a rational design pro- cess. 5) Human errors can only be avoided if one can avoid the use of humans. Even after the concerns are separated, errors will be made. 6) We are often burdened by preconceived design ideas, ideas that we invented, acquired on related projects, or heard about in a class. Sometimes we undertake a project in order to tryout or use a favorite idea. Such ideas may not be derived from our requirements by a rational pro- cess. 7) Often we are encouraged, for economic reasons, to use software that was developed for some other project. In other situations, we may be encouraged to share our soft- ware with another ongoing project. The resulting software may not be the ideal software for either project, i.e., not the software that we would develop based on its require- ments alone, but it is good enough and will save effort. For all of these reasons, the picture of the software de- signer deriving his design in a rational, error-free way from a statement of requirements is quite unrealistic. No 0098-5589/86/0200-0251$01.00 © 1986 IEEE