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

ODP
Introduction to BDD
PDF
An introduction to Behavior-Driven Development (BDD)
PDF
BDD in Action – principles, practices and real-world application
PPTX
Test Automation Framework with BDD and Cucumber
PPTX
BDD presentation
PPTX
Agile Testing and Test Automation
PPTX
Introduction to Bdd and cucumber
PPTX
Behavior driven development (bdd)
Introduction to BDD
An introduction to Behavior-Driven Development (BDD)
BDD in Action – principles, practices and real-world application
Test Automation Framework with BDD and Cucumber
BDD presentation
Agile Testing and Test Automation
Introduction to Bdd and cucumber
Behavior driven development (bdd)

What's hot (20)

ODP
BDD with Cucumber
PPTX
BDD WITH CUCUMBER AND JAVA
PPTX
Acceptance Test Driven Development
PPTX
TDD - Agile
PDF
TDD and BDD and ATDD
ODP
Test Automation Framework using Cucumber BDD overview (part 1)
PPTX
Behavior Driven Development
KEY
ATDD in Practice
PPTX
Agile Testing: The Role Of The Agile Tester
PDF
Selenium with Cucumber
PPTX
Automated Test Framework with Cucumber
PPTX
QA Best Practices in Agile World_new
PDF
Behavior Driven Development (BDD)
PDF
Test Driven Development (TDD)
PPTX
Cucumber BDD
PPTX
Tdd and bdd
PDF
Cucumber ppt
PPT
Agile QA and Testing process
PPT
What Is Agile Scrum
BDD with Cucumber
BDD WITH CUCUMBER AND JAVA
Acceptance Test Driven Development
TDD - Agile
TDD and BDD and ATDD
Test Automation Framework using Cucumber BDD overview (part 1)
Behavior Driven Development
ATDD in Practice
Agile Testing: The Role Of The Agile Tester
Selenium with Cucumber
Automated Test Framework with Cucumber
QA Best Practices in Agile World_new
Behavior Driven Development (BDD)
Test Driven Development (TDD)
Cucumber BDD
Tdd and bdd
Cucumber ppt
Agile QA and Testing process
What Is Agile Scrum
Ad

Viewers also liked (20)

PDF
Outside In - Behaviour Driven Development (BDD)
PDF
Test and Behaviour Driven Development (TDD/BDD)
PPT
Behavior Driven Development (BDD) and Agile Testing
PDF
Behavior Driven Development with Cucumber
PDF
Stop Hiring Devops Experts (And Start Growing Them) - PuppetConf 2013
PDF
Code as a Communication Tool
PDF
ThoughtWorks Quarterly Technology Briefing, London, September 2009
PDF
Ciso executive summit 2012
PDF
Presenting the BetaCodex (BetaCodex06)
PDF
Agile Recruiting White Paper
PDF
TDD, BDD and mocks
PPT
Lean Times Require Lean Thinking
PDF
Tech Lead Skills for Developers
PDF
Bdd (Behavior Driven Development)
PPTX
Mass Media
PDF
managing change in the digital environment
PDF
BDD-Driven Microservices
PPTX
Effects of social networking
PDF
Rolf Russel - system thinking
PPT
Ill effects of mobile
Outside In - Behaviour Driven Development (BDD)
Test and Behaviour Driven Development (TDD/BDD)
Behavior Driven Development (BDD) and Agile Testing
Behavior Driven Development with Cucumber
Stop Hiring Devops Experts (And Start Growing Them) - PuppetConf 2013
Code as a Communication Tool
ThoughtWorks Quarterly Technology Briefing, London, September 2009
Ciso executive summit 2012
Presenting the BetaCodex (BetaCodex06)
Agile Recruiting White Paper
TDD, BDD and mocks
Lean Times Require Lean Thinking
Tech Lead Skills for Developers
Bdd (Behavior Driven Development)
Mass Media
managing change in the digital environment
BDD-Driven Microservices
Effects of social networking
Rolf Russel - system thinking
Ill effects of mobile
Ad

Similar to Bdd Introduction (20)

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

More from Skills Matter (20)

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

Recently uploaded (20)

PDF
Approach and Philosophy of On baking technology
PDF
Modernizing your data center with Dell and AMD
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Electronic commerce courselecture one. Pdf
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Advanced Soft Computing BINUS July 2025.pdf
PDF
[발표본] 너의 과제는 클라우드에 있어_KTDS_김동현_20250524.pdf
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Empathic Computing: Creating Shared Understanding
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PPTX
MYSQL Presentation for SQL database connectivity
PDF
solutions_manual_-_materials___processing_in_manufacturing__demargo_.pdf
PPTX
Big Data Technologies - Introduction.pptx
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
Approach and Philosophy of On baking technology
Modernizing your data center with Dell and AMD
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Network Security Unit 5.pdf for BCA BBA.
Electronic commerce courselecture one. Pdf
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Review of recent advances in non-invasive hemoglobin estimation
Advanced Soft Computing BINUS July 2025.pdf
[발표본] 너의 과제는 클라우드에 있어_KTDS_김동현_20250524.pdf
Understanding_Digital_Forensics_Presentation.pptx
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Mobile App Security Testing_ A Comprehensive Guide.pdf
“AI and Expert System Decision Support & Business Intelligence Systems”
Empathic Computing: Creating Shared Understanding
20250228 LYD VKU AI Blended-Learning.pptx
MYSQL Presentation for SQL database connectivity
solutions_manual_-_materials___processing_in_manufacturing__demargo_.pdf
Big Data Technologies - Introduction.pptx
Unlocking AI with Model Context Protocol (MCP)
The Rise and Fall of 3GPP – Time for a Sabbatical?

Bdd Introduction

  • 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