SlideShare a Scribd company logo
1 of 35
Behaviour-Driven
 Development
Writing software that matters

 Dan North, ThoughtWorks
   Liz Keogh, Lunivore
Part 1: Software that
  doesn’t matter


          2     © Dan North, ThoughtWorks
Failure modes – a field guide
 The project comes in late
   ...or costs too much to finish

 The application does the wrong thing

 It is unstable in production

 It breaks the rules

 The code is impossible to work with
                       3            © Dan North, ThoughtWorks
How we deliver software
Planning


           Analysis



                          Design




                                                                Deploy
                                       Code



                                              Test
                                                                          t

                      Why do we do this?
                                   4                 © Dan North, ThoughtWorks
The exponential change curve
$   Planning


               Analysis



                          Design




                                                                Deploy
                                       Code



                                              Test
                                                                           t


                                   5                 © Dan North, ThoughtWorks
The exponential change curve
           $
               We fear this...



so we do                         t               which
this...                                          reinforces
                                                 this!




                         6           © Dan North, ThoughtWorks
If only we could deliver better...
  Deliver features rather than modules

  Prioritise often, change often

  Only focus on high-value features

  Flatten the cost of change

  Adapt to feedback

                      Learn!
                        7             © Dan North, ThoughtWorks
What we would need
Adaptive planning

Streaming requirements

Evolving design

Code we can change

Frequent code integration

Run all the regression tests often

Frequent deployments

                        8            © Dan North, ThoughtWorks
Part 2: Software that
       matters


          9     © Dan North, ThoughtWorks
A loose definition of BDD

“Behaviour-driven development is
  about implementing an application
  by describing its behaviour from
  the perspective of its stakeholders”

               - Me 


                  10          © Dan North, ThoughtWorks
A more formal definition of BDD
  “BDD is a second-generation,
    outside-in, pull-based, multiple-
    stakeholder, multiple-scale, high-
    automation, agile methodology.

  “It describes a cycle of interactions
     with well-defined outputs, resulting
     in the delivery of working, tested
     software that matters.”

                     11           © Dan North, ThoughtWorks
...second generation...

                  BDD is derivative
        Derives from:
            XP, especially TDD and CI
            Acceptance Test-Driven Planning
            Lean principles
            Domain-Driven Design

        Influenced by:
            Neurolinguistic Programming (NLP)
            Systems Thinking
                            12           © Dan North, ThoughtWorks
...cycle of interactions...

                  BDD in six pictures




                              13   © Dan North, ThoughtWorks
...cycle of interactions...

            The roles in a BDD team
         The stakeholders

         The analysts (or BAs)

         The testers (or QAs)

         The developers

         The project manager (or Boss)
                              14         © Dan North, ThoughtWorks
...outside-in...

          Who is this application for?
                                                          Vision
                                                    (or Purpose)



                    Outcome                                  Outcome                 Outcome




                   Feature set              Feature set                Feature set   Feature set




                   Features...    Features...        Features...           ...




                    Stories...    Stories...                ...




                   Scenarios...       ...



                                                          15                             © Dan North, ThoughtWorks
...clearly-defined outputs...

                   What’s in a story?
                 A story is a unit of delivery

                Story 28 - View patient details

             As an Anaesthetist
             I want to view the Patient’s surgical history
             So that I can choose the most suitable gas




                                   16               © Dan North, ThoughtWorks
...clearly-defined outputs...

                 Focus on the value


                Story 28 - View patient details

             In order to choose the most suitable gas
             an Anaesthetist
             wants to view the Patient’s surgical history




                                   17               © Dan North, ThoughtWorks
...clearly-defined outputs...

                 Focus on the value


                 Story 29 – Log patient details

             In order to choose the most suitable gas
             an Anaesthetist
             wants other Anaesthetists to log the
             Patient’s surgical history for later retrieval




                                    18               © Dan North, ThoughtWorks
...clearly-defined outputs...

                    Agree on “done”
              Define scope using scenarios

            Scenario – existing patient with history


            Given we have a patient on file
            And the patient has had previous surgery
            When I request the Patient’s surgical history
            Then I see all the previous treatments




                                   19                © Dan North, ThoughtWorks
...clearly-defined outputs...

            Automate the scenarios
                 Make each step executable

               Given we have a patient on file
              In Ruby:
              Given “we have a patient on file” do
                  # ...
              end

              In Java:
              @Given(“we have a patient on file”)
              public void createPatientOnFile() {
                  // ...
              }
                                 20             © Dan North, ThoughtWorks
...clearly-defined outputs...

    Code-by-example to implement
                           Also known as TDD

         Start at the edges, with what you know

         Implement outermost objects and operations

         Discover collaborators, working inwards
             and mock them out for now

         Repeat until “Done”

            If the model doesn’t “feel” right, experiment!

                                  21            © Dan North, ThoughtWorks
...clearly-defined outputs...

            Code-by-example example
      Scenario
                           Examples




 Scenario




                                      22   © Dan North, ThoughtWorks
...clearly-defined outputs...

           Good tools can help here
         Cucumber or JBehave for stories

         RSpec, XUnit for code examples

         Mockito, Mocha, Moq for mocking

         Be opinionated rather than dogmatic
                    with the tooling!

                                23   © Dan North, ThoughtWorks
...clearly-defined outputs...

    We keep the development artifacts
         Examples become code tests
             …and documentation


         Scenarios become acceptance tests
             which become regression tests
             ...and documentation


                        Automation is key
                                24           © Dan North, ThoughtWorks
Part 3: Getting the
   words right


         25    © Dan North, ThoughtWorks
26   © Dan North, ThoughtWorks
Domain-driven design 101
Model your domain
  ...and identify the core domain


Create a shared language
  ...and make it ubiquitous


Determine the model’s bounded context
  ...and think about what happens at the edges
                      27            © Dan North, ThoughtWorks
The map is not the territory
There are many kinds of model
  Each is useful in different contexts


There is no “perfect” domain model
  So don’t try to create one!


  Domain modelling takes practice

                    28            © Dan North, ThoughtWorks
A legacy domain modelling example
    Map<int, Map<int, int>>
      portfolioIdsByTraderId;

    if (portfolioIdsByTraderId.get(trader.getId())
        .containsKey(portfolio.getId())) {...}


    becomes:
    if (trader.canView(portfolio)) {...}




                              29               © Dan North, ThoughtWorks
We often manage multiple domains
 You want to retrieve patient records
   in Java, using Hibernate


 so you define
   class HibernatePatientRecordRepository {


        What if your IDE did domain-specific fonts?




                          30                 © Dan North, ThoughtWorks
Writing effective stories
Each story represents (part of) a feature
   and each feature belongs to a stakeholder

Each stakeholder represents a domain
   even the incidental stakeholders

Mixing domains within a scenario leads to brittle tests
   What exactly is the scenario verifying?
   What does it mean when things change?

“What does the stakeholder want from this story?”
                            31               © Dan North, ThoughtWorks
Conclusion


    32       © Dan North, ThoughtWorks
Software that matters
...has tangible stakeholder value
...is delivered on time, incrementally
...is easy to deploy and manage
...is robust in production
...is easy to understand and communicate

      BDD is a step in that direction

                     33          © Dan North, ThoughtWorks
Thank you

        Any questions?
    dan.north@thoughtworks.com
          http://dannorth.net
              @tastapod

           liz@lunivore.com
           http://lizkeogh.com
                @lunivore

Google Group: BehaviorDrivenDevelopment


                   34             © Dan North, ThoughtWorks
Bibliography
Extreme Programming explained (2nd edition)
- Kent Beck

Domain-Driven Design - Eric Evans

The Art of Systems Thinking
  and
The Way of NLP - Joseph O’Connor

                      35            © Dan North, ThoughtWorks

More Related Content

What's hot

Automation test framework with cucumber – BDD
Automation test framework with cucumber – BDDAutomation test framework with cucumber – BDD
Automation test framework with cucumber – BDD123abcda
 
BDD WITH CUCUMBER AND JAVA
BDD WITH CUCUMBER AND JAVABDD WITH CUCUMBER AND JAVA
BDD WITH CUCUMBER AND JAVASrinivas Katakam
 
Bdd – with cucumber and gherkin
Bdd – with cucumber and gherkinBdd – with cucumber and gherkin
Bdd – with cucumber and gherkinArati Joshi
 
Behavior Driven Development
Behavior Driven DevelopmentBehavior Driven Development
Behavior Driven DevelopmentLiz Keogh
 
Behavior Driven Development with Cucumber
Behavior Driven Development with CucumberBehavior Driven Development with Cucumber
Behavior Driven Development with CucumberBrandon Keepers
 
Behavior driven development (bdd)
Behavior driven development (bdd)Behavior driven development (bdd)
Behavior driven development (bdd)Rohit Bisht
 
Introduction to BDD with Cucumber for Java
Introduction to BDD with Cucumber for JavaIntroduction to BDD with Cucumber for Java
Introduction to BDD with Cucumber for JavaSeb Rose
 
BDD in Action – principles, practices and real-world application
BDD in Action – principles, practices and real-world applicationBDD in Action – principles, practices and real-world application
BDD in Action – principles, practices and real-world applicationJohn Ferguson Smart Limited
 
Test Driven Development (TDD)
Test Driven Development (TDD)Test Driven Development (TDD)
Test Driven Development (TDD)David Ehringer
 
Agile Testing and Test Automation
Agile Testing and Test AutomationAgile Testing and Test Automation
Agile Testing and Test AutomationNaveen Kumar Singh
 
Test and Behaviour Driven Development (TDD/BDD)
Test and Behaviour Driven Development (TDD/BDD)Test and Behaviour Driven Development (TDD/BDD)
Test and Behaviour Driven Development (TDD/BDD)Lars Thorup
 
Why Should we use Microsoft's Playwright
Why Should we use Microsoft's PlaywrightWhy Should we use Microsoft's Playwright
Why Should we use Microsoft's PlaywrightKnoldus Inc.
 
Selenium with Cucumber
Selenium  with Cucumber Selenium  with Cucumber
Selenium with Cucumber Knoldus Inc.
 

What's hot (20)

Automation test framework with cucumber – BDD
Automation test framework with cucumber – BDDAutomation test framework with cucumber – BDD
Automation test framework with cucumber – BDD
 
BDD WITH CUCUMBER AND JAVA
BDD WITH CUCUMBER AND JAVABDD WITH CUCUMBER AND JAVA
BDD WITH CUCUMBER AND JAVA
 
Bdd – with cucumber and gherkin
Bdd – with cucumber and gherkinBdd – with cucumber and gherkin
Bdd – with cucumber and gherkin
 
Gherkin /BDD intro
Gherkin /BDD introGherkin /BDD intro
Gherkin /BDD intro
 
Behavior Driven Development
Behavior Driven DevelopmentBehavior Driven Development
Behavior Driven Development
 
BDD & Cucumber
BDD & CucumberBDD & Cucumber
BDD & Cucumber
 
Behavior Driven Development with Cucumber
Behavior Driven Development with CucumberBehavior Driven Development with Cucumber
Behavior Driven Development with Cucumber
 
Behavior driven development (bdd)
Behavior driven development (bdd)Behavior driven development (bdd)
Behavior driven development (bdd)
 
BDD with Cucumber
BDD with CucumberBDD with Cucumber
BDD with Cucumber
 
Introduction to BDD with Cucumber for Java
Introduction to BDD with Cucumber for JavaIntroduction to BDD with Cucumber for Java
Introduction to BDD with Cucumber for Java
 
Cucumber presenation
Cucumber presenationCucumber presenation
Cucumber presenation
 
BDD in Action – principles, practices and real-world application
BDD in Action – principles, practices and real-world applicationBDD in Action – principles, practices and real-world application
BDD in Action – principles, practices and real-world application
 
Test Driven Development (TDD)
Test Driven Development (TDD)Test Driven Development (TDD)
Test Driven Development (TDD)
 
Agile Testing and Test Automation
Agile Testing and Test AutomationAgile Testing and Test Automation
Agile Testing and Test Automation
 
Test and Behaviour Driven Development (TDD/BDD)
Test and Behaviour Driven Development (TDD/BDD)Test and Behaviour Driven Development (TDD/BDD)
Test and Behaviour Driven Development (TDD/BDD)
 
Automated Test Framework with Cucumber
Automated Test Framework with CucumberAutomated Test Framework with Cucumber
Automated Test Framework with Cucumber
 
Why Should we use Microsoft's Playwright
Why Should we use Microsoft's PlaywrightWhy Should we use Microsoft's Playwright
Why Should we use Microsoft's Playwright
 
Cucumber & gherkin language
Cucumber & gherkin languageCucumber & gherkin language
Cucumber & gherkin language
 
Selenium with Cucumber
Selenium  with Cucumber Selenium  with Cucumber
Selenium with Cucumber
 
Test Automation Framework with BDD and Cucumber
Test Automation Framework with BDD and CucumberTest Automation Framework with BDD and Cucumber
Test Automation Framework with BDD and Cucumber
 

Viewers also liked

Outside In - Behaviour Driven Development (BDD)
Outside In - Behaviour Driven Development (BDD)Outside In - Behaviour Driven Development (BDD)
Outside In - Behaviour Driven Development (BDD)Naresh Jain
 
Behavior Driven Development (BDD) and Agile Testing
Behavior Driven Development (BDD) and Agile TestingBehavior Driven Development (BDD) and Agile Testing
Behavior Driven Development (BDD) and Agile Testingdversaci
 
Stop Hiring Devops Experts (And Start Growing Them) - PuppetConf 2013
Stop Hiring Devops Experts (And Start Growing Them) - PuppetConf 2013Stop Hiring Devops Experts (And Start Growing Them) - PuppetConf 2013
Stop Hiring Devops Experts (And Start Growing Them) - PuppetConf 2013Puppet
 
Code as a Communication Tool
Code as a Communication ToolCode as a Communication Tool
Code as a Communication ToolVinicius Gomes
 
ThoughtWorks Quarterly Technology Briefing, London, September 2009
ThoughtWorks Quarterly Technology Briefing, London, September 2009ThoughtWorks Quarterly Technology Briefing, London, September 2009
ThoughtWorks Quarterly Technology Briefing, London, September 2009Thoughtworks
 
Ciso executive summit 2012
Ciso executive summit 2012Ciso executive summit 2012
Ciso executive summit 2012Bill Burns
 
Presenting the BetaCodex (BetaCodex06)
Presenting the BetaCodex (BetaCodex06)Presenting the BetaCodex (BetaCodex06)
Presenting the BetaCodex (BetaCodex06)Niels Pflaeging
 
Agile Recruiting White Paper
Agile Recruiting White PaperAgile Recruiting White Paper
Agile Recruiting White PaperAmber Grewal
 
Lean Times Require Lean Thinking
Lean Times Require Lean ThinkingLean Times Require Lean Thinking
Lean Times Require Lean ThinkingThoughtworks
 
Tech Lead Skills for Developers
Tech Lead Skills for DevelopersTech Lead Skills for Developers
Tech Lead Skills for DevelopersThoughtworks
 
Bdd (Behavior Driven Development)
Bdd (Behavior Driven Development)Bdd (Behavior Driven Development)
Bdd (Behavior Driven Development)Helder De Oliveira
 
managing change in the digital environment
managing change in the digital environmentmanaging change in the digital environment
managing change in the digital environmentJenny Williams
 
Effects of social networking
Effects of social networkingEffects of social networking
Effects of social networkingSandipan Samaddar
 
Rolf Russel - system thinking
Rolf Russel - system thinkingRolf Russel - system thinking
Rolf Russel - system thinkingdevopsdayUSA2010
 
Ill effects of mobile
Ill effects of mobileIll effects of mobile
Ill effects of mobilesurbhi_vijh
 
Introduction to User Experience - Mike Biggs
Introduction to User Experience - Mike BiggsIntroduction to User Experience - Mike Biggs
Introduction to User Experience - Mike BiggsThoughtworks
 

Viewers also liked (20)

Outside In - Behaviour Driven Development (BDD)
Outside In - Behaviour Driven Development (BDD)Outside In - Behaviour Driven Development (BDD)
Outside In - Behaviour Driven Development (BDD)
 
Behavior Driven Development (BDD) and Agile Testing
Behavior Driven Development (BDD) and Agile TestingBehavior Driven Development (BDD) and Agile Testing
Behavior Driven Development (BDD) and Agile Testing
 
Stop Hiring Devops Experts (And Start Growing Them) - PuppetConf 2013
Stop Hiring Devops Experts (And Start Growing Them) - PuppetConf 2013Stop Hiring Devops Experts (And Start Growing Them) - PuppetConf 2013
Stop Hiring Devops Experts (And Start Growing Them) - PuppetConf 2013
 
Code as a Communication Tool
Code as a Communication ToolCode as a Communication Tool
Code as a Communication Tool
 
ThoughtWorks Quarterly Technology Briefing, London, September 2009
ThoughtWorks Quarterly Technology Briefing, London, September 2009ThoughtWorks Quarterly Technology Briefing, London, September 2009
ThoughtWorks Quarterly Technology Briefing, London, September 2009
 
Ciso executive summit 2012
Ciso executive summit 2012Ciso executive summit 2012
Ciso executive summit 2012
 
Presenting the BetaCodex (BetaCodex06)
Presenting the BetaCodex (BetaCodex06)Presenting the BetaCodex (BetaCodex06)
Presenting the BetaCodex (BetaCodex06)
 
Agile Recruiting White Paper
Agile Recruiting White PaperAgile Recruiting White Paper
Agile Recruiting White Paper
 
TDD, BDD and mocks
TDD, BDD and mocksTDD, BDD and mocks
TDD, BDD and mocks
 
Lean Times Require Lean Thinking
Lean Times Require Lean ThinkingLean Times Require Lean Thinking
Lean Times Require Lean Thinking
 
Tech Lead Skills for Developers
Tech Lead Skills for DevelopersTech Lead Skills for Developers
Tech Lead Skills for Developers
 
Bdd (Behavior Driven Development)
Bdd (Behavior Driven Development)Bdd (Behavior Driven Development)
Bdd (Behavior Driven Development)
 
Mass Media
Mass MediaMass Media
Mass Media
 
managing change in the digital environment
managing change in the digital environmentmanaging change in the digital environment
managing change in the digital environment
 
BDD-Driven Microservices
BDD-Driven MicroservicesBDD-Driven Microservices
BDD-Driven Microservices
 
Effects of social networking
Effects of social networkingEffects of social networking
Effects of social networking
 
Rolf Russel - system thinking
Rolf Russel - system thinkingRolf Russel - system thinking
Rolf Russel - system thinking
 
Cucumber ppt
Cucumber pptCucumber ppt
Cucumber ppt
 
Ill effects of mobile
Ill effects of mobileIll effects of mobile
Ill effects of mobile
 
Introduction to User Experience - Mike Biggs
Introduction to User Experience - Mike BiggsIntroduction to User Experience - Mike Biggs
Introduction to User Experience - Mike Biggs
 

Similar to Behaviour-Driven Development: Writing software that matters

Why Your Agile Rollout Is Failing
Why Your Agile Rollout Is FailingWhy Your Agile Rollout Is Failing
Why Your Agile Rollout Is FailingDan North
 
An idea in a making
An idea in a makingAn idea in a making
An idea in a makingLisa Tyboni
 
NDC 2011 - SpecFlow: Pragmatic BDD for .NET
NDC 2011 - SpecFlow: Pragmatic BDD for .NETNDC 2011 - SpecFlow: Pragmatic BDD for .NET
NDC 2011 - SpecFlow: Pragmatic BDD for .NETjbandi
 
Devnology back toschool software reengineering
Devnology back toschool software reengineeringDevnology back toschool software reengineering
Devnology back toschool software reengineeringDevnology
 
Introduction to Optimization Group
Introduction to Optimization GroupIntroduction to Optimization Group
Introduction to Optimization GroupTom_Thompson
 
Lean & agile 101 for Astute Entrepreneurs
Lean & agile 101 for Astute EntrepreneursLean & agile 101 for Astute Entrepreneurs
Lean & agile 101 for Astute EntrepreneursClaudio Perrone
 
Exemplar: Designing Sensor-based interactions by demonstration... (a CHI2007 ...
Exemplar: Designing Sensor-based interactions by demonstration... (a CHI2007 ...Exemplar: Designing Sensor-based interactions by demonstration... (a CHI2007 ...
Exemplar: Designing Sensor-based interactions by demonstration... (a CHI2007 ...bjoern611
 
Building a DevOps Team that isn't Evil
Building a DevOps Team that isn't EvilBuilding a DevOps Team that isn't Evil
Building a DevOps Team that isn't EvilIBM UrbanCode Products
 
Cs 1023 lec 4 (week 1)
Cs 1023 lec 4 (week 1)Cs 1023 lec 4 (week 1)
Cs 1023 lec 4 (week 1)stanbridge
 
Yes But What Do We Do?
Yes But What Do We Do?Yes But What Do We Do?
Yes But What Do We Do?John Caswell
 
A Grand Unified Theory of Software
A Grand Unified Theory of SoftwareA Grand Unified Theory of Software
A Grand Unified Theory of Softwarevinod_dinakaran
 
Splunk September 2023 User Group PDX.pdf
Splunk September 2023 User Group PDX.pdfSplunk September 2023 User Group PDX.pdf
Splunk September 2023 User Group PDX.pdfAmanda Richardson
 
Product Development 230109
Product Development 230109Product Development 230109
Product Development 230109Espen Sivertsen
 
A Developers Take on Cooper
A Developers Take on CooperA Developers Take on Cooper
A Developers Take on CooperAdam Jordens
 
Execute for Every Screen
Execute for Every ScreenExecute for Every Screen
Execute for Every ScreenSteven Hoober
 
Domain Driven Design Development Spring Portfolio
Domain Driven Design Development Spring PortfolioDomain Driven Design Development Spring Portfolio
Domain Driven Design Development Spring PortfolioSrini Penchikala
 
Pnp Agile Tech Ed India
Pnp Agile Tech Ed IndiaPnp Agile Tech Ed India
Pnp Agile Tech Ed Indiarsnarayanan
 
Collaboration Tools to Create Better Products
Collaboration Tools to Create Better ProductsCollaboration Tools to Create Better Products
Collaboration Tools to Create Better ProductsEnthiosys Inc
 

Similar to Behaviour-Driven Development: Writing software that matters (20)

Why Your Agile Rollout Is Failing
Why Your Agile Rollout Is FailingWhy Your Agile Rollout Is Failing
Why Your Agile Rollout Is Failing
 
ASE01.ppt
ASE01.pptASE01.ppt
ASE01.ppt
 
An idea in a making
An idea in a makingAn idea in a making
An idea in a making
 
NDC 2011 - SpecFlow: Pragmatic BDD for .NET
NDC 2011 - SpecFlow: Pragmatic BDD for .NETNDC 2011 - SpecFlow: Pragmatic BDD for .NET
NDC 2011 - SpecFlow: Pragmatic BDD for .NET
 
Devnology back toschool software reengineering
Devnology back toschool software reengineeringDevnology back toschool software reengineering
Devnology back toschool software reengineering
 
Methodology
MethodologyMethodology
Methodology
 
Introduction to Optimization Group
Introduction to Optimization GroupIntroduction to Optimization Group
Introduction to Optimization Group
 
Lean & agile 101 for Astute Entrepreneurs
Lean & agile 101 for Astute EntrepreneursLean & agile 101 for Astute Entrepreneurs
Lean & agile 101 for Astute Entrepreneurs
 
Exemplar: Designing Sensor-based interactions by demonstration... (a CHI2007 ...
Exemplar: Designing Sensor-based interactions by demonstration... (a CHI2007 ...Exemplar: Designing Sensor-based interactions by demonstration... (a CHI2007 ...
Exemplar: Designing Sensor-based interactions by demonstration... (a CHI2007 ...
 
Building a DevOps Team that isn't Evil
Building a DevOps Team that isn't EvilBuilding a DevOps Team that isn't Evil
Building a DevOps Team that isn't Evil
 
Cs 1023 lec 4 (week 1)
Cs 1023 lec 4 (week 1)Cs 1023 lec 4 (week 1)
Cs 1023 lec 4 (week 1)
 
Yes But What Do We Do?
Yes But What Do We Do?Yes But What Do We Do?
Yes But What Do We Do?
 
A Grand Unified Theory of Software
A Grand Unified Theory of SoftwareA Grand Unified Theory of Software
A Grand Unified Theory of Software
 
Splunk September 2023 User Group PDX.pdf
Splunk September 2023 User Group PDX.pdfSplunk September 2023 User Group PDX.pdf
Splunk September 2023 User Group PDX.pdf
 
Product Development 230109
Product Development 230109Product Development 230109
Product Development 230109
 
A Developers Take on Cooper
A Developers Take on CooperA Developers Take on Cooper
A Developers Take on Cooper
 
Execute for Every Screen
Execute for Every ScreenExecute for Every Screen
Execute for Every Screen
 
Domain Driven Design Development Spring Portfolio
Domain Driven Design Development Spring PortfolioDomain Driven Design Development Spring Portfolio
Domain Driven Design Development Spring Portfolio
 
Pnp Agile Tech Ed India
Pnp Agile Tech Ed IndiaPnp Agile Tech Ed India
Pnp Agile Tech Ed India
 
Collaboration Tools to Create Better Products
Collaboration Tools to Create Better ProductsCollaboration Tools to Create Better Products
Collaboration Tools to Create Better Products
 

More from Skills Matter

5 things cucumber is bad at by Richard Lawrence
5 things cucumber is bad at by Richard Lawrence5 things cucumber is bad at by Richard Lawrence
5 things cucumber is bad at by Richard LawrenceSkills Matter
 
Patterns for slick database applications
Patterns for slick database applicationsPatterns for slick database applications
Patterns for slick database applicationsSkills Matter
 
Scala e xchange 2013 haoyi li on metascala a tiny diy jvm
Scala e xchange 2013 haoyi li on metascala a tiny diy jvmScala e xchange 2013 haoyi li on metascala a tiny diy jvm
Scala e xchange 2013 haoyi li on metascala a tiny diy jvmSkills Matter
 
Oscar reiken jr on our success at manheim
Oscar reiken jr on our success at manheimOscar reiken jr on our success at manheim
Oscar reiken jr on our success at manheimSkills Matter
 
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...Skills Matter
 
Cukeup nyc ian dees on elixir, erlang, and cucumberl
Cukeup nyc ian dees on elixir, erlang, and cucumberlCukeup nyc ian dees on elixir, erlang, and cucumberl
Cukeup nyc ian dees on elixir, erlang, and cucumberlSkills Matter
 
Cukeup nyc peter bell on getting started with cucumber.js
Cukeup nyc peter bell on getting started with cucumber.jsCukeup nyc peter bell on getting started with cucumber.js
Cukeup nyc peter bell on getting started with cucumber.jsSkills Matter
 
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...Skills Matter
 
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...Skills Matter
 
Progressive f# tutorials nyc don syme on keynote f# in the open source world
Progressive f# tutorials nyc don syme on keynote f# in the open source worldProgressive f# tutorials nyc don syme on keynote f# in the open source world
Progressive f# tutorials nyc don syme on keynote f# in the open source worldSkills Matter
 
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...Skills Matter
 
Dmitry mozorov on code quotations code as-data for f#
Dmitry mozorov on code quotations code as-data for f#Dmitry mozorov on code quotations code as-data for f#
Dmitry mozorov on code quotations code as-data for f#Skills Matter
 
A poet's guide_to_acceptance_testing
A poet's guide_to_acceptance_testingA poet's guide_to_acceptance_testing
A poet's guide_to_acceptance_testingSkills Matter
 
Russ miles-cloudfoundry-deep-dive
Russ miles-cloudfoundry-deep-diveRuss miles-cloudfoundry-deep-dive
Russ miles-cloudfoundry-deep-diveSkills Matter
 
Simon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelismSimon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelismSkills Matter
 
I went to_a_communications_workshop_and_they_t
I went to_a_communications_workshop_and_they_tI went to_a_communications_workshop_and_they_t
I went to_a_communications_workshop_and_they_tSkills Matter
 

More from Skills Matter (20)

5 things cucumber is bad at by Richard Lawrence
5 things cucumber is bad at by Richard Lawrence5 things cucumber is bad at by Richard Lawrence
5 things cucumber is bad at by Richard Lawrence
 
Patterns for slick database applications
Patterns for slick database applicationsPatterns for slick database applications
Patterns for slick database applications
 
Scala e xchange 2013 haoyi li on metascala a tiny diy jvm
Scala e xchange 2013 haoyi li on metascala a tiny diy jvmScala e xchange 2013 haoyi li on metascala a tiny diy jvm
Scala e xchange 2013 haoyi li on metascala a tiny diy jvm
 
Oscar reiken jr on our success at manheim
Oscar reiken jr on our success at manheimOscar reiken jr on our success at manheim
Oscar reiken jr on our success at manheim
 
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
 
Cukeup nyc ian dees on elixir, erlang, and cucumberl
Cukeup nyc ian dees on elixir, erlang, and cucumberlCukeup nyc ian dees on elixir, erlang, and cucumberl
Cukeup nyc ian dees on elixir, erlang, and cucumberl
 
Cukeup nyc peter bell on getting started with cucumber.js
Cukeup nyc peter bell on getting started with cucumber.jsCukeup nyc peter bell on getting started with cucumber.js
Cukeup nyc peter bell on getting started with cucumber.js
 
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
 
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
 
Progressive f# tutorials nyc don syme on keynote f# in the open source world
Progressive f# tutorials nyc don syme on keynote f# in the open source worldProgressive f# tutorials nyc don syme on keynote f# in the open source world
Progressive f# tutorials nyc don syme on keynote f# in the open source world
 
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
 
Dmitry mozorov on code quotations code as-data for f#
Dmitry mozorov on code quotations code as-data for f#Dmitry mozorov on code quotations code as-data for f#
Dmitry mozorov on code quotations code as-data for f#
 
A poet's guide_to_acceptance_testing
A poet's guide_to_acceptance_testingA poet's guide_to_acceptance_testing
A poet's guide_to_acceptance_testing
 
Russ miles-cloudfoundry-deep-dive
Russ miles-cloudfoundry-deep-diveRuss miles-cloudfoundry-deep-dive
Russ miles-cloudfoundry-deep-dive
 
Serendipity-neo4j
Serendipity-neo4jSerendipity-neo4j
Serendipity-neo4j
 
Simon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelismSimon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelism
 
Plug 20110217
Plug   20110217Plug   20110217
Plug 20110217
 
Lug presentation
Lug presentationLug presentation
Lug presentation
 
I went to_a_communications_workshop_and_they_t
I went to_a_communications_workshop_and_they_tI went to_a_communications_workshop_and_they_t
I went to_a_communications_workshop_and_they_t
 
Plug saiku
Plug   saikuPlug   saiku
Plug saiku
 

Recently uploaded

APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDGMarianaLemus7
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentationphoebematthew05
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 

Recently uploaded (20)

APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDG
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentation
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 

Behaviour-Driven Development: Writing software that matters

  • 1. Behaviour-Driven Development Writing software that matters Dan North, ThoughtWorks Liz Keogh, Lunivore
  • 2. Part 1: Software that doesn’t matter 2 © Dan North, ThoughtWorks
  • 3. Failure modes – a field guide The project comes in late ...or costs too much to finish The application does the wrong thing It is unstable in production It breaks the rules The code is impossible to work with 3 © Dan North, ThoughtWorks
  • 4. How we deliver software Planning Analysis Design Deploy Code Test t Why do we do this? 4 © Dan North, ThoughtWorks
  • 5. The exponential change curve $ Planning Analysis Design Deploy Code Test t 5 © Dan North, ThoughtWorks
  • 6. The exponential change curve $ We fear this... so we do t which this... reinforces this! 6 © Dan North, ThoughtWorks
  • 7. If only we could deliver better... Deliver features rather than modules Prioritise often, change often Only focus on high-value features Flatten the cost of change Adapt to feedback Learn! 7 © Dan North, ThoughtWorks
  • 8. What we would need Adaptive planning Streaming requirements Evolving design Code we can change Frequent code integration Run all the regression tests often Frequent deployments 8 © Dan North, ThoughtWorks
  • 9. Part 2: Software that matters 9 © Dan North, ThoughtWorks
  • 10. A loose definition of BDD “Behaviour-driven development is about implementing an application by describing its behaviour from the perspective of its stakeholders” - Me  10 © Dan North, ThoughtWorks
  • 11. A more formal definition of BDD “BDD is a second-generation, outside-in, pull-based, multiple- stakeholder, multiple-scale, high- automation, agile methodology. “It describes a cycle of interactions with well-defined outputs, resulting in the delivery of working, tested software that matters.” 11 © Dan North, ThoughtWorks
  • 12. ...second generation... BDD is derivative Derives from: XP, especially TDD and CI Acceptance Test-Driven Planning Lean principles Domain-Driven Design Influenced by: Neurolinguistic Programming (NLP) Systems Thinking 12 © Dan North, ThoughtWorks
  • 13. ...cycle of interactions... BDD in six pictures 13 © Dan North, ThoughtWorks
  • 14. ...cycle of interactions... The roles in a BDD team The stakeholders The analysts (or BAs) The testers (or QAs) The developers The project manager (or Boss) 14 © Dan North, ThoughtWorks
  • 15. ...outside-in... Who is this application for? Vision (or Purpose) Outcome Outcome Outcome Feature set Feature set Feature set Feature set Features... Features... Features... ... Stories... Stories... ... Scenarios... ... 15 © Dan North, ThoughtWorks
  • 16. ...clearly-defined outputs... What’s in a story? A story is a unit of delivery Story 28 - View patient details As an Anaesthetist I want to view the Patient’s surgical history So that I can choose the most suitable gas 16 © Dan North, ThoughtWorks
  • 17. ...clearly-defined outputs... Focus on the value Story 28 - View patient details In order to choose the most suitable gas an Anaesthetist wants to view the Patient’s surgical history 17 © Dan North, ThoughtWorks
  • 18. ...clearly-defined outputs... Focus on the value Story 29 – Log patient details In order to choose the most suitable gas an Anaesthetist wants other Anaesthetists to log the Patient’s surgical history for later retrieval 18 © Dan North, ThoughtWorks
  • 19. ...clearly-defined outputs... Agree on “done” Define scope using scenarios Scenario – existing patient with history Given we have a patient on file And the patient has had previous surgery When I request the Patient’s surgical history Then I see all the previous treatments 19 © Dan North, ThoughtWorks
  • 20. ...clearly-defined outputs... Automate the scenarios Make each step executable Given we have a patient on file In Ruby: Given “we have a patient on file” do # ... end In Java: @Given(“we have a patient on file”) public void createPatientOnFile() { // ... } 20 © Dan North, ThoughtWorks
  • 21. ...clearly-defined outputs... Code-by-example to implement Also known as TDD Start at the edges, with what you know Implement outermost objects and operations Discover collaborators, working inwards and mock them out for now Repeat until “Done” If the model doesn’t “feel” right, experiment! 21 © Dan North, ThoughtWorks
  • 22. ...clearly-defined outputs... Code-by-example example Scenario Examples Scenario 22 © Dan North, ThoughtWorks
  • 23. ...clearly-defined outputs... Good tools can help here Cucumber or JBehave for stories RSpec, XUnit for code examples Mockito, Mocha, Moq for mocking Be opinionated rather than dogmatic with the tooling! 23 © Dan North, ThoughtWorks
  • 24. ...clearly-defined outputs... We keep the development artifacts Examples become code tests …and documentation Scenarios become acceptance tests which become regression tests ...and documentation Automation is key 24 © Dan North, ThoughtWorks
  • 25. Part 3: Getting the words right 25 © Dan North, ThoughtWorks
  • 26. 26 © Dan North, ThoughtWorks
  • 27. Domain-driven design 101 Model your domain ...and identify the core domain Create a shared language ...and make it ubiquitous Determine the model’s bounded context ...and think about what happens at the edges 27 © Dan North, ThoughtWorks
  • 28. The map is not the territory There are many kinds of model Each is useful in different contexts There is no “perfect” domain model So don’t try to create one! Domain modelling takes practice 28 © Dan North, ThoughtWorks
  • 29. A legacy domain modelling example Map<int, Map<int, int>> portfolioIdsByTraderId; if (portfolioIdsByTraderId.get(trader.getId()) .containsKey(portfolio.getId())) {...} becomes: if (trader.canView(portfolio)) {...} 29 © Dan North, ThoughtWorks
  • 30. We often manage multiple domains You want to retrieve patient records in Java, using Hibernate so you define class HibernatePatientRecordRepository { What if your IDE did domain-specific fonts? 30 © Dan North, ThoughtWorks
  • 31. Writing effective stories Each story represents (part of) a feature and each feature belongs to a stakeholder Each stakeholder represents a domain even the incidental stakeholders Mixing domains within a scenario leads to brittle tests What exactly is the scenario verifying? What does it mean when things change? “What does the stakeholder want from this story?” 31 © Dan North, ThoughtWorks
  • 32. Conclusion 32 © Dan North, ThoughtWorks
  • 33. Software that matters ...has tangible stakeholder value ...is delivered on time, incrementally ...is easy to deploy and manage ...is robust in production ...is easy to understand and communicate BDD is a step in that direction 33 © Dan North, ThoughtWorks
  • 34. Thank you Any questions? dan.north@thoughtworks.com http://dannorth.net @tastapod liz@lunivore.com http://lizkeogh.com @lunivore Google Group: BehaviorDrivenDevelopment 34 © Dan North, ThoughtWorks
  • 35. Bibliography Extreme Programming explained (2nd edition) - Kent Beck Domain-Driven Design - Eric Evans The Art of Systems Thinking and The Way of NLP - Joseph O’Connor 35 © Dan North, ThoughtWorks