Matt Wynne, founder at Cucumber Ltd spoke at QCon London 2015 on how BDD can leverage the benefits of Agile on teams struggling with common patterns like lack of predictability, communication and quality.
Working with companies that asked for help, Wynne noticed that they often ran into those problems because they have misunderstood the difference between being agile, attain agility and acquiring some kind of agile practices just by following a cargo cult approach.
To fight against pain points typically found, he proposed to bring back some of the agile characteristics eventually lost. Predictability will increase if teams start to build small pieces of software, communication will work better if teams collaborate on a daily basis and quality would be improved if a technical discipline was followed.
He then described, on his own view, why BDD may be helpful on this.
According to Wikipedia,
“Behavior-driven development (BDD) is a software development process that emerged from test-driven development (TDD). Behavior-driven development combines the general techniques and principles of TDD with ideas from domain-driven design and object-oriented analysis and design to provide software development and management teams with shared tools and a shared process to collaborate on software development.”
Wynne focused his own definition on the behavior expected by the people who use it.
“BDD practitioners explore, discover, define and then drive out the desired behavior of software using conversations, concrete examples, and automated tests.”
Using cone of uncertainty, he showed how people go from an explore phase where the uncertainty is maximum to a drive out one where the certainty is as much it can be. The three tools suggested to go that journey were conversations, concrete examples and test-driven development.
Conversations matter because software is made by people, for people. Everyone has a unique perspective and all are important. A technique called discovery workshop, a “three amigos" workshop to discover scenarios for a user story, was proposed to strengthen the conversations tool. Concrete examples are important because they make sense to everyone, are rooted in the problem domain providing help to build a ubiquitous language and a shared source of truth.
Test-driven Development are mandatory because automated tests are the warning lights so, the advice is to not forget to listen what the tests are saying.
Wynne ends the talk remembering somehow the roots of TDD:
“You can’t stay agile without clean code
You can’t have clean code without refactoring
You can’t refactor without good automated tests”
Community comments
Not the right problem
by Sam McAfee,
Re: Not the right problem
by Bart Szulc,
Re: Not the right problem
by George Dinwiddie,
Not the right problem
by Sam McAfee,
Your message is awaiting moderation. Thank you for participating in the discussion.
I practiced pretty strict ATDD and BDD with teams from the days of Fit and Fitnesse and then adopted cucumber as soon as it was available. By 2013 we completely abandoned it. The main reason is because the problem most teams have is not between the product specifications and the code, but between the customer and the product manager. All BDD does is codify ways of specifying behavior. But if you want to iterate quickly with a/b testing and you don't know what the behavior should be, cucumber tests really slow you down. I've seen a lot of teams and very few cases where they are the least bit useful. So no BDD is not going to save Agile. Closing the gap with the customer is. Otherwise Agile is useless.
Re: Not the right problem
by Bart Szulc,
Your message is awaiting moderation. Thank you for participating in the discussion.
BDD isn't a perfect solution to all classes of problems. It just helps transition knowledge from one who has it and those who don't. Clearly while working on complex, not complicated, problems, no one has the knowledge, just hints, and you need to validate them as soon as possible. In such cases BDD is just overburden.
Re: Not the right problem
by George Dinwiddie,
Your message is awaiting moderation. Thank you for participating in the discussion.
The article doesn't highlight it well, but BDD is about closing the gap with the customer. If you've inserted a product manager as a bottleneck in that communication, you've created a problem with that.
If you have Three Amigos meeting with someone who knows what you're trying to build, then you're closing that gap. If you don't have someone with that knowledge, you'll need to do some product discovery to find out.
In any event, BDD is more than just acceptance testing. If that's the only part of BDD you were using, I'm not surprised you abandoned it.