SlideShare ist ein Scribd-Unternehmen logo
1 von 94
Downloaden Sie, um offline zu lesen
ThoughtWorks




       emergent design &
evolutionary architecture
                 NEAL FORD        software architect / meme wrangler



                           ThoughtWorks
              nford@thoughtworks.com
              3003 Summit Boulevard, Atlanta, GA 30319
              www.nealford.com
              www.thoughtworks.com
              memeagora.blogspot.com
http://www.ibm.com/developerworks/java/library/j-eaed1/
     index.html?S_TACT=105AGX02&S_CMP=EDU
                 http://tr.im/nf_ead_all
agenda
things to
  think
  about
emergent   evolutionary
Emergent, a.
[L. emergens, p. pr. of emergere.]

  1. Rising or emerging out of a fluid
     or anything that covers or
     conceals; issuing; coming to light.
     [1913 Webster]
  2. Suddenly appearing; arising
     unexpectedly; calling for
     prompt action; urgent.
      [1913 Webster]
spectrum of design
 "Pure"            Some
                            Agile
Waterfall          DUF




                          Emergent   Cowboy
            BDUF
                           Design    Hacking
big design up front
Project Planning/Estimation

      Requirements


                          Use Cases/
                        Functional Specs


                                              Design
                                           Specifications



                                                           Code




                                                                  Test



                                                                         Fix/Integrate   $
who thought this was a
     good idea?
emergent (hardware)
      design
finding abstractions &
      patterns
Patterns
 nomenclature

    technical patterns
idiomatic patterns
    domain patterns

 patterns describe effective abstractions
abstracting too early
speculation without facts

YAGNI!

business processes change radically and often

how do you know when?

   experience helps

   spike solutions
emergent
  design
“what is software design?
 what             design?”

                      Jack C. Reeves
                 fall 1992, c++ journal

 http://www.developerdotstar.com/mag/articles/reeves_design.html
software “engineering”
“The final goal of any engineering activity is some
type of documentation”

“When the design effort is complete, the design
documentation is turned over to the manufacturing
team.”

what is the design document in software?

the source code
source == design
“...software is cheap to build. It does not qualify as
inexpensive; it is so cheap it is almost free”.
manufacturing == build process
“...software design is easy to create, at least in the
mechanical sense.”
“Given that software designs are relatively easy to
turn out, and essentially free to build, an
unsurprising revelation is that software designs tend
to be incredibly large and complex.”
source == design
“...it is cheaper and simpler to just build the design
and test it than to do anything else.”
“The overwhelming problem with software
development is that everything is part of the design
process.”
“Coding is design, testing and debugging are part of
design, and what we typically call software design is
still part of design.”
“Software may be cheap to build, but it is incredibly
expensive to design.”
emergent design
discovering design in code

finding effective abstractions

   technical abstractions

   problem domain abstractions

ability to harvest idiomatic patterns
things that
  obscure
 emergent
   design
complexity
essential complexity
inherent complexity

accidental complexity
all the externally imposed ways that
software becomes complex

 essential vs. accidental
      complexity
examples
     Hunting
     Season                  EJB / Biztalk



               Field Level
                Security
Essential                             Accidental
technical
! ! ! debt
technical debt
technical debt




Code Base                   effort for
Complexity   principal     new features

                                    interest
negotiating repayment
you must convince someone technical debt
exists...


...start a conversation about repayment



demonstration trumps discussion
convincing metrics
rampant genericness
genericness

“if we build lots of layers for extension, we can
easily build more onto it later”

increases software entropy

accidental complexity

generic obfuscation
emergent design
enablers
test driven design
more about design than testing

design will emerge from tests

atomic understanding of intent

better abstractions

less accidental complexity
perfect number case
       study:
 ∑ of the factors == number
 (not including the number)

  ∑ of the factors - # == #
tdd vs test-after

test after doesn’t expose design flaws as early



tdd forces you to think about every little thing



encourages refactoring what’s not right
refactoring
collective code ownership

fix broken windows whenever you see them

regularly fix obsolescent abstractions

prudently refactor aggressively

code should get stronger with age
refactoring to harvest
      idiomatic     patterns
cyclomatic complexity
  measures complexity of a function

 V(G)= e - n + 2
 V(G) = cyclomatic complexity of G
 e= # edges
 n= # of nodes
start




                       1               if (c1)
                                                         1



                               2


        2       f1()                             3           f2()


                                   4
                                                         4
            3
                                       if (c2)



                           5                         6
nodes

        5       f3()                             6           f4()
edges

                                   7
                                                         8
            7
                                       end
afferent coupling
∑ of how many classes use this class


incoming references

determines what is the “hard, crunchy center”
of your code base

measure with CKJM or other metrics tools
struts 2.x
UIBean evaluateParams()
evaluate.*Params ?
  find . -name "*.java" | xargs grep -l "void evaluate.*Params" > pbcopy


./org/apache/struts2/components/AbstractRemoteCallUIBean.java   ./org/apache/struts2/components/Label.java
./org/apache/struts2/components/Anchor.java                     ./org/apache/struts2/components/ListUIBean.java
./org/apache/struts2/components/Autocompleter.java              ./org/apache/struts2/components/OptionTransferSelect.java




                                                                                                                            !
./org/apache/struts2/components/Checkbox.java                   ./org/apache/struts2/components/Password.java
./org/apache/struts2/components/ComboBox.java                   ./org/apache/struts2/components/Reset.java
./org/apache/struts2/components/DateTimePicker.java             ./org/apache/struts2/components/Select.java
./org/apache/struts2/components/Div.java                        ./org/apache/struts2/components/Submit.java
./org/apache/struts2/components/DoubleListUIBean.java           ./org/apache/struts2/components/TabbedPanel.java
./org/apache/struts2/components/DoubleSelect.java               ./org/apache/struts2/components/table/WebTable.java
./org/apache/struts2/components/File.java                       ./org/apache/struts2/components/TextArea.java
./org/apache/struts2/components/Form.java                       ./org/apache/struts2/components/TextField.java
./org/apache/struts2/components/FormButton.java                 ./org/apache/struts2/components/Token.java
./org/apache/struts2/components/Head.java                       ./org/apache/struts2/components/Tree.java
./org/apache/struts2/components/InputTransferSelect.java        ./org/apache/struts2/components/UIBean.java
                                                                ./org/apache/struts2/components/UpDownSelect.java
fixing parameters
               66 - 9 = 57
                 lines of
                obscuring
               duplication




             22 * 3 = 66
expressiveness
if code is design, readable design matters

complex languages hurt readability

most comments don’t help

   not executable

   always (potentially) out of date
idiomatic “unit of
  work” pattern
without closures (java)
with closures (groovy)
with closures (ruby)
abstraction styles
imperative

   structured / modular

   object-oriented

functional

anti-objects
collaborative diffusion
“The metaphor of objects can go too far by making
us try to create objects that are too much inspired
by the real world. “


“...an antiobject is a kind of object that appears to
essentially do the opposite of what we generally
think the object should be doing.”
architecture
Evolution, n.
[L. evolutio an unrolling: cf. F. ['e]
volution evolution

 1: a process in which something
    passes by degrees to a different
    stage (especially a more
    advanced or mature stage)
application architecture
describes the coarse-grained pieces that
compose an application
framework level
          architecture
when was the last time you downloaded a
single class?

the unit of reuse in java is the library

JSR 277, the java module system...abandonware

JSR 294 (superpackage)...IN JAVA 7!

implemented by ivy & maven
enterprise architecture
concerns itself with how the enterprise as a whole
  (which usually means the applications running
inside a large organization) consumes applications
enterprise architecture
   == city planning
application architecture
   == building plan
extant definitions
“The architecture of a software system (at a
    given point in time) is its organization or
structure of significant components interacting
  through interfaces, those components being
composed of successively smaller components
                 and interfaces.'"

                         post on the XP mail list


      technical definition
"In most successful software projects, the expert
    developers working on that project have a
 shared understanding of the system design. This
  shared understanding is called "architecture."
 This understanding includes how the system is
      divided into components and how the
    components interact through interfaces.'"

         Ralph Johnson, rebutting the original post



          social definition
Architecture is about the
    important stuff.

   Whatever that is.
            Martin Fowler’s definition
Stuff that's hard to
     change later.
           Martin Fowler, in conversation



There should be as little of
  that stuff as possible.
design




architecture
architectural
considerations
politics of architecture
build or buy
business processes are
   not commoditizable
“you can buy this generic business process
software...”
“...we just need to tweak it with a few
customizations”
myth
radically unique across similar businesses
software can provide strategic business
advantage
Dietzler’s Law
for framework X:

  80% of what the user wants is fast & easy

  the next 10% is possible but difficult

  the last 10% is impossible

users want 100% of what they want
standards-based vs.
        standardized
flash-back to java web development before j2ee

standards helped developers tremendously...

...but vendors hate it

the price of commodity software quickly
approaches $0

contrast j2ee & sql
ESB: standards-based
   but not standardized
big enterprise package software touts
standards-based

held together with highly proprietary glue

even the open source ESBs suffer from this

not likely to change

consider the impact on your overall
architecture
postlude
design == code
other artifacts aid in creating code

all artifacts besides code are transient

irrational artifact attachment
last responsible
               moment
                     How can I make my
                     decision reversible?


Do I need to make
this decision now?        What can I do to
                       allow me to defer the
                             decision?
ThoughtWorks




              for information & more cool stuff,
                   visit thoughtworks.com

                                                        NEAL FORD        software architect / meme wrangler



                                                                  ThoughtWorks
This work is licensed under the Creative Commons     nford@thoughtworks.com
       Attribution-Share Alike 3.0 License.          3003 Summit Boulevard, Atlanta, GA 30319
                                                     www.nealford.com
                                                     www.thoughtworks.com
 http://creativecommons.org/licenses/by-sa/3.0/us/   memeagora.blogspot.com
ThoughtWorks




              resources
Emergent Design & Evolutionary Architecture
series:

  http://tinyurl.com/nf-ead
appendix a
Test-after vs. TDD Perfect Number Finder
appendix b
Martin Fowler’s Who Needs an Architect

Weitere ähnliche Inhalte

Was ist angesagt?

M12_数百台の開発サーバをリフトアンドシフト! Azure Migrate 活用ポイント [Microsoft Japan Digital Days]
M12_数百台の開発サーバをリフトアンドシフト! Azure Migrate 活用ポイント [Microsoft Japan Digital Days]M12_数百台の開発サーバをリフトアンドシフト! Azure Migrate 活用ポイント [Microsoft Japan Digital Days]
M12_数百台の開発サーバをリフトアンドシフト! Azure Migrate 活用ポイント [Microsoft Japan Digital Days]
日本マイクロソフト株式会社
 
Digital transformation sweet spot: Business operations
Digital transformation sweet spot: Business operationsDigital transformation sweet spot: Business operations
Digital transformation sweet spot: Business operations
Marcel Santilli
 

Was ist angesagt? (20)

Digital Transformation
Digital TransformationDigital Transformation
Digital Transformation
 
50.000 orange stickies later
50.000 orange stickies later50.000 orange stickies later
50.000 orange stickies later
 
L'agilité pour gérer la complexité en TI
L'agilité pour gérer la complexité en TIL'agilité pour gérer la complexité en TI
L'agilité pour gérer la complexité en TI
 
Augmenting IT strategy with Enterprise architecture assessment
Augmenting IT strategy with Enterprise architecture assessmentAugmenting IT strategy with Enterprise architecture assessment
Augmenting IT strategy with Enterprise architecture assessment
 
Agile Enterprise Architecture at Nordea
Agile Enterprise Architecture at NordeaAgile Enterprise Architecture at Nordea
Agile Enterprise Architecture at Nordea
 
Compliance und Governance in der DevOps-Acht
Compliance und Governance in der DevOps-AchtCompliance und Governance in der DevOps-Acht
Compliance und Governance in der DevOps-Acht
 
Future Proofing Your IT Operating Model for Digital
Future Proofing Your IT Operating Model for DigitalFuture Proofing Your IT Operating Model for Digital
Future Proofing Your IT Operating Model for Digital
 
Agile @ Engie
Agile @ EngieAgile @ Engie
Agile @ Engie
 
Capgemini Digital Reference Architecture with HPE
Capgemini Digital Reference Architecture with HPECapgemini Digital Reference Architecture with HPE
Capgemini Digital Reference Architecture with HPE
 
スペシャリストとして組織をつくる、というキャリア
スペシャリストとして組織をつくる、というキャリアスペシャリストとして組織をつくる、というキャリア
スペシャリストとして組織をつくる、というキャリア
 
M12_数百台の開発サーバをリフトアンドシフト! Azure Migrate 活用ポイント [Microsoft Japan Digital Days]
M12_数百台の開発サーバをリフトアンドシフト! Azure Migrate 活用ポイント [Microsoft Japan Digital Days]M12_数百台の開発サーバをリフトアンドシフト! Azure Migrate 活用ポイント [Microsoft Japan Digital Days]
M12_数百台の開発サーバをリフトアンドシフト! Azure Migrate 活用ポイント [Microsoft Japan Digital Days]
 
【BS15】.NET アップグレード アシスタントで簡単にできます! .NET Framework アプリの .NET 6 へのマイグレーション
【BS15】.NET アップグレード アシスタントで簡単にできます! .NET Framework アプリの .NET 6 へのマイグレーション 【BS15】.NET アップグレード アシスタントで簡単にできます! .NET Framework アプリの .NET 6 へのマイグレーション
【BS15】.NET アップグレード アシスタントで簡単にできます! .NET Framework アプリの .NET 6 へのマイグレーション
 
Digital transformation sweet spot: Business operations
Digital transformation sweet spot: Business operationsDigital transformation sweet spot: Business operations
Digital transformation sweet spot: Business operations
 
Oracle EBS Journey to the Cloud - What is New in 2022 (UKOUG Breakthrough 22 ...
Oracle EBS Journey to the Cloud - What is New in 2022 (UKOUG Breakthrough 22 ...Oracle EBS Journey to the Cloud - What is New in 2022 (UKOUG Breakthrough 22 ...
Oracle EBS Journey to the Cloud - What is New in 2022 (UKOUG Breakthrough 22 ...
 
WebビューアやURLから挿入ステップの使いどころの考察
WebビューアやURLから挿入ステップの使いどころの考察WebビューアやURLから挿入ステップの使いどころの考察
WebビューアやURLから挿入ステップの使いどころの考察
 
What is digital what is transformation
What is digital what is transformationWhat is digital what is transformation
What is digital what is transformation
 
IT4IT - The Full Story for Digital Transformation - Part 1
IT4IT - The Full Story for Digital Transformation - Part 1IT4IT - The Full Story for Digital Transformation - Part 1
IT4IT - The Full Story for Digital Transformation - Part 1
 
Using SFIA as a basis for defining Enterprise Architecture skills
Using SFIA as a basis for defining Enterprise Architecture skillsUsing SFIA as a basis for defining Enterprise Architecture skills
Using SFIA as a basis for defining Enterprise Architecture skills
 
IT4IT™ - Managing the Business of IT
IT4IT™ - Managing the Business of ITIT4IT™ - Managing the Business of IT
IT4IT™ - Managing the Business of IT
 
Overcoming SFIA Implementation pitfalls
Overcoming SFIA Implementation pitfallsOvercoming SFIA Implementation pitfalls
Overcoming SFIA Implementation pitfalls
 

Ähnlich wie Neal Ford Emergent Design And Evolutionary Architecture

Neal Ford Emergent Design And Evolutionary Architecture
Neal Ford Emergent Design And Evolutionary ArchitectureNeal Ford Emergent Design And Evolutionary Architecture
Neal Ford Emergent Design And Evolutionary Architecture
ThoughtWorks Studios
 
Neal Ford Emergent Design And Evolutionary Architecture
Neal Ford Emergent Design And Evolutionary ArchitectureNeal Ford Emergent Design And Evolutionary Architecture
Neal Ford Emergent Design And Evolutionary Architecture
Thoughtworks
 
10 Ways To Improve Your Code( Neal Ford)
10  Ways To  Improve  Your  Code( Neal  Ford)10  Ways To  Improve  Your  Code( Neal  Ford)
10 Ways To Improve Your Code( Neal Ford)
guestebde
 
the productive programer: mechanics
the productive programer: mechanicsthe productive programer: mechanics
the productive programer: mechanics
elliando dias
 
2010 06-24 karlsruher entwicklertag
2010 06-24 karlsruher entwicklertag2010 06-24 karlsruher entwicklertag
2010 06-24 karlsruher entwicklertag
Marcel Bruch
 
DotNet Introduction
DotNet IntroductionDotNet Introduction
DotNet Introduction
Wei Sun
 
EoinWoods_WhereDidMyArchitectureGoPreservingSoftwareArchitectureInItsImplemen...
EoinWoods_WhereDidMyArchitectureGoPreservingSoftwareArchitectureInItsImplemen...EoinWoods_WhereDidMyArchitectureGoPreservingSoftwareArchitectureInItsImplemen...
EoinWoods_WhereDidMyArchitectureGoPreservingSoftwareArchitectureInItsImplemen...
Kostas Mavridis
 

Ähnlich wie Neal Ford Emergent Design And Evolutionary Architecture (20)

Neal Ford Emergent Design And Evolutionary Architecture
Neal Ford Emergent Design And Evolutionary ArchitectureNeal Ford Emergent Design And Evolutionary Architecture
Neal Ford Emergent Design And Evolutionary Architecture
 
Neal Ford Emergent Design And Evolutionary Architecture
Neal Ford Emergent Design And Evolutionary ArchitectureNeal Ford Emergent Design And Evolutionary Architecture
Neal Ford Emergent Design And Evolutionary Architecture
 
10 Ways To Improve Your Code
10 Ways To Improve Your Code10 Ways To Improve Your Code
10 Ways To Improve Your Code
 
10 Ways To Improve Your Code( Neal Ford)
10  Ways To  Improve  Your  Code( Neal  Ford)10  Ways To  Improve  Your  Code( Neal  Ford)
10 Ways To Improve Your Code( Neal Ford)
 
the productive programer: mechanics
the productive programer: mechanicsthe productive programer: mechanics
the productive programer: mechanics
 
Framework engineering JCO 2011
Framework engineering JCO 2011Framework engineering JCO 2011
Framework engineering JCO 2011
 
Code quality par Simone Civetta
Code quality par Simone CivettaCode quality par Simone Civetta
Code quality par Simone Civetta
 
Lunch and learn as3_frameworks
Lunch and learn as3_frameworksLunch and learn as3_frameworks
Lunch and learn as3_frameworks
 
Play framework
Play frameworkPlay framework
Play framework
 
2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)
2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)
2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)
 
2010 06-24 karlsruher entwicklertag
2010 06-24 karlsruher entwicklertag2010 06-24 karlsruher entwicklertag
2010 06-24 karlsruher entwicklertag
 
L Fu - Dao: a novel programming language for bioinformatics
L Fu - Dao: a novel programming language for bioinformaticsL Fu - Dao: a novel programming language for bioinformatics
L Fu - Dao: a novel programming language for bioinformatics
 
DotNet Introduction
DotNet IntroductionDotNet Introduction
DotNet Introduction
 
Критика "библиотечного" подхода в разработке под Android. UA Mobile 2016.
Критика "библиотечного" подхода в разработке под Android. UA Mobile 2016.Критика "библиотечного" подхода в разработке под Android. UA Mobile 2016.
Критика "библиотечного" подхода в разработке под Android. UA Mobile 2016.
 
Understanding the Dalvik Virtual Machine
Understanding the Dalvik Virtual MachineUnderstanding the Dalvik Virtual Machine
Understanding the Dalvik Virtual Machine
 
Js tacktalk team dev js testing performance
Js tacktalk team dev js testing performanceJs tacktalk team dev js testing performance
Js tacktalk team dev js testing performance
 
Exploring Clojurescript
Exploring ClojurescriptExploring Clojurescript
Exploring Clojurescript
 
VB2013 - Security Research and Development Framework
VB2013 - Security Research and Development FrameworkVB2013 - Security Research and Development Framework
VB2013 - Security Research and Development Framework
 
EoinWoods_WhereDidMyArchitectureGoPreservingSoftwareArchitectureInItsImplemen...
EoinWoods_WhereDidMyArchitectureGoPreservingSoftwareArchitectureInItsImplemen...EoinWoods_WhereDidMyArchitectureGoPreservingSoftwareArchitectureInItsImplemen...
EoinWoods_WhereDidMyArchitectureGoPreservingSoftwareArchitectureInItsImplemen...
 
Android antipatterns
Android antipatternsAndroid antipatterns
Android antipatterns
 

Mehr von Thoughtworks

Mehr von Thoughtworks (20)

Design System as a Product
Design System as a ProductDesign System as a Product
Design System as a Product
 
Designers, Developers & Dogs
Designers, Developers & DogsDesigners, Developers & Dogs
Designers, Developers & Dogs
 
Cloud-first for fast innovation
Cloud-first for fast innovationCloud-first for fast innovation
Cloud-first for fast innovation
 
More impact with flexible teams
More impact with flexible teamsMore impact with flexible teams
More impact with flexible teams
 
Culture of Innovation
Culture of InnovationCulture of Innovation
Culture of Innovation
 
Dual-Track Agile
Dual-Track AgileDual-Track Agile
Dual-Track Agile
 
Developer Experience
Developer ExperienceDeveloper Experience
Developer Experience
 
When we design together
When we design togetherWhen we design together
When we design together
 
Hardware is hard(er)
Hardware is hard(er)Hardware is hard(er)
Hardware is hard(er)
 
Customer-centric innovation enabled by cloud
 Customer-centric innovation enabled by cloud Customer-centric innovation enabled by cloud
Customer-centric innovation enabled by cloud
 
Amazon's Culture of Innovation
Amazon's Culture of InnovationAmazon's Culture of Innovation
Amazon's Culture of Innovation
 
When in doubt, go live
When in doubt, go liveWhen in doubt, go live
When in doubt, go live
 
Don't cross the Rubicon
Don't cross the RubiconDon't cross the Rubicon
Don't cross the Rubicon
 
Error handling
Error handlingError handling
Error handling
 
Your test coverage is a lie!
Your test coverage is a lie!Your test coverage is a lie!
Your test coverage is a lie!
 
Docker container security
Docker container securityDocker container security
Docker container security
 
Redefining the unit
Redefining the unitRedefining the unit
Redefining the unit
 
Technology Radar Webinar UK - Vol. 22
Technology Radar Webinar UK - Vol. 22Technology Radar Webinar UK - Vol. 22
Technology Radar Webinar UK - Vol. 22
 
A Tribute to Turing
A Tribute to TuringA Tribute to Turing
A Tribute to Turing
 
Rsa maths worked out
Rsa maths worked outRsa maths worked out
Rsa maths worked out
 

Kürzlich hochgeladen

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 

Kürzlich hochgeladen (20)

Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdf
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 

Neal Ford Emergent Design And Evolutionary Architecture

  • 1. ThoughtWorks emergent design & evolutionary architecture NEAL FORD software architect / meme wrangler ThoughtWorks nford@thoughtworks.com 3003 Summit Boulevard, Atlanta, GA 30319 www.nealford.com www.thoughtworks.com memeagora.blogspot.com
  • 2. http://www.ibm.com/developerworks/java/library/j-eaed1/ index.html?S_TACT=105AGX02&S_CMP=EDU http://tr.im/nf_ead_all
  • 4.
  • 5. things to think about
  • 6. emergent evolutionary
  • 7. Emergent, a. [L. emergens, p. pr. of emergere.] 1. Rising or emerging out of a fluid or anything that covers or conceals; issuing; coming to light. [1913 Webster] 2. Suddenly appearing; arising unexpectedly; calling for prompt action; urgent. [1913 Webster]
  • 8. spectrum of design "Pure" Some Agile Waterfall DUF Emergent Cowboy BDUF Design Hacking
  • 9. big design up front Project Planning/Estimation Requirements Use Cases/ Functional Specs Design Specifications Code Test Fix/Integrate $
  • 10. who thought this was a good idea?
  • 11.
  • 12.
  • 13.
  • 14.
  • 17. Patterns nomenclature technical patterns idiomatic patterns domain patterns patterns describe effective abstractions
  • 18. abstracting too early speculation without facts YAGNI! business processes change radically and often how do you know when? experience helps spike solutions
  • 19.
  • 21. “what is software design? what design?” Jack C. Reeves fall 1992, c++ journal http://www.developerdotstar.com/mag/articles/reeves_design.html
  • 22. software “engineering” “The final goal of any engineering activity is some type of documentation” “When the design effort is complete, the design documentation is turned over to the manufacturing team.” what is the design document in software? the source code
  • 23. source == design “...software is cheap to build. It does not qualify as inexpensive; it is so cheap it is almost free”. manufacturing == build process “...software design is easy to create, at least in the mechanical sense.” “Given that software designs are relatively easy to turn out, and essentially free to build, an unsurprising revelation is that software designs tend to be incredibly large and complex.”
  • 24. source == design “...it is cheaper and simpler to just build the design and test it than to do anything else.” “The overwhelming problem with software development is that everything is part of the design process.” “Coding is design, testing and debugging are part of design, and what we typically call software design is still part of design.” “Software may be cheap to build, but it is incredibly expensive to design.”
  • 25. emergent design discovering design in code finding effective abstractions technical abstractions problem domain abstractions ability to harvest idiomatic patterns
  • 26. things that obscure emergent design
  • 28. essential complexity inherent complexity accidental complexity all the externally imposed ways that software becomes complex essential vs. accidental complexity
  • 29. examples Hunting Season EJB / Biztalk Field Level Security Essential Accidental
  • 32. technical debt Code Base effort for Complexity principal new features interest
  • 33. negotiating repayment you must convince someone technical debt exists... ...start a conversation about repayment demonstration trumps discussion
  • 36. genericness “if we build lots of layers for extension, we can easily build more onto it later” increases software entropy accidental complexity generic obfuscation
  • 37.
  • 39. test driven design more about design than testing design will emerge from tests atomic understanding of intent better abstractions less accidental complexity
  • 40. perfect number case study: ∑ of the factors == number (not including the number) ∑ of the factors - # == #
  • 41.
  • 42.
  • 43. tdd vs test-after test after doesn’t expose design flaws as early tdd forces you to think about every little thing encourages refactoring what’s not right
  • 44. refactoring collective code ownership fix broken windows whenever you see them regularly fix obsolescent abstractions prudently refactor aggressively code should get stronger with age
  • 45. refactoring to harvest idiomatic patterns
  • 46. cyclomatic complexity measures complexity of a function V(G)= e - n + 2 V(G) = cyclomatic complexity of G e= # edges n= # of nodes
  • 47. start 1 if (c1) 1 2 2 f1() 3 f2() 4 4 3 if (c2) 5 6 nodes 5 f3() 6 f4() edges 7 8 7 end
  • 48. afferent coupling ∑ of how many classes use this class incoming references determines what is the “hard, crunchy center” of your code base measure with CKJM or other metrics tools
  • 51. evaluate.*Params ? find . -name "*.java" | xargs grep -l "void evaluate.*Params" > pbcopy ./org/apache/struts2/components/AbstractRemoteCallUIBean.java ./org/apache/struts2/components/Label.java ./org/apache/struts2/components/Anchor.java ./org/apache/struts2/components/ListUIBean.java ./org/apache/struts2/components/Autocompleter.java ./org/apache/struts2/components/OptionTransferSelect.java ! ./org/apache/struts2/components/Checkbox.java ./org/apache/struts2/components/Password.java ./org/apache/struts2/components/ComboBox.java ./org/apache/struts2/components/Reset.java ./org/apache/struts2/components/DateTimePicker.java ./org/apache/struts2/components/Select.java ./org/apache/struts2/components/Div.java ./org/apache/struts2/components/Submit.java ./org/apache/struts2/components/DoubleListUIBean.java ./org/apache/struts2/components/TabbedPanel.java ./org/apache/struts2/components/DoubleSelect.java ./org/apache/struts2/components/table/WebTable.java ./org/apache/struts2/components/File.java ./org/apache/struts2/components/TextArea.java ./org/apache/struts2/components/Form.java ./org/apache/struts2/components/TextField.java ./org/apache/struts2/components/FormButton.java ./org/apache/struts2/components/Token.java ./org/apache/struts2/components/Head.java ./org/apache/struts2/components/Tree.java ./org/apache/struts2/components/InputTransferSelect.java ./org/apache/struts2/components/UIBean.java ./org/apache/struts2/components/UpDownSelect.java
  • 52. fixing parameters 66 - 9 = 57 lines of obscuring duplication 22 * 3 = 66
  • 53. expressiveness if code is design, readable design matters complex languages hurt readability most comments don’t help not executable always (potentially) out of date
  • 54. idiomatic “unit of work” pattern
  • 58. abstraction styles imperative structured / modular object-oriented functional anti-objects
  • 59. collaborative diffusion “The metaphor of objects can go too far by making us try to create objects that are too much inspired by the real world. “ “...an antiobject is a kind of object that appears to essentially do the opposite of what we generally think the object should be doing.”
  • 60.
  • 61.
  • 62.
  • 64. Evolution, n. [L. evolutio an unrolling: cf. F. ['e] volution evolution 1: a process in which something passes by degrees to a different stage (especially a more advanced or mature stage)
  • 65. application architecture describes the coarse-grained pieces that compose an application
  • 66. framework level architecture when was the last time you downloaded a single class? the unit of reuse in java is the library JSR 277, the java module system...abandonware JSR 294 (superpackage)...IN JAVA 7! implemented by ivy & maven
  • 67. enterprise architecture concerns itself with how the enterprise as a whole (which usually means the applications running inside a large organization) consumes applications
  • 68. enterprise architecture == city planning
  • 69. application architecture == building plan
  • 71.
  • 72. “The architecture of a software system (at a given point in time) is its organization or structure of significant components interacting through interfaces, those components being composed of successively smaller components and interfaces.'" post on the XP mail list technical definition
  • 73. "In most successful software projects, the expert developers working on that project have a shared understanding of the system design. This shared understanding is called "architecture." This understanding includes how the system is divided into components and how the components interact through interfaces.'" Ralph Johnson, rebutting the original post social definition
  • 74. Architecture is about the important stuff. Whatever that is. Martin Fowler’s definition
  • 75. Stuff that's hard to change later. Martin Fowler, in conversation There should be as little of that stuff as possible.
  • 80. business processes are not commoditizable “you can buy this generic business process software...” “...we just need to tweak it with a few customizations” myth radically unique across similar businesses software can provide strategic business advantage
  • 81.
  • 82. Dietzler’s Law for framework X: 80% of what the user wants is fast & easy the next 10% is possible but difficult the last 10% is impossible users want 100% of what they want
  • 83. standards-based vs. standardized flash-back to java web development before j2ee standards helped developers tremendously... ...but vendors hate it the price of commodity software quickly approaches $0 contrast j2ee & sql
  • 84. ESB: standards-based but not standardized big enterprise package software touts standards-based held together with highly proprietary glue even the open source ESBs suffer from this not likely to change consider the impact on your overall architecture
  • 85.
  • 87. design == code other artifacts aid in creating code all artifacts besides code are transient irrational artifact attachment
  • 88. last responsible moment How can I make my decision reversible? Do I need to make this decision now? What can I do to allow me to defer the decision?
  • 89.
  • 90.
  • 91. ThoughtWorks for information & more cool stuff, visit thoughtworks.com NEAL FORD software architect / meme wrangler ThoughtWorks This work is licensed under the Creative Commons nford@thoughtworks.com Attribution-Share Alike 3.0 License. 3003 Summit Boulevard, Atlanta, GA 30319 www.nealford.com www.thoughtworks.com http://creativecommons.org/licenses/by-sa/3.0/us/ memeagora.blogspot.com
  • 92. ThoughtWorks resources Emergent Design & Evolutionary Architecture series: http://tinyurl.com/nf-ead
  • 93. appendix a Test-after vs. TDD Perfect Number Finder
  • 94. appendix b Martin Fowler’s Who Needs an Architect