<commit_before>---
layout: post
author: aslak
title:  "The world's most misunderstood collaboration tool"
date:   2014-03-03 12:00:00
nav: blog
---

Cucumber reached a million downloads in the first three years and 5 million downloads 3 years later.
I'm happy to have created such a popular tool, but saddened to see how it's misused and misunderstood.

If you think Cucumber is a testing tool, please read on, because you are wrong.

Cucumber was born out of the frustration with ambiguous requirements and misunderstandings between the people who order the software and those who deliver it.

In 2003 I became part of a small clique of people from the XP community who were exploring better ways to do TDD. <NAME> named this BDD. The idea was to combine automated acceptance tests, functional requirements and software documentation into one format that would be understandable by non-technical people as well as testing tools.

There was a lot of trial and error and in 2008 I created Cucumber to distill what I had learned into a nice little package. My vision was to provide a language, a process and a tool that would provide a single source of truth of software behaviour. The audience would be both non-technical and technical project members.

![Single source of truth]({{ site.url }}/images/blog/single-source-of-truth.png)

Unfortunately you can't just download Cucumber, start writing Cucumber Features and expect
a nirvana of truth and enlightenment to happen on its own. There is a __process__ to follow that involves many roles on the software team.

This process is called BDD. It's what came out of that clique I mentioned. BDD is not a tool you can download.
<NAME> gave BDD a new and better name: __Specification by Example__.<commit_msg>Email pop-up test<commit_after>---
layout: post
author: aslak
title:  "The world's most misunderstood collaboration tool"
date:   2014-03-03 12:00:00
nav: blog
---
<script type="text/javascript" src="//s3.amazonaws.com/downloads.mailchimp.com/js/signup-forms/popup/embed.js" data-dojo-config="usePlainJson: true, isDebug: false"></script><script type="text/javascript">require(["mojo/signup-forms/Loader"], function(L) { L.start({"baseUrl":"mc.us3.list-manage.com","uuid":"45b545ab379403b3a62708443","lid":"e3650a477a"}) })</script>

Cucumber reached a million downloads in the first three years and 5 million downloads 3 years later.
I'm happy to have created such a popular tool, but saddened to see how it's misused and misunderstood.

If you think Cucumber is a testing tool, please read on, because you are wrong.

Cucumber was born out of the frustration with ambiguous requirements and misunderstandings between the people who order the software and those who deliver it.

In 2003 I became part of a small clique of people from the XP community who were exploring better ways to do TDD. <NAME> named this BDD. The idea was to combine automated acceptance tests, functional requirements and software documentation into one format that would be understandable by non-technical people as well as testing tools.

There was a lot of trial and error and in 2008 I created Cucumber to distill what I had learned into a nice little package. My vision was to provide a language, a process and a tool that would provide a single source of truth of software behaviour. The audience would be both non-technical and technical project members.

![Single source of truth]({{ site.url }}/images/blog/single-source-of-truth.png)

Unfortunately you can't just download Cucumber, start writing Cucumber Features and expect
a nirvana of truth and enlightenment to happen on its own. There is a __process__ to follow that involves many roles on the software team.

This process is called BDD. It's what came out of that clique I mentioned. BDD is not a tool you can download.
<NAME> gave BDD a new and better name: __Specification by Example__.
{'fraction_non_alphanumeric': 0.05788525855415488, 'fraction_numerical': 0.01980962181631078, 'mean_word_length': 4.6103896103896105, 'pattern_counts': {'":': 3, '<': 11, '<?xml version=': 0, '>': 11, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 9, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3439203', 'n_tokens_mistral': 1078, 'n_tokens_neox': 980, 'n_words': 572}