SlideShare a Scribd company logo
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

More Related Content

What's hot

Cypress first impressions
Cypress first impressionsCypress first impressions
Cypress first impressions
Hans Emmel
 
KrishnaToolComparisionPPT.pdf
KrishnaToolComparisionPPT.pdfKrishnaToolComparisionPPT.pdf
KrishnaToolComparisionPPT.pdf
QA or the Highway
 
End to end testing - strategies
End to end testing - strategiesEnd to end testing - strategies
End to end testing - strategies
anuvip
 
How to Get Started with Cypress
How to Get Started with CypressHow to Get Started with Cypress
How to Get Started with Cypress
Applitools
 
QA Challenge Accepted 4.0 - Cypress vs. Selenium
QA Challenge Accepted 4.0 - Cypress vs. SeleniumQA Challenge Accepted 4.0 - Cypress vs. Selenium
QA Challenge Accepted 4.0 - Cypress vs. Selenium
Lyudmil Latinov
 
Cypress
CypressCypress
Why you should switch to Cypress for modern web testing?
Why you should switch to Cypress for modern web testing?Why you should switch to Cypress for modern web testing?
Why you should switch to Cypress for modern web testing?
Shivam Bharadwaj
 
Repository Management with JFrog Artifactory
Repository Management with JFrog ArtifactoryRepository Management with JFrog Artifactory
Repository Management with JFrog Artifactory
Stephen Chin
 
Device Management for Internet of Things Constrained Devices OMA Lightweight M2M
Device Management for Internet of Things Constrained Devices OMA Lightweight M2MDevice Management for Internet of Things Constrained Devices OMA Lightweight M2M
Device Management for Internet of Things Constrained Devices OMA Lightweight M2M
Duncan Purves
 
Platform as reflection of values: Joyent, node.js, and beyond
Platform as reflection of values: Joyent, node.js, and beyondPlatform as reflection of values: Joyent, node.js, and beyond
Platform as reflection of values: Joyent, node.js, and beyond
bcantrill
 
Setting SLOs and SLIs in the Real World
Setting SLOs and SLIs in the Real WorldSetting SLOs and SLIs in the Real World
Setting SLOs and SLIs in the Real World
New Relic
 
The Truth About the Service Mesh Data Plane
The Truth About the Service Mesh Data PlaneThe Truth About the Service Mesh Data Plane
The Truth About the Service Mesh Data Plane
Christian Posta
 
Monitoring at the Speed of DevOps
Monitoring at the Speed of DevOpsMonitoring at the Speed of DevOps
Monitoring at the Speed of DevOps
DevOps.com
 
Monitoring and observability
Monitoring and observabilityMonitoring and observability
Monitoring and observabilityTheo Schlossnagle
 
List of golang use cases and top companies that use golang
List of golang use cases and top companies that use golangList of golang use cases and top companies that use golang
List of golang use cases and top companies that use golang
Katy Slemon
 
DevOps
DevOpsDevOps
Manage Microservices Chaos and Complexity with Observability
Manage Microservices Chaos and Complexity with ObservabilityManage Microservices Chaos and Complexity with Observability
Manage Microservices Chaos and Complexity with Observability
NGINX, Inc.
 
CQRS and Event Sourcing with Axon Framework
CQRS and Event Sourcing with Axon FrameworkCQRS and Event Sourcing with Axon Framework
CQRS and Event Sourcing with Axon Framework
João Rafael Campos da Silva
 
FIWARE Robotics: ROS2 & micro-ROS
FIWARE Robotics: ROS2 & micro-ROSFIWARE Robotics: ROS2 & micro-ROS
FIWARE Robotics: ROS2 & micro-ROS
Jaime Martin Losa
 
e2e testing with cypress
e2e testing with cypresse2e testing with cypress
e2e testing with cypress
Tomasz Bak
 

What's hot (20)

Cypress first impressions
Cypress first impressionsCypress first impressions
Cypress first impressions
 
KrishnaToolComparisionPPT.pdf
KrishnaToolComparisionPPT.pdfKrishnaToolComparisionPPT.pdf
KrishnaToolComparisionPPT.pdf
 
End to end testing - strategies
End to end testing - strategiesEnd to end testing - strategies
End to end testing - strategies
 
How to Get Started with Cypress
How to Get Started with CypressHow to Get Started with Cypress
How to Get Started with Cypress
 
QA Challenge Accepted 4.0 - Cypress vs. Selenium
QA Challenge Accepted 4.0 - Cypress vs. SeleniumQA Challenge Accepted 4.0 - Cypress vs. Selenium
QA Challenge Accepted 4.0 - Cypress vs. Selenium
 
Cypress
CypressCypress
Cypress
 
Why you should switch to Cypress for modern web testing?
Why you should switch to Cypress for modern web testing?Why you should switch to Cypress for modern web testing?
Why you should switch to Cypress for modern web testing?
 
Repository Management with JFrog Artifactory
Repository Management with JFrog ArtifactoryRepository Management with JFrog Artifactory
Repository Management with JFrog Artifactory
 
Device Management for Internet of Things Constrained Devices OMA Lightweight M2M
Device Management for Internet of Things Constrained Devices OMA Lightweight M2MDevice Management for Internet of Things Constrained Devices OMA Lightweight M2M
Device Management for Internet of Things Constrained Devices OMA Lightweight M2M
 
Platform as reflection of values: Joyent, node.js, and beyond
Platform as reflection of values: Joyent, node.js, and beyondPlatform as reflection of values: Joyent, node.js, and beyond
Platform as reflection of values: Joyent, node.js, and beyond
 
Setting SLOs and SLIs in the Real World
Setting SLOs and SLIs in the Real WorldSetting SLOs and SLIs in the Real World
Setting SLOs and SLIs in the Real World
 
The Truth About the Service Mesh Data Plane
The Truth About the Service Mesh Data PlaneThe Truth About the Service Mesh Data Plane
The Truth About the Service Mesh Data Plane
 
Monitoring at the Speed of DevOps
Monitoring at the Speed of DevOpsMonitoring at the Speed of DevOps
Monitoring at the Speed of DevOps
 
Monitoring and observability
Monitoring and observabilityMonitoring and observability
Monitoring and observability
 
List of golang use cases and top companies that use golang
List of golang use cases and top companies that use golangList of golang use cases and top companies that use golang
List of golang use cases and top companies that use golang
 
DevOps
DevOpsDevOps
DevOps
 
Manage Microservices Chaos and Complexity with Observability
Manage Microservices Chaos and Complexity with ObservabilityManage Microservices Chaos and Complexity with Observability
Manage Microservices Chaos and Complexity with Observability
 
CQRS and Event Sourcing with Axon Framework
CQRS and Event Sourcing with Axon FrameworkCQRS and Event Sourcing with Axon Framework
CQRS and Event Sourcing with Axon Framework
 
FIWARE Robotics: ROS2 & micro-ROS
FIWARE Robotics: ROS2 & micro-ROSFIWARE Robotics: ROS2 & micro-ROS
FIWARE Robotics: ROS2 & micro-ROS
 
e2e testing with cypress
e2e testing with cypresse2e testing with cypress
e2e testing with cypress
 

Similar to 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
 
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
 
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: mechanicselliando dias
 
Framework engineering JCO 2011
Framework engineering JCO 2011Framework engineering JCO 2011
Framework engineering JCO 2011
YoungSu Son
 
Code quality par Simone Civetta
Code quality par Simone CivettaCode quality par Simone Civetta
Code quality par Simone Civetta
CocoaHeads France
 
Lunch and learn as3_frameworks
Lunch and learn as3_frameworksLunch and learn as3_frameworks
Lunch and learn as3_frameworks
Yuri Visser
 
2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)
2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)
2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)
JiandSon
 
2010 06-24 karlsruher entwicklertag
2010 06-24 karlsruher entwicklertag2010 06-24 karlsruher entwicklertag
2010 06-24 karlsruher entwicklertagMarcel Bruch
 
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
Jan Aerts
 
DotNet Introduction
DotNet IntroductionDotNet Introduction
DotNet IntroductionWei Sun
 
Критика "библиотечного" подхода в разработке под Android. UA Mobile 2016.
Критика "библиотечного" подхода в разработке под Android. UA Mobile 2016.Критика "библиотечного" подхода в разработке под Android. UA Mobile 2016.
Критика "библиотечного" подхода в разработке под Android. UA Mobile 2016.
UA Mobile
 
Understanding the Dalvik Virtual Machine
Understanding the Dalvik Virtual MachineUnderstanding the Dalvik Virtual Machine
Understanding the Dalvik Virtual Machine
National Cheng Kung University
 
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
Luke Donnet
 
VB2013 - Security Research and Development Framework
VB2013 - Security Research and Development FrameworkVB2013 - Security Research and Development Framework
VB2013 - Security Research and Development Framework
Amr Thabet
 
EoinWoods_WhereDidMyArchitectureGoPreservingSoftwareArchitectureInItsImplemen...
EoinWoods_WhereDidMyArchitectureGoPreservingSoftwareArchitectureInItsImplemen...EoinWoods_WhereDidMyArchitectureGoPreservingSoftwareArchitectureInItsImplemen...
EoinWoods_WhereDidMyArchitectureGoPreservingSoftwareArchitectureInItsImplemen...Kostas Mavridis
 
Android antipatterns
Android antipatternsAndroid antipatterns
Android antipatterns
Bartosz Kosarzycki
 

Similar to 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
 

More from Thoughtworks

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

More from 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
 

Recently uploaded

Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
nkrafacyberclub
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Nexer Digital
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Product School
 
Assure Contact Center Experiences for Your Customers With ThousandEyes
Assure Contact Center Experiences for Your Customers With ThousandEyesAssure Contact Center Experiences for Your Customers With ThousandEyes
Assure Contact Center Experiences for Your Customers With ThousandEyes
ThousandEyes
 
Quantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIsQuantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIs
Vlad Stirbu
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 
Welocme to ViralQR, your best QR code generator.
Welocme to ViralQR, your best QR code generator.Welocme to ViralQR, your best QR code generator.
Welocme to ViralQR, your best QR code generator.
ViralQR
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Thierry Lestable
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfSAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
Peter Spielvogel
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
Product School
 

Recently uploaded (20)

Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
Assure Contact Center Experiences for Your Customers With ThousandEyes
Assure Contact Center Experiences for Your Customers With ThousandEyesAssure Contact Center Experiences for Your Customers With ThousandEyes
Assure Contact Center Experiences for Your Customers With ThousandEyes
 
Quantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIsQuantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIs
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
Welocme to ViralQR, your best QR code generator.
Welocme to ViralQR, your best QR code generator.Welocme to ViralQR, your best QR code generator.
Welocme to ViralQR, your best QR code generator.
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfSAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 

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