SlideShare a Scribd company logo
1 of 44
16 June 2015 © Agile Institute 2008-2014 1
16 June 2015 © Agile Institute 2008-2014 2
Emergent
Design
History, Concepts, &
Principles
Rob Myers
Agile Development Practices
East
13 November 2014
a definition of emergence
16 June 2015 © Agile Institute 2008-2014 3
…a process whereby larger entities, patterns, and
regularities arise through interactions among
smaller or simpler entities that themselves do not
exhibit such properties.
-- http://en.wikipedia.org/wiki/Emergence
16 June 2015 © Agile Institute 2008-2014 4
16 June 2015 © Agile Institute 2008-2014 5
16 June 2015 © Agile Institute 2008-2014 6
16 June 2015 © Agile Institute 2008-2014 7
16 June 2015 © Agile Institute 2008-2014 8
16 June 2015 © Agile Institute 2008-2014 9
"Termite Cathedral DSC03570”
taken by w:User:Yewenyi - [1].
Licensed under
Creative Commons Attribution-Share Alike 3.0
via Wikimedia Commons
http://commons.wikimedia.org/wiki/
16 June 2015 © Agile Institute 2008-2014 10
16 June 2015 © Agile Institute 2008-2014 11
emergent properties
• Spontaneous order arises from chaos.
• From simple rules, complex behaviors manifest.
• Tiny steps, repeated many times, perhaps recursively.
• Same “rules” apply at macro/micro levels; same “paths”
exist to/from another level.
• Require a rich supply of “food”: time, energy, RAM…
16 June 2015 © Agile Institute 2008-2014 12
What would “Emergent Design” mean?
A software design which
• solves the problems or implements the business
behaviors requested,
• emerged over time,
• emerged from simple rules and trusted practices,
• is elegant and easy to maintain,
• was not considered beforehand,
• was discovered along the way!
16 June 2015 © Agile Institute 2008-2014 13
16 June 2015 © Agile Institute 2008-2014 14
A Brief History of
Object Oriented Design
object oriented programming
• Modular programming taken further: Keep data together
with operations that commonly apply to that data.
• Allows us to create types & abstractions useful in our
domain.
• Replaces structure, e.g.
if (lastLocationKnown) {
doSomethingClever();
} else {
doSomethingQuick();
}
with state
nextMove = whatToDoNext(lastLocationKnown);
nextMove.doIt();
16 June 2015 © Agile Institute 2008-2014 15
encapsulation
• Hiding data & implementation, and also design, type,
cardinality, construction...
• Hidden from whom or what?
• Why?
• Favor strong encapsulation, but reveal what’s needed.
16 June 2015 © Agile Institute 2008-2014 16
cohesion
• How closely the methods in a class are related.
• A class or method is about one thing.
• Business logic and database access are, by the way, two
things!
• Is more cohesion good or bad?
• Why?
16 June 2015 © Agile Institute 2008-2014 17
coupling
• A class or method’s knowledge about another class.
• Good encapsulation reduces coupling.
• Intentional (“good”), and accidental (“bad”).
16 June 2015 © Agile Institute 2008-2014 18
spot the accidental coupling
16 June 2015 © Agile Institute 2008-2014 19
// my first PseudoJava#.Net++Script program…
public Collection<User> findGroup(Group whichGroup) {…}
…
{
…
OrderedList<User> friends =
(OrderedList<User>) findGroup(FRIENDS);
friends.first().message(“Have you tried Cow Clicker?”);
}
16 June 2015 © Agile institute 2008-2014 20
Move
+ void doIt(Board board)
Quick
+ void doIt()
Player
+ takeTurn()
Types of Coupling
DeepThought
+ Move nextMove() Clever
+ void doIt()
Identity
Representational
Inheritance
Subclass
Player
+ void takeTurn()
16 June 2015 © Agile institute 2008-2014 21
Player
+ void takeTurn()
Types of Coupling
DeepThought
+ Move nextMove()
public void takeTurn() {
Move myMove = deepThought.nextMove();
myMove.doIt();
}
Identity
Representational
public Move nextMove() {
if (otherPlayer.lastLocationKnown()) {
return new Clever();
else {
return new Quick();
}
}
Subclass
Polymorphism
• Abstraction & substitutability: A powerful design feature.
• Inheritance.
• Is there a down-side to inheritance?
16 June 2015 © Agile Institute 2008-2014 22
16 June 2015 © Agile Institute 2008-2014 23
(Duplication)
• A negative attribute: We want less of it.
• There are many forms of duplication besides the results of
simple copy/paste/modify.
• Modularity, objects, polymorphism are all used to reduce
this.
• Why is duplication to be avoided?
16 June 2015 © Agile Institute 2008-2014 24
Testability
• The ability to verify the behaviors of an object.
• How would the following support this?
• Good cohesion.
• Only necessary coupling.
• Less duplication.
16 June 2015 © Agile Institute 2008-2014 25
16 June 2015 © Agile Institute 2008-2014 26
Wisdom of
Design Patterns
16 June 2015 © Agile institute 2008-2014 27
Stream
BinaryStream
(Subclassing for Specialization)
CharacterStream
EncryptedCharacterStream CompressedCharacterStream
EncryptedBinaryStreamStream
EncryptedNetworkCharacterStrea
m
EncryptedFilesystemCharacterStream
16 June 2015 © Agile institute 2008-2014 28
Stream
1. Favor object (instance) delegation over class inheritance
Mode
Binary Character
Device
Network Filesystem
Stream
StreamDecorator
EncryptedStream CompressedStrea
m
Psychi
16 June 2015 © Agile institute 2008-2014 29
Stream
2. Design to types, not implementations.
Mode
Binary Character
Device
Network Filesystem Psychi
16 June 2015 © Agile institute 2008-2014 30
Stream
3. Encapsulate any variation.
Mode
Binary Character
Device
Network Filesystem Psychi
16 June 2015 © Agile institute 2008-2014 31
4. Design objects for their primary use,
then design how to build the object graph.
Move
+ void doIt(Board board)
Quick
+ void doIt()
Player
+ takeTurn()
DeepThought
+ Move nextMove() Clever
+ void doIt()
Player
+ void takeTurn()
Use
Construction
16 June 2015 © Agile Institute 2008-2014 32
16 June 2015 © Agile Institute 2008-2014 33
Single Responsibility Principle.
Open-Closed Principle.
Liskov Substitution Principle.
Interface Segregation Principle.
Dependency Inversion Principle.
16 June 2015 © Agile Institute 2008-2014 34
emergence
16 June 2015 © Agile Institute 2008-2014 35
Developer’s “Oath of Athens”
I vow to
leave the
code as
good as I
found it,
or better!
16 June 2015 © Agile Institute 2008-2014 36
Runs all the tests.
Expresses every idea required.
Says everything once and only once.
Has no superfluous parts.
Kent Beck’s Four Rules of Simple Design
16 June 2015 © Agile Institute 2008-2014 37
Relentless Refactoring
16 June 2015 © Agile Institute 2008-2014 38
allowing emergence to occur
• We follow simple rules and practices with dedication and
effort.
• We keep pragmatic knowledge fresh and let go of any
obsolete opinions.
• We pay attention to quality craftsmanship whether building
the “big picture” or the fine details.
16 June 2015 © Agile Institute 2008-2014 39
16 June 2015 © Agile Institute 2008-2014 40
16 June 2015 © Agile Institute 2008-2014 41
16 June 2015 © Agile Institute 2008-2014 42
Rob.Myers@agileInstitute.com
http://PowersOfTwo.agileInstitute.com/
@agilecoach
summary of practices that enable
emergent design
• Relentless Refactoring: We design incrementally, so the design is always very
good given the current known functionality and the amount of effort expended. We
take very rapid, but careful, baby-steps. We don’t overdesign for the far-flung future.
This leaves us always with an adaptable (soft!) software system.
• Simple Design: We acknowledge that clarity and malleability are at the heart of all
good software design strategies.
• TDD/BDD: We write new functionality by considering, and writing, a simple script of
conditions & expectations (inputs & outputs) before implementing the solution to that
specification. This greatly reduces defects, and provides a fast-acting safety-net,
allowing us to refactor with confidence.
• Collaborative Accountability: We allow knowledge, architectural & design skills,
and responsibilities to propagate and improve. Any code can be altered by any
teammate. This is implemented using other essential Agile engineering practices such
as Collective Code Ownership, Continuous Integration, Pair Programming, Sitting
Together, Continuous Learning, and Sustainable Pace.
16 June 2015 © Agile Institute 2008-2014 43
summary of
emergent design properties
• By testing behaviors and interactions in isolation, we test all complex
behaviors without creating a slow, unmaintainable suite of tests.
• Small objects that handle what they know, and delegate when
necessary, allow us to create very flexible and valuable functionality.
• The safety-net of fast regression tests allows us to continuously
improve design (refactor) in tiny steps, and reshape it to introduce
new behavioral variations without disruption.
• There is no hierarchy of important/unimportant code. The behavior
and design we are currently adding or changing is where we apply our
energy and attention.
• Our teams thrive on collaboration, continuous learning, disciplined
effort, dedication to quality, mutual trust, and tasty snacks.
16 June 2015 © Agile Institute 2008-2014 44

More Related Content

What's hot

Continuous Testing: Preparing for DevOps
Continuous Testing: Preparing for DevOpsContinuous Testing: Preparing for DevOps
Continuous Testing: Preparing for DevOpsSTePINForum
 
7 steps to pragmatic mobile testing
7 steps to pragmatic mobile testing7 steps to pragmatic mobile testing
7 steps to pragmatic mobile testingSOASTA
 
PdxDevOps presentation - 2015/08/17
PdxDevOps presentation - 2015/08/17PdxDevOps presentation - 2015/08/17
PdxDevOps presentation - 2015/08/17Rex Addiscentis
 
Assessing Agile Engineering Practices
Assessing Agile Engineering PracticesAssessing Agile Engineering Practices
Assessing Agile Engineering PracticesTechWell
 
The Four Hats of Load and Performance Testing with special guest Mentora
The Four Hats of Load and Performance Testing with special guest MentoraThe Four Hats of Load and Performance Testing with special guest Mentora
The Four Hats of Load and Performance Testing with special guest MentoraSOASTA
 
Secrets to Realistic Load Testing
Secrets to Realistic Load TestingSecrets to Realistic Load Testing
Secrets to Realistic Load TestingSOASTA
 
The Agile and Open Source Way (AgileTour Brussels)
The Agile and Open Source Way (AgileTour Brussels)The Agile and Open Source Way (AgileTour Brussels)
The Agile and Open Source Way (AgileTour Brussels)Alexis Monville
 
DOES16 London - Chris Jackson - Disrupting an Enterprise from the Inside
DOES16 London -  Chris Jackson - Disrupting an Enterprise from the InsideDOES16 London -  Chris Jackson - Disrupting an Enterprise from the Inside
DOES16 London - Chris Jackson - Disrupting an Enterprise from the InsideGene Kim
 

What's hot (8)

Continuous Testing: Preparing for DevOps
Continuous Testing: Preparing for DevOpsContinuous Testing: Preparing for DevOps
Continuous Testing: Preparing for DevOps
 
7 steps to pragmatic mobile testing
7 steps to pragmatic mobile testing7 steps to pragmatic mobile testing
7 steps to pragmatic mobile testing
 
PdxDevOps presentation - 2015/08/17
PdxDevOps presentation - 2015/08/17PdxDevOps presentation - 2015/08/17
PdxDevOps presentation - 2015/08/17
 
Assessing Agile Engineering Practices
Assessing Agile Engineering PracticesAssessing Agile Engineering Practices
Assessing Agile Engineering Practices
 
The Four Hats of Load and Performance Testing with special guest Mentora
The Four Hats of Load and Performance Testing with special guest MentoraThe Four Hats of Load and Performance Testing with special guest Mentora
The Four Hats of Load and Performance Testing with special guest Mentora
 
Secrets to Realistic Load Testing
Secrets to Realistic Load TestingSecrets to Realistic Load Testing
Secrets to Realistic Load Testing
 
The Agile and Open Source Way (AgileTour Brussels)
The Agile and Open Source Way (AgileTour Brussels)The Agile and Open Source Way (AgileTour Brussels)
The Agile and Open Source Way (AgileTour Brussels)
 
DOES16 London - Chris Jackson - Disrupting an Enterprise from the Inside
DOES16 London -  Chris Jackson - Disrupting an Enterprise from the InsideDOES16 London -  Chris Jackson - Disrupting an Enterprise from the Inside
DOES16 London - Chris Jackson - Disrupting an Enterprise from the Inside
 

Viewers also liked

The Coming Mobile Wearable World
The Coming Mobile Wearable WorldThe Coming Mobile Wearable World
The Coming Mobile Wearable WorldTechWell
 
The Changing Face of Test Management in an Agile World
The Changing Face of Test Management in an Agile WorldThe Changing Face of Test Management in an Agile World
The Changing Face of Test Management in an Agile WorldTechWell
 
Continuous Mobile Testing for Critical Business Apps
Continuous Mobile Testing for Critical Business AppsContinuous Mobile Testing for Critical Business Apps
Continuous Mobile Testing for Critical Business AppsTechWell
 
Manage a Complex Test Effort with Lean and Kanban
Manage a Complex Test Effort with Lean and KanbanManage a Complex Test Effort with Lean and Kanban
Manage a Complex Test Effort with Lean and KanbanTechWell
 
Avoiding Over Design and Under Design
Avoiding Over Design and Under DesignAvoiding Over Design and Under Design
Avoiding Over Design and Under DesignTechWell
 
Managing Technological Diversity: Avoid Boiling the Ocean
Managing Technological Diversity: Avoid Boiling the OceanManaging Technological Diversity: Avoid Boiling the Ocean
Managing Technological Diversity: Avoid Boiling the OceanTechWell
 
The Magic of Assumptions
The Magic of AssumptionsThe Magic of Assumptions
The Magic of AssumptionsTechWell
 
When Testers Feel Left Out in the Cold
When Testers Feel Left Out in the ColdWhen Testers Feel Left Out in the Cold
When Testers Feel Left Out in the ColdTechWell
 
STAREAST 2015 Lightning Strikes the Keynotes
STAREAST 2015 Lightning Strikes the KeynotesSTAREAST 2015 Lightning Strikes the Keynotes
STAREAST 2015 Lightning Strikes the KeynotesTechWell
 
Blunders in Test Automation
Blunders in Test AutomationBlunders in Test Automation
Blunders in Test AutomationTechWell
 
Servant Leadership: It’s Not All It’s Cracked Up to Be
Servant Leadership: It’s Not All It’s Cracked Up to BeServant Leadership: It’s Not All It’s Cracked Up to Be
Servant Leadership: It’s Not All It’s Cracked Up to BeTechWell
 
Unleashing the Creative Mind of the Test Engineer
Unleashing the Creative Mind of the Test EngineerUnleashing the Creative Mind of the Test Engineer
Unleashing the Creative Mind of the Test EngineerTechWell
 
Continuous Testing in the Cloud
Continuous Testing in the CloudContinuous Testing in the Cloud
Continuous Testing in the CloudTechWell
 
Data-Driven Software Testing: The New, Lean Approach to Quality
Data-Driven Software Testing: The New, Lean Approach to QualityData-Driven Software Testing: The New, Lean Approach to Quality
Data-Driven Software Testing: The New, Lean Approach to QualityTechWell
 
Automating End-to-End Business Scenario Testing
Automating End-to-End Business Scenario TestingAutomating End-to-End Business Scenario Testing
Automating End-to-End Business Scenario TestingTechWell
 

Viewers also liked (15)

The Coming Mobile Wearable World
The Coming Mobile Wearable WorldThe Coming Mobile Wearable World
The Coming Mobile Wearable World
 
The Changing Face of Test Management in an Agile World
The Changing Face of Test Management in an Agile WorldThe Changing Face of Test Management in an Agile World
The Changing Face of Test Management in an Agile World
 
Continuous Mobile Testing for Critical Business Apps
Continuous Mobile Testing for Critical Business AppsContinuous Mobile Testing for Critical Business Apps
Continuous Mobile Testing for Critical Business Apps
 
Manage a Complex Test Effort with Lean and Kanban
Manage a Complex Test Effort with Lean and KanbanManage a Complex Test Effort with Lean and Kanban
Manage a Complex Test Effort with Lean and Kanban
 
Avoiding Over Design and Under Design
Avoiding Over Design and Under DesignAvoiding Over Design and Under Design
Avoiding Over Design and Under Design
 
Managing Technological Diversity: Avoid Boiling the Ocean
Managing Technological Diversity: Avoid Boiling the OceanManaging Technological Diversity: Avoid Boiling the Ocean
Managing Technological Diversity: Avoid Boiling the Ocean
 
The Magic of Assumptions
The Magic of AssumptionsThe Magic of Assumptions
The Magic of Assumptions
 
When Testers Feel Left Out in the Cold
When Testers Feel Left Out in the ColdWhen Testers Feel Left Out in the Cold
When Testers Feel Left Out in the Cold
 
STAREAST 2015 Lightning Strikes the Keynotes
STAREAST 2015 Lightning Strikes the KeynotesSTAREAST 2015 Lightning Strikes the Keynotes
STAREAST 2015 Lightning Strikes the Keynotes
 
Blunders in Test Automation
Blunders in Test AutomationBlunders in Test Automation
Blunders in Test Automation
 
Servant Leadership: It’s Not All It’s Cracked Up to Be
Servant Leadership: It’s Not All It’s Cracked Up to BeServant Leadership: It’s Not All It’s Cracked Up to Be
Servant Leadership: It’s Not All It’s Cracked Up to Be
 
Unleashing the Creative Mind of the Test Engineer
Unleashing the Creative Mind of the Test EngineerUnleashing the Creative Mind of the Test Engineer
Unleashing the Creative Mind of the Test Engineer
 
Continuous Testing in the Cloud
Continuous Testing in the CloudContinuous Testing in the Cloud
Continuous Testing in the Cloud
 
Data-Driven Software Testing: The New, Lean Approach to Quality
Data-Driven Software Testing: The New, Lean Approach to QualityData-Driven Software Testing: The New, Lean Approach to Quality
Data-Driven Software Testing: The New, Lean Approach to Quality
 
Automating End-to-End Business Scenario Testing
Automating End-to-End Business Scenario TestingAutomating End-to-End Business Scenario Testing
Automating End-to-End Business Scenario Testing
 

Similar to Emergent Design: History, Concepts, and Principles

Is Being Agile a Good Thing?
Is Being Agile a Good Thing?Is Being Agile a Good Thing?
Is Being Agile a Good Thing?Alan Hood
 
Continuous Testing in DevOps
Continuous Testing in DevOpsContinuous Testing in DevOps
Continuous Testing in DevOpsTechWell
 
Assessing the business value of Agile Engineering Practices
Assessing the business value of Agile Engineering PracticesAssessing the business value of Agile Engineering Practices
Assessing the business value of Agile Engineering PracticesRob Myers
 
Devops Intro - Devops for Unicorns & DevOps for Horses
Devops Intro - Devops for Unicorns & DevOps for HorsesDevops Intro - Devops for Unicorns & DevOps for Horses
Devops Intro - Devops for Unicorns & DevOps for HorsesBoonNam Goh
 
NUS-ISS Learning Day 2018- Dev Ops intro -Devops for unicorns and Devops for...
NUS-ISS Learning Day 2018- Dev Ops intro  -Devops for unicorns and Devops for...NUS-ISS Learning Day 2018- Dev Ops intro  -Devops for unicorns and Devops for...
NUS-ISS Learning Day 2018- Dev Ops intro -Devops for unicorns and Devops for...NUS-ISS
 
ANIn Chennai March 2024 |Oxygenating AI ecosystem with Agility by Gowtham Bal...
ANIn Chennai March 2024 |Oxygenating AI ecosystem with Agility by Gowtham Bal...ANIn Chennai March 2024 |Oxygenating AI ecosystem with Agility by Gowtham Bal...
ANIn Chennai March 2024 |Oxygenating AI ecosystem with Agility by Gowtham Bal...AgileNetwork
 
Microservices - Scaling Development and Service
Microservices - Scaling Development and ServiceMicroservices - Scaling Development and Service
Microservices - Scaling Development and ServicePaulo Gaspar
 
Soasta | CloudBees webinar 11/12/2015
Soasta | CloudBees webinar 11/12/2015Soasta | CloudBees webinar 11/12/2015
Soasta | CloudBees webinar 11/12/2015SOASTA
 
Cross Platform Angular 2 and TypeScript Development
Cross Platform Angular 2 and TypeScript DevelopmentCross Platform Angular 2 and TypeScript Development
Cross Platform Angular 2 and TypeScript DevelopmentJeremy Likness
 
Sd times-june-24-2015
Sd times-june-24-2015Sd times-june-24-2015
Sd times-june-24-2015Dan Boutin
 
NUS-ISS Learning Day 2015 - Project Management - May the Agility be with You
NUS-ISS Learning Day 2015 - Project Management - May the Agility be with YouNUS-ISS Learning Day 2015 - Project Management - May the Agility be with You
NUS-ISS Learning Day 2015 - Project Management - May the Agility be with YouNUS-ISS
 
WSO2Con USA 2015: Jump-Starting Middleware Services
WSO2Con USA 2015: Jump-Starting Middleware ServicesWSO2Con USA 2015: Jump-Starting Middleware Services
WSO2Con USA 2015: Jump-Starting Middleware ServicesWSO2
 
DevOps State of the Union 2015
DevOps State of the Union 2015DevOps State of the Union 2015
DevOps State of the Union 2015Ernest Mueller
 
How do you agile your global team to contribute to openstack
How do you agile your global team to contribute to openstackHow do you agile your global team to contribute to openstack
How do you agile your global team to contribute to openstackAlexis Monville
 
Getting Started With MBSE
Getting Started With MBSEGetting Started With MBSE
Getting Started With MBSETaylorDuffy11
 
A Reference Architecture to Enable Visibility and Traceability across the Ent...
A Reference Architecture to Enable Visibility and Traceability across the Ent...A Reference Architecture to Enable Visibility and Traceability across the Ent...
A Reference Architecture to Enable Visibility and Traceability across the Ent...CollabNet
 

Similar to Emergent Design: History, Concepts, and Principles (20)

Is Being Agile a Good Thing?
Is Being Agile a Good Thing?Is Being Agile a Good Thing?
Is Being Agile a Good Thing?
 
Continuous Testing in DevOps
Continuous Testing in DevOpsContinuous Testing in DevOps
Continuous Testing in DevOps
 
Assessing the business value of Agile Engineering Practices
Assessing the business value of Agile Engineering PracticesAssessing the business value of Agile Engineering Practices
Assessing the business value of Agile Engineering Practices
 
Orchestration, the conductor's score
Orchestration, the conductor's scoreOrchestration, the conductor's score
Orchestration, the conductor's score
 
Devops Intro - Devops for Unicorns & DevOps for Horses
Devops Intro - Devops for Unicorns & DevOps for HorsesDevops Intro - Devops for Unicorns & DevOps for Horses
Devops Intro - Devops for Unicorns & DevOps for Horses
 
NUS-ISS Learning Day 2018- Dev Ops intro -Devops for unicorns and Devops for...
NUS-ISS Learning Day 2018- Dev Ops intro  -Devops for unicorns and Devops for...NUS-ISS Learning Day 2018- Dev Ops intro  -Devops for unicorns and Devops for...
NUS-ISS Learning Day 2018- Dev Ops intro -Devops for unicorns and Devops for...
 
DevTestOps
DevTestOpsDevTestOps
DevTestOps
 
ANIn Chennai March 2024 |Oxygenating AI ecosystem with Agility by Gowtham Bal...
ANIn Chennai March 2024 |Oxygenating AI ecosystem with Agility by Gowtham Bal...ANIn Chennai March 2024 |Oxygenating AI ecosystem with Agility by Gowtham Bal...
ANIn Chennai March 2024 |Oxygenating AI ecosystem with Agility by Gowtham Bal...
 
Microservices - Scaling Development and Service
Microservices - Scaling Development and ServiceMicroservices - Scaling Development and Service
Microservices - Scaling Development and Service
 
Soasta | CloudBees webinar 11/12/2015
Soasta | CloudBees webinar 11/12/2015Soasta | CloudBees webinar 11/12/2015
Soasta | CloudBees webinar 11/12/2015
 
Cross Platform Angular 2 and TypeScript Development
Cross Platform Angular 2 and TypeScript DevelopmentCross Platform Angular 2 and TypeScript Development
Cross Platform Angular 2 and TypeScript Development
 
Sd times-june-24-2015
Sd times-june-24-2015Sd times-june-24-2015
Sd times-june-24-2015
 
NUS-ISS Learning Day 2015 - Project Management - May the Agility be with You
NUS-ISS Learning Day 2015 - Project Management - May the Agility be with YouNUS-ISS Learning Day 2015 - Project Management - May the Agility be with You
NUS-ISS Learning Day 2015 - Project Management - May the Agility be with You
 
WSO2Con USA 2015: Jump-Starting Middleware Services
WSO2Con USA 2015: Jump-Starting Middleware ServicesWSO2Con USA 2015: Jump-Starting Middleware Services
WSO2Con USA 2015: Jump-Starting Middleware Services
 
DevOps State of the Union 2015
DevOps State of the Union 2015DevOps State of the Union 2015
DevOps State of the Union 2015
 
Enterprise Agile at Lockheed Martin - 4th February 2014
Enterprise Agile at Lockheed Martin - 4th February 2014Enterprise Agile at Lockheed Martin - 4th February 2014
Enterprise Agile at Lockheed Martin - 4th February 2014
 
How do you agile your global team to contribute to openstack
How do you agile your global team to contribute to openstackHow do you agile your global team to contribute to openstack
How do you agile your global team to contribute to openstack
 
Getting Started With MBSE
Getting Started With MBSEGetting Started With MBSE
Getting Started With MBSE
 
A Reference Architecture to Enable Visibility and Traceability across the Ent...
A Reference Architecture to Enable Visibility and Traceability across the Ent...A Reference Architecture to Enable Visibility and Traceability across the Ent...
A Reference Architecture to Enable Visibility and Traceability across the Ent...
 
DevOps Culture and Principles
DevOps Culture and PrinciplesDevOps Culture and Principles
DevOps Culture and Principles
 

More from TechWell

Failing and Recovering
Failing and RecoveringFailing and Recovering
Failing and RecoveringTechWell
 
Instill a DevOps Testing Culture in Your Team and Organization
Instill a DevOps Testing Culture in Your Team and Organization Instill a DevOps Testing Culture in Your Team and Organization
Instill a DevOps Testing Culture in Your Team and Organization TechWell
 
System-Level Test Automation: Ensuring a Good Start
System-Level Test Automation: Ensuring a Good StartSystem-Level Test Automation: Ensuring a Good Start
System-Level Test Automation: Ensuring a Good StartTechWell
 
Build Your Mobile App Quality and Test Strategy
Build Your Mobile App Quality and Test StrategyBuild Your Mobile App Quality and Test Strategy
Build Your Mobile App Quality and Test StrategyTechWell
 
Testing Transformation: The Art and Science for Success
Testing Transformation: The Art and Science for SuccessTesting Transformation: The Art and Science for Success
Testing Transformation: The Art and Science for SuccessTechWell
 
Implement BDD with Cucumber and SpecFlow
Implement BDD with Cucumber and SpecFlowImplement BDD with Cucumber and SpecFlow
Implement BDD with Cucumber and SpecFlowTechWell
 
Develop WebDriver Automated Tests—and Keep Your Sanity
Develop WebDriver Automated Tests—and Keep Your SanityDevelop WebDriver Automated Tests—and Keep Your Sanity
Develop WebDriver Automated Tests—and Keep Your SanityTechWell
 
Eliminate Cloud Waste with a Holistic DevOps Strategy
Eliminate Cloud Waste with a Holistic DevOps StrategyEliminate Cloud Waste with a Holistic DevOps Strategy
Eliminate Cloud Waste with a Holistic DevOps StrategyTechWell
 
Transform Test Organizations for the New World of DevOps
Transform Test Organizations for the New World of DevOpsTransform Test Organizations for the New World of DevOps
Transform Test Organizations for the New World of DevOpsTechWell
 
The Fourth Constraint in Project Delivery—Leadership
The Fourth Constraint in Project Delivery—LeadershipThe Fourth Constraint in Project Delivery—Leadership
The Fourth Constraint in Project Delivery—LeadershipTechWell
 
Resolve the Contradiction of Specialists within Agile Teams
Resolve the Contradiction of Specialists within Agile TeamsResolve the Contradiction of Specialists within Agile Teams
Resolve the Contradiction of Specialists within Agile TeamsTechWell
 
Pin the Tail on the Metric: A Field-Tested Agile Game
Pin the Tail on the Metric: A Field-Tested Agile GamePin the Tail on the Metric: A Field-Tested Agile Game
Pin the Tail on the Metric: A Field-Tested Agile GameTechWell
 
Agile Performance Holarchy (APH)—A Model for Scaling Agile Teams
Agile Performance Holarchy (APH)—A Model for Scaling Agile TeamsAgile Performance Holarchy (APH)—A Model for Scaling Agile Teams
Agile Performance Holarchy (APH)—A Model for Scaling Agile TeamsTechWell
 
A Business-First Approach to DevOps Implementation
A Business-First Approach to DevOps ImplementationA Business-First Approach to DevOps Implementation
A Business-First Approach to DevOps ImplementationTechWell
 
Databases in a Continuous Integration/Delivery Process
Databases in a Continuous Integration/Delivery ProcessDatabases in a Continuous Integration/Delivery Process
Databases in a Continuous Integration/Delivery ProcessTechWell
 
Mobile Testing: What—and What Not—to Automate
Mobile Testing: What—and What Not—to AutomateMobile Testing: What—and What Not—to Automate
Mobile Testing: What—and What Not—to AutomateTechWell
 
Cultural Intelligence: A Key Skill for Success
Cultural Intelligence: A Key Skill for SuccessCultural Intelligence: A Key Skill for Success
Cultural Intelligence: A Key Skill for SuccessTechWell
 
Turn the Lights On: A Power Utility Company's Agile Transformation
Turn the Lights On: A Power Utility Company's Agile TransformationTurn the Lights On: A Power Utility Company's Agile Transformation
Turn the Lights On: A Power Utility Company's Agile TransformationTechWell
 
Scale: The Most Hyped Term in Agile Development Today
Scale: The Most Hyped Term in Agile Development TodayScale: The Most Hyped Term in Agile Development Today
Scale: The Most Hyped Term in Agile Development TodayTechWell
 

More from TechWell (20)

Failing and Recovering
Failing and RecoveringFailing and Recovering
Failing and Recovering
 
Instill a DevOps Testing Culture in Your Team and Organization
Instill a DevOps Testing Culture in Your Team and Organization Instill a DevOps Testing Culture in Your Team and Organization
Instill a DevOps Testing Culture in Your Team and Organization
 
System-Level Test Automation: Ensuring a Good Start
System-Level Test Automation: Ensuring a Good StartSystem-Level Test Automation: Ensuring a Good Start
System-Level Test Automation: Ensuring a Good Start
 
Build Your Mobile App Quality and Test Strategy
Build Your Mobile App Quality and Test StrategyBuild Your Mobile App Quality and Test Strategy
Build Your Mobile App Quality and Test Strategy
 
Testing Transformation: The Art and Science for Success
Testing Transformation: The Art and Science for SuccessTesting Transformation: The Art and Science for Success
Testing Transformation: The Art and Science for Success
 
Implement BDD with Cucumber and SpecFlow
Implement BDD with Cucumber and SpecFlowImplement BDD with Cucumber and SpecFlow
Implement BDD with Cucumber and SpecFlow
 
Develop WebDriver Automated Tests—and Keep Your Sanity
Develop WebDriver Automated Tests—and Keep Your SanityDevelop WebDriver Automated Tests—and Keep Your Sanity
Develop WebDriver Automated Tests—and Keep Your Sanity
 
Ma 15
Ma 15Ma 15
Ma 15
 
Eliminate Cloud Waste with a Holistic DevOps Strategy
Eliminate Cloud Waste with a Holistic DevOps StrategyEliminate Cloud Waste with a Holistic DevOps Strategy
Eliminate Cloud Waste with a Holistic DevOps Strategy
 
Transform Test Organizations for the New World of DevOps
Transform Test Organizations for the New World of DevOpsTransform Test Organizations for the New World of DevOps
Transform Test Organizations for the New World of DevOps
 
The Fourth Constraint in Project Delivery—Leadership
The Fourth Constraint in Project Delivery—LeadershipThe Fourth Constraint in Project Delivery—Leadership
The Fourth Constraint in Project Delivery—Leadership
 
Resolve the Contradiction of Specialists within Agile Teams
Resolve the Contradiction of Specialists within Agile TeamsResolve the Contradiction of Specialists within Agile Teams
Resolve the Contradiction of Specialists within Agile Teams
 
Pin the Tail on the Metric: A Field-Tested Agile Game
Pin the Tail on the Metric: A Field-Tested Agile GamePin the Tail on the Metric: A Field-Tested Agile Game
Pin the Tail on the Metric: A Field-Tested Agile Game
 
Agile Performance Holarchy (APH)—A Model for Scaling Agile Teams
Agile Performance Holarchy (APH)—A Model for Scaling Agile TeamsAgile Performance Holarchy (APH)—A Model for Scaling Agile Teams
Agile Performance Holarchy (APH)—A Model for Scaling Agile Teams
 
A Business-First Approach to DevOps Implementation
A Business-First Approach to DevOps ImplementationA Business-First Approach to DevOps Implementation
A Business-First Approach to DevOps Implementation
 
Databases in a Continuous Integration/Delivery Process
Databases in a Continuous Integration/Delivery ProcessDatabases in a Continuous Integration/Delivery Process
Databases in a Continuous Integration/Delivery Process
 
Mobile Testing: What—and What Not—to Automate
Mobile Testing: What—and What Not—to AutomateMobile Testing: What—and What Not—to Automate
Mobile Testing: What—and What Not—to Automate
 
Cultural Intelligence: A Key Skill for Success
Cultural Intelligence: A Key Skill for SuccessCultural Intelligence: A Key Skill for Success
Cultural Intelligence: A Key Skill for Success
 
Turn the Lights On: A Power Utility Company's Agile Transformation
Turn the Lights On: A Power Utility Company's Agile TransformationTurn the Lights On: A Power Utility Company's Agile Transformation
Turn the Lights On: A Power Utility Company's Agile Transformation
 
Scale: The Most Hyped Term in Agile Development Today
Scale: The Most Hyped Term in Agile Development TodayScale: The Most Hyped Term in Agile Development Today
Scale: The Most Hyped Term in Agile Development Today
 

Recently uploaded

Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number SystemsJheuzeDellosa
 
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationkaushalgiri8080
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - InfographicHr365.us smith
 
What are the features of Vehicle Tracking System?
What are the features of Vehicle Tracking System?What are the features of Vehicle Tracking System?
What are the features of Vehicle Tracking System?Watsoo Telematics
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
buds n tech IT solutions
buds n  tech IT                solutionsbuds n  tech IT                solutions
buds n tech IT solutionsmonugehlot87
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyFrank van der Linden
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptkotipi9215
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 

Recently uploaded (20)

Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number Systems
 
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanation
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - Infographic
 
What are the features of Vehicle Tracking System?
What are the features of Vehicle Tracking System?What are the features of Vehicle Tracking System?
What are the features of Vehicle Tracking System?
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
buds n tech IT solutions
buds n  tech IT                solutionsbuds n  tech IT                solutions
buds n tech IT solutions
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The Ugly
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.ppt
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 

Emergent Design: History, Concepts, and Principles

  • 1. 16 June 2015 © Agile Institute 2008-2014 1
  • 2. 16 June 2015 © Agile Institute 2008-2014 2 Emergent Design History, Concepts, & Principles Rob Myers Agile Development Practices East 13 November 2014
  • 3. a definition of emergence 16 June 2015 © Agile Institute 2008-2014 3 …a process whereby larger entities, patterns, and regularities arise through interactions among smaller or simpler entities that themselves do not exhibit such properties. -- http://en.wikipedia.org/wiki/Emergence
  • 4. 16 June 2015 © Agile Institute 2008-2014 4
  • 5. 16 June 2015 © Agile Institute 2008-2014 5
  • 6. 16 June 2015 © Agile Institute 2008-2014 6
  • 7. 16 June 2015 © Agile Institute 2008-2014 7
  • 8. 16 June 2015 © Agile Institute 2008-2014 8
  • 9. 16 June 2015 © Agile Institute 2008-2014 9 "Termite Cathedral DSC03570” taken by w:User:Yewenyi - [1]. Licensed under Creative Commons Attribution-Share Alike 3.0 via Wikimedia Commons http://commons.wikimedia.org/wiki/
  • 10. 16 June 2015 © Agile Institute 2008-2014 10
  • 11. 16 June 2015 © Agile Institute 2008-2014 11
  • 12. emergent properties • Spontaneous order arises from chaos. • From simple rules, complex behaviors manifest. • Tiny steps, repeated many times, perhaps recursively. • Same “rules” apply at macro/micro levels; same “paths” exist to/from another level. • Require a rich supply of “food”: time, energy, RAM… 16 June 2015 © Agile Institute 2008-2014 12
  • 13. What would “Emergent Design” mean? A software design which • solves the problems or implements the business behaviors requested, • emerged over time, • emerged from simple rules and trusted practices, • is elegant and easy to maintain, • was not considered beforehand, • was discovered along the way! 16 June 2015 © Agile Institute 2008-2014 13
  • 14. 16 June 2015 © Agile Institute 2008-2014 14 A Brief History of Object Oriented Design
  • 15. object oriented programming • Modular programming taken further: Keep data together with operations that commonly apply to that data. • Allows us to create types & abstractions useful in our domain. • Replaces structure, e.g. if (lastLocationKnown) { doSomethingClever(); } else { doSomethingQuick(); } with state nextMove = whatToDoNext(lastLocationKnown); nextMove.doIt(); 16 June 2015 © Agile Institute 2008-2014 15
  • 16. encapsulation • Hiding data & implementation, and also design, type, cardinality, construction... • Hidden from whom or what? • Why? • Favor strong encapsulation, but reveal what’s needed. 16 June 2015 © Agile Institute 2008-2014 16
  • 17. cohesion • How closely the methods in a class are related. • A class or method is about one thing. • Business logic and database access are, by the way, two things! • Is more cohesion good or bad? • Why? 16 June 2015 © Agile Institute 2008-2014 17
  • 18. coupling • A class or method’s knowledge about another class. • Good encapsulation reduces coupling. • Intentional (“good”), and accidental (“bad”). 16 June 2015 © Agile Institute 2008-2014 18
  • 19. spot the accidental coupling 16 June 2015 © Agile Institute 2008-2014 19 // my first PseudoJava#.Net++Script program… public Collection<User> findGroup(Group whichGroup) {…} … { … OrderedList<User> friends = (OrderedList<User>) findGroup(FRIENDS); friends.first().message(“Have you tried Cow Clicker?”); }
  • 20. 16 June 2015 © Agile institute 2008-2014 20 Move + void doIt(Board board) Quick + void doIt() Player + takeTurn() Types of Coupling DeepThought + Move nextMove() Clever + void doIt() Identity Representational Inheritance Subclass Player + void takeTurn()
  • 21. 16 June 2015 © Agile institute 2008-2014 21 Player + void takeTurn() Types of Coupling DeepThought + Move nextMove() public void takeTurn() { Move myMove = deepThought.nextMove(); myMove.doIt(); } Identity Representational public Move nextMove() { if (otherPlayer.lastLocationKnown()) { return new Clever(); else { return new Quick(); } } Subclass
  • 22. Polymorphism • Abstraction & substitutability: A powerful design feature. • Inheritance. • Is there a down-side to inheritance? 16 June 2015 © Agile Institute 2008-2014 22
  • 23. 16 June 2015 © Agile Institute 2008-2014 23
  • 24. (Duplication) • A negative attribute: We want less of it. • There are many forms of duplication besides the results of simple copy/paste/modify. • Modularity, objects, polymorphism are all used to reduce this. • Why is duplication to be avoided? 16 June 2015 © Agile Institute 2008-2014 24
  • 25. Testability • The ability to verify the behaviors of an object. • How would the following support this? • Good cohesion. • Only necessary coupling. • Less duplication. 16 June 2015 © Agile Institute 2008-2014 25
  • 26. 16 June 2015 © Agile Institute 2008-2014 26 Wisdom of Design Patterns
  • 27. 16 June 2015 © Agile institute 2008-2014 27 Stream BinaryStream (Subclassing for Specialization) CharacterStream EncryptedCharacterStream CompressedCharacterStream EncryptedBinaryStreamStream EncryptedNetworkCharacterStrea m EncryptedFilesystemCharacterStream
  • 28. 16 June 2015 © Agile institute 2008-2014 28 Stream 1. Favor object (instance) delegation over class inheritance Mode Binary Character Device Network Filesystem Stream StreamDecorator EncryptedStream CompressedStrea m Psychi
  • 29. 16 June 2015 © Agile institute 2008-2014 29 Stream 2. Design to types, not implementations. Mode Binary Character Device Network Filesystem Psychi
  • 30. 16 June 2015 © Agile institute 2008-2014 30 Stream 3. Encapsulate any variation. Mode Binary Character Device Network Filesystem Psychi
  • 31. 16 June 2015 © Agile institute 2008-2014 31 4. Design objects for their primary use, then design how to build the object graph. Move + void doIt(Board board) Quick + void doIt() Player + takeTurn() DeepThought + Move nextMove() Clever + void doIt() Player + void takeTurn() Use Construction
  • 32. 16 June 2015 © Agile Institute 2008-2014 32
  • 33. 16 June 2015 © Agile Institute 2008-2014 33 Single Responsibility Principle. Open-Closed Principle. Liskov Substitution Principle. Interface Segregation Principle. Dependency Inversion Principle.
  • 34. 16 June 2015 © Agile Institute 2008-2014 34 emergence
  • 35. 16 June 2015 © Agile Institute 2008-2014 35 Developer’s “Oath of Athens” I vow to leave the code as good as I found it, or better!
  • 36. 16 June 2015 © Agile Institute 2008-2014 36 Runs all the tests. Expresses every idea required. Says everything once and only once. Has no superfluous parts. Kent Beck’s Four Rules of Simple Design
  • 37. 16 June 2015 © Agile Institute 2008-2014 37 Relentless Refactoring
  • 38. 16 June 2015 © Agile Institute 2008-2014 38
  • 39. allowing emergence to occur • We follow simple rules and practices with dedication and effort. • We keep pragmatic knowledge fresh and let go of any obsolete opinions. • We pay attention to quality craftsmanship whether building the “big picture” or the fine details. 16 June 2015 © Agile Institute 2008-2014 39
  • 40. 16 June 2015 © Agile Institute 2008-2014 40
  • 41. 16 June 2015 © Agile Institute 2008-2014 41
  • 42. 16 June 2015 © Agile Institute 2008-2014 42 Rob.Myers@agileInstitute.com http://PowersOfTwo.agileInstitute.com/ @agilecoach
  • 43. summary of practices that enable emergent design • Relentless Refactoring: We design incrementally, so the design is always very good given the current known functionality and the amount of effort expended. We take very rapid, but careful, baby-steps. We don’t overdesign for the far-flung future. This leaves us always with an adaptable (soft!) software system. • Simple Design: We acknowledge that clarity and malleability are at the heart of all good software design strategies. • TDD/BDD: We write new functionality by considering, and writing, a simple script of conditions & expectations (inputs & outputs) before implementing the solution to that specification. This greatly reduces defects, and provides a fast-acting safety-net, allowing us to refactor with confidence. • Collaborative Accountability: We allow knowledge, architectural & design skills, and responsibilities to propagate and improve. Any code can be altered by any teammate. This is implemented using other essential Agile engineering practices such as Collective Code Ownership, Continuous Integration, Pair Programming, Sitting Together, Continuous Learning, and Sustainable Pace. 16 June 2015 © Agile Institute 2008-2014 43
  • 44. summary of emergent design properties • By testing behaviors and interactions in isolation, we test all complex behaviors without creating a slow, unmaintainable suite of tests. • Small objects that handle what they know, and delegate when necessary, allow us to create very flexible and valuable functionality. • The safety-net of fast regression tests allows us to continuously improve design (refactor) in tiny steps, and reshape it to introduce new behavioral variations without disruption. • There is no hierarchy of important/unimportant code. The behavior and design we are currently adding or changing is where we apply our energy and attention. • Our teams thrive on collaboration, continuous learning, disciplined effort, dedication to quality, mutual trust, and tasty snacks. 16 June 2015 © Agile Institute 2008-2014 44

Editor's Notes

  1. Be sure to pass out files or have someone establish a read-only share. 25 yrs in the industry Using TDD and coaching XP/Scrum since 1998 Teaching TDD courses since 2001
  2. Fractals of course
  3. Mountains and rivers We tend to find these in nature. We tend to think of them as elegantly beautiful, and either relaxing or fearsome.
  4. snowflakes
  5. Romanesco broccoli
  6. A selfie of the early universe.
  7. Requires energy. Same rules apply at macro/micro level, as well as creating path from micro to macro and back again. From simple rules, complex behaviors arise. Ant hills, termite mounds, wasp nests, fractals, weather patterns, tree growth, rivers, galaxies, and quite possibly the multiverse.
  8. To succeed at this game, you have to trust the practices and the rules. In order to trust, you have to see where they’ve been.
  9. Maintainability, not secrecy. <click>
  10. Maintainability
  11. Maintainable systems should be as decoupled as possible. That does not mean we can have no coupling. Coupling is what makes a system work - object must be able to work together to create the architecture of the application in the first place. We want to understand, control, and simplify the coupling in the system.
  12. Four kinds: Identity Coupling – is when one type is coupled to the fact that another type exists. class WidgetContainer { Widget myWidget; // WidgetContainer is Identity coupled to Widget } Representational Coupling – is when you call a method on a class myWidget.doWidgetStuff(); // This is representational coupling Inheritance Coupling – when have a derivation, what is the coupling of different subclasses to its inheritance hierarchy Subclass Coupling – if the client only knows about Widget (doesn’t know about sub-classes) then there is no subclass coupling, otherwise there is. Not having subclass coupling allows me to change subclasses without affecting the client object using them. WOULD BE GOOD TO INCLUDE PRINCIPLES THAT ALLOWS THIS TO HAPPEN. Maintainable systems should be as decoupled as possible. That does not mean we can have no coupling. Coupling is what makes a system work - object must be able to work together to create the architecture of the application in the first place. We want to understand, control, and simplify the coupling in the system. Here are the four types of coupling we have to deal with (explain them).
  13. The strongest form of coupling.
  14. A Perfectly Good Editing Technique…Not a good DESIGN technique. YOU must clean it up! Two classes have similar interfaces or encapsulate similar concepts.
  15. Use class hierarchy to categorize, not specialize. One level is usually enough. Abstraction, and concrete implementation.
  16. Originally “Design to interfaces” Concrete code delegates to abstractions. Favor Representational coupling over subclass coupling. Increases flexibility! Replacing structural code with runtime state, then behaviors can change at runtime!
  17. Objects encapsulate data and related behavior. Hierarchy encapsulates variation of implementation. Many other things can be encapsulated.
  18. Originally “Design to interfaces” Concrete code delegates to abstractions. Favor Representational coupling over subclass coupling. Increases flexibility! Replacing structural code with runtime state, then behaviors can change at runtime!
  19. SRP: Cohesion OCP: Points to an advanced use of encapsulation and polymorphism. Liskov: Semantic not syntactic. Behavioral inheritance, not literal. CatTigerBengal TigerWhite Bengal Tiger & the Mantecore Confusion Interface Segregation: Relates to cohesion. Using narrow interfaces. Since we’re not really talking about a particular language, essentially narrow type interfaces: few public methods, small objects. DIP: Inversion compared to traditional old structured analysis and decomposition. Top-down doesn’t work, bottom-up creates similar couplings. Decoupling via abstractions where necessary. Layers of abstraction. Design to types, + Encapsulates Variation “up” or “down”. The types you communicate with should make sense for what you are trying to accomplish. And so it goes at every level, and in every direction. This is also the primary legitimate use of Java interfaces, as contracts to be established between client and service.
  20. SRP: Cohesion OCP: Points to an advanced use of encapsulation and polymorphism. Liskov: Semantic not syntactic. Behavioral inheritance, not literal. CatTigerBengal TigerWhite Bengal Tiger & the Mantecore Confusion Interface Segregation: Relates to cohesion. Using narrow interfaces. Since we’re not really talking about a particular language, essentially narrow type interfaces: few public methods, small objects. DIP: Inversion compared to traditional old structured analysis and decomposition. Top-down doesn’t work, bottom-up creates similar couplings. Decoupling via abstractions where necessary. Layers of abstraction. Design to types, + Encapsulates Variation “up” or “down”. The types you communicate with should make sense for what you are trying to accomplish. And so it goes at every level, and in every direction. This is also the primary legitimate use of Java interfaces, as contracts to be established between client and service.
  21. That’s a lot to learn! Learn them at your own pace. In the mean time, we need to keep designs fluid, so they can change. In fact, one very good definition of a good design is a design that can adapt to change: Maintainability and extensibility. So, beyond keeping every possible variation open-closed and decoupled, and yet still readable and maintainable by humans, what can we do? Order arising from chaos in a series of tiny steps, resulting in “emergent properties.” Requires energy. Same rules apply at macro/micro level, as well as creating path from micro to macro and back again. From simple rules, complex behaviors arise. Ant hills, termite mounds, wasp nests, fractals, weather patterns, tree growth, rivers, galaxies, and quite possibly the multiverse.
  22. Note what Kent isn’t talking about here: OO! Why? He’s either forgotten, or is assuming, all the prior OO/DP knowledge. In an emergent context, as you work with an OO language with these rules, you will eventually “re-learn” all prior wisdom. It’s easier if you know it, but not impossible if you don’t.
  23. Refactoring IS design!
  24. TDD (pairing doesn’t hurt either)
  25. YOU are the engine of emergence!
  26. Thank you!
  27. Spontaneous order arises from chaos. From simple rules, complex behaviors manifest. Tiny steps, repeated many times, perhaps recursively. Same “rules” apply at macro/micro levels; same “paths” exist to/from another level. Require a rich supply of “food”: time, energy, RAM…