The standard development method they teach you in Software Engineering 101 is
- Get your requirements
- Come up with a top-bottom architectural design
- Code up modules one by one
- Test (Unit/System/Regression)
It’s a great approach and the solution you deliver can be built without compilation errors and work fine… or so you think. You deliver the solution and all of the sudden, the client points out that there were requirements missed and/or incomplete. My favorite taught-myself-in-24-hours-developer reaction to this is:
“But… it… compiles… therefore… it works… it has to!”
With Behavior-Driven Development (BDD), and one of the reasons this approach is favored by QA teams all over the world is this approach ensures and, actually, requires that you work against the user requirements when working on the design.