Ayende @ Rahien

My name is Oren Eini
Founder of Hibernating Rhinos LTD and RavenDB.
You can reach me by phone or email:


+972 52-548-6969

, @ Q c

Posts: 6,026 | Comments: 44,842

filter by tags archive

My BDD experiment

time to read 5 min | 827 words

I am trying to get BDD. As such, I started with building a list of specifications. Here is what I have so far. Now you get the chance to tell me why I am wrong...

As a user
I want to be able to see the latest webcast summary on the homepage
So that I have great visibility on what is new
Acceptance criteria:
- Can see the name of the latest webcast
- Can see the date it was published
- Can read the short description
As a user
I want to be able to see the details of a webcast
So that I can see more details about the webcast
Acceptance criteria:
- Can see the name of the latest webcast
- Can read the short description
- Can view number of downloads
- Can view relevant files
As a user
I want to be able to browse the archives of the site
So I can see old shows
Acceptance criteria:
- Can see the names of all published webcasts
- Can click to the details of each webcast
- Can view number of downloads
- Can sort the list
As a user
I want to be able to subscribe to an RSS feed of the webcasts
So that I wouldn't have to check the site all the time
Acceptance criteria:
- Each page on the site should have RSS link for news
- Publishing a new webcast would appear on the RSS
As an administor
I want to be able to add a new webcast
So that I can publish new webcasts
Acceptance criteria:
- Can get to admin part of the site
- Can add a new webcast
- Will go through validation
- Can use rich text editor for the description
- Can set publish date
As an administrator
I want to be able to edit the details of an existing webcast
So that I can fix typos and change the data if I need to
Acceptance criteria:
- Requires login
- Goes through validation
- Will update the RSS feed
As an administrator
I want to be able to login to the site
So that I can perform administrative functions
Acceptance criteria:
- Requires login
- Unauthenticated users cannot login
- Non administrators cannot login
- Passwords are not kept in the clear


Eric Anderson


Our team has been using BDD for the last four months or so, and I must admit that I am completely hooked. BDD has generated the same amount of interest for me as TDD did initially.

It appears that you are aiming for executable stories. Personally, this is something that I avoid. I tend to speak about system behaviors more in the small. I still call out domain concepts in my BDD specifications, but those concepts may be much more granular than user-story level.

I am working on an extensive example that I hope to have available next week. If you're interested, feel free to shoot me an email or watch my blog (www.testinfected.net).

Ayende Rahien

Oh no. It is not executable, and it is not a DSL.

Those are notes about the story


What?!?!? No DSL?!?!

You've changed man. You've changed...


Derick Bailey

I think you are heading down the same rabbit hole that I have been going down, in terms of the stories you are writing - and it becomes problematic really quickly.

the problem is that we are developers and we constantly have the developer goggles on, even when we don't think we do. so we end up writing stories in the wrong format: As a [role], I want to [Do some specific thing] so that [I can do some specific thing]. What we really need to be writing is, As a [role], I want to [goal], so that [motivation].

The difference is subtle, but has a profound impact on the stories. The major difference is in the motivation - a true motivation is not to do what you already said you want to do, or to do your job (as I've written in several stories).

THe other issue is the role you've specified. "User" isn't a valid role; and perhaps "role" is the wrong word. Dan North, again, suggested the word "stakeholder". I've suggested "persona" a few times, as well. We have to keep in mind that the "motivation" is directly attributable to the role - why does this person want to accomplish the set task. a "user" just wants to "use" the system. However, a "Software developer" may want to "learn about (insert webcast topic here)".

As an example, look the first two stories that you've written. You basically have "i want to see stuff so that i can see stuff". I would re-write the first two stories here, into a single story with better motivation:

As a software developer, I want to find webcasts that are relevant to me, so that I can learn more about these topics and become a better developer.

Acceptance Criteria:

  • When displaying a webcast summary, include the following information

    • Name

    • Date Published

    • Short Description

  • When viewing the details of a webcast, display all relevant infomration about the webcast, including

    • Name

    • Date Published

    • Short Description

    • Number of Downloads

    • Relevant files and links

    • ... other stuff...

  • Should display the most recent webcast summary on the homepage

There are some very critical distinctions made in this story and criteria, vs. what you have originally written.

Notice that the story avoid the "do this so i can do that" format. It talks about a "software developer", which is the persona or stakeholder that you are targeting with your webcasts. It also talks about wanting to learn more about the topics in the webcasts - which is ultimately why we want to watch webcasts, in the first place.

The acceptance criteria is also significantly different. Notice that we've completely separated the "homepage" language into a separate criteria. This is because the word homepage begins to talk more about technical details or implementation. It's critical that we know to put the summary on the homepage, but we should not mix the behavioral criteria (displaying the summary) with the implementation criteria (display it on the homepage). Keeping these separate will give you more clearly defined criteria to work with and allow your unit tests to be more clearly written and scoped. For example, you should not need to write an integration test to view the homepage, just to test the summary display. By separating these criteria, we are not forced into that situation.


Dan North pointed these same problems in my stories, and pointed me to this post, which helped me understand what I was doing wrong:


For a bit more information on my perspective in user stories and acceptance criteria, see the following post from a week or two ago:


Ayende Rahien


This is exactly the sort of info I was looking for when I posted that. Thanks!


Thanks Derick

Comment preview

Comments have been closed on this topic.


No future posts left, oh my!


  1. Technical observations from my wife (3):
    13 Nov 2015 - Production issues
  2. Production postmortem (13):
    13 Nov 2015 - The case of the “it is slow on that machine (only)”
  3. Speaking (5):
    09 Nov 2015 - Community talk in Kiev, Ukraine–What does it take to be a good developer
  4. Find the bug (5):
    11 Sep 2015 - The concurrent memory buster
  5. Buffer allocation strategies (3):
    09 Sep 2015 - Bad usage patterns
View all series


Main feed Feed Stats
Comments feed   Comments Feed Stats