SlideShare une entreprise Scribd logo
1  sur  47
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

Serco Usability Research, Ben Weedon, The challenge of measuring game play ex...
Serco Usability Research, Ben Weedon, The challenge of measuring game play ex...Serco Usability Research, Ben Weedon, The challenge of measuring game play ex...
Serco Usability Research, Ben Weedon, The challenge of measuring game play ex...
Use8.net
 
Workshop on software product development the backdrop
Workshop on software product development   the backdropWorkshop on software product development   the backdrop
Workshop on software product development the backdrop
Joy Prabhakaran
 
Software Development in 21st Century
Software Development in 21st CenturySoftware Development in 21st Century
Software Development in 21st Century
Henry Jacob
 

Tendances (20)

Professional responsibilities of software engineering
Professional responsibilities of software engineeringProfessional responsibilities of software engineering
Professional responsibilities of software engineering
 
The Hurricane's Butterfly: Debugging pathologically performing systems
The Hurricane's Butterfly: Debugging pathologically performing systemsThe Hurricane's Butterfly: Debugging pathologically performing systems
The Hurricane's Butterfly: Debugging pathologically performing systems
 
Bits of Evidence
Bits of EvidenceBits of Evidence
Bits of Evidence
 
Serco Usability Research, Ben Weedon, The challenge of measuring game play ex...
Serco Usability Research, Ben Weedon, The challenge of measuring game play ex...Serco Usability Research, Ben Weedon, The challenge of measuring game play ex...
Serco Usability Research, Ben Weedon, The challenge of measuring game play ex...
 
Leadership Without Management: Scaling Organizations by Scaling Engineers
Leadership Without Management: Scaling Organizations by Scaling EngineersLeadership Without Management: Scaling Organizations by Scaling Engineers
Leadership Without Management: Scaling Organizations by Scaling Engineers
 
Workshop on software product development the backdrop
Workshop on software product development   the backdropWorkshop on software product development   the backdrop
Workshop on software product development the backdrop
 
Software Development in 21st Century
Software Development in 21st CenturySoftware Development in 21st Century
Software Development in 21st Century
 
Rapid video prototyping for connected products
Rapid video prototyping for connected productsRapid video prototyping for connected products
Rapid video prototyping for connected products
 
How to get what you really want from Testing' with Michael Bolton
How to get what you really want from Testing' with Michael BoltonHow to get what you really want from Testing' with Michael Bolton
How to get what you really want from Testing' with Michael Bolton
 
World Usability day: Bridging Research-Practice Gap
World Usability day: Bridging Research-Practice GapWorld Usability day: Bridging Research-Practice Gap
World Usability day: Bridging Research-Practice Gap
 
Two Solitudes
Two SolitudesTwo Solitudes
Two Solitudes
 
6 Rules of User Interface Design
6 Rules of User Interface Design6 Rules of User Interface Design
6 Rules of User Interface Design
 
Demystifying Information Architecture
Demystifying Information ArchitectureDemystifying Information Architecture
Demystifying Information Architecture
 
On System Design
On System DesignOn System Design
On System Design
 
We Know Less Than You Think (But We Do Know Something)
We Know Less Than You Think (But We Do Know Something)We Know Less Than You Think (But We Do Know Something)
We Know Less Than You Think (But We Do Know Something)
 
Psychology and Engineering of Testing
Psychology and Engineering of TestingPsychology and Engineering of Testing
Psychology and Engineering of Testing
 
Prototype in HCI
Prototype in HCIPrototype in HCI
Prototype in HCI
 
User Interface Design in Practice
User Interface Design in PracticeUser Interface Design in Practice
User Interface Design in Practice
 
User Experience Design + Agile: The Good, The Bad, and the Ugly
User Experience Design + Agile: The Good, The Bad, and the UglyUser Experience Design + Agile: The Good, The Bad, and the Ugly
User Experience Design + Agile: The Good, The Bad, and the Ugly
 
Prototyping
PrototypingPrototyping
Prototyping
 

Similaire à Creating An Incremental Architecture For Your System

Continuous Delivery
Continuous DeliveryContinuous Delivery
Continuous Delivery
Stein Inge Morisbak
 
COMPUTER APPLICATION PROJECT ON
COMPUTER APPLICATION PROJECT ON COMPUTER APPLICATION PROJECT ON
COMPUTER APPLICATION PROJECT ON
Jitender Suryavansh
 
Excavating the knowledge of our ancestors
Excavating the knowledge of our ancestorsExcavating the knowledge of our ancestors
Excavating the knowledge of our ancestors
Uwe Friedrichsen
 

Similaire à Creating An Incremental Architecture For Your System (20)

Creating An Incremental Architecture For Your System
Creating An Incremental Architecture For Your SystemCreating An Incremental Architecture For Your System
Creating An Incremental Architecture For Your System
 
Agile architecture upload
Agile architecture uploadAgile architecture upload
Agile architecture upload
 
Software Architecture for Agile Development
Software Architecture for Agile DevelopmentSoftware Architecture for Agile Development
Software Architecture for Agile Development
 
Continuous Delivery
Continuous DeliveryContinuous Delivery
Continuous Delivery
 
ROOTS2011 Continuous Delivery
ROOTS2011 Continuous DeliveryROOTS2011 Continuous Delivery
ROOTS2011 Continuous Delivery
 
online news portal system
online news portal systemonline news portal system
online news portal system
 
Abcd iqs ssoftware-projects-mercecrosas
Abcd iqs ssoftware-projects-mercecrosasAbcd iqs ssoftware-projects-mercecrosas
Abcd iqs ssoftware-projects-mercecrosas
 
Introduction to software engineering
Introduction to software engineeringIntroduction to software engineering
Introduction to software engineering
 
TechEvent 2019: Artificial Intelligence in Dev & Ops; Martin Luckow - Trivadis
TechEvent 2019: Artificial Intelligence in Dev & Ops; Martin Luckow - TrivadisTechEvent 2019: Artificial Intelligence in Dev & Ops; Martin Luckow - Trivadis
TechEvent 2019: Artificial Intelligence in Dev & Ops; Martin Luckow - Trivadis
 
Software engineering the genesis
Software engineering  the genesisSoftware engineering  the genesis
Software engineering the genesis
 
COMPUTER APPLICATION PROJECT ON
COMPUTER APPLICATION PROJECT ON COMPUTER APPLICATION PROJECT ON
COMPUTER APPLICATION PROJECT ON
 
The Modern Software Architect
The Modern Software ArchitectThe Modern Software Architect
The Modern Software Architect
 
Chapter five HCI
Chapter five HCIChapter five HCI
Chapter five HCI
 
No Silver Bullet - Essence and Accidents of Software Engineering
No Silver Bullet - Essence and Accidents of Software EngineeringNo Silver Bullet - Essence and Accidents of Software Engineering
No Silver Bullet - Essence and Accidents of Software Engineering
 
ADUF - Adaptable Design Up Front
ADUF -  Adaptable Design Up FrontADUF -  Adaptable Design Up Front
ADUF - Adaptable Design Up Front
 
Bt0081 software engineering
Bt0081 software engineeringBt0081 software engineering
Bt0081 software engineering
 
Software engineering
Software engineeringSoftware engineering
Software engineering
 
From Duke of DevOps to Queen of Chaos - Api days 2018
From Duke of DevOps to Queen of Chaos - Api days 2018From Duke of DevOps to Queen of Chaos - Api days 2018
From Duke of DevOps to Queen of Chaos - Api days 2018
 
Software design.edited (1)
Software design.edited (1)Software design.edited (1)
Software design.edited (1)
 
Excavating the knowledge of our ancestors
Excavating the knowledge of our ancestorsExcavating the knowledge of our ancestors
Excavating the knowledge of our ancestors
 

Plus de Giovanni Asproni

Plus de Giovanni Asproni (8)

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

Dernier

introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
VishalKumarJha10
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 

Dernier (20)

Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 

Creating An Incremental Architecture For Your System

  • 1. 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
  • 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