# Gherkin
[Gherkin](https://cucumber.io/docs/gherkin) is a syntax (or language) for writing specifications in such a way that they can easily be turned into actual tests. It is frequently combined with [[Behavior-Driven Development]]. One popular implementation for .NET is [[SpecFlow]], while in the F# world [TickSpec](https://github.com/fsprojects/tickspec) is preferred.
For Gherkin resources see the [Awesome Cucumber](https://github.com/virajkulkarni14/Awesome-Cucumber/) compendium.
The main benefit of Gherkin is that tests are written in plain English and not in code, which allows even end users to easily participate in writing tests. This frames the discussion between consumers and developers, driving the discussion about software expectations to the necessary level of detail.
In essence, Gherkin sentences describe specific scenarios (think use cases), in which software should behave in specific ways, if specific conditions are met. It is this tendency to specifics that leads to more detailed specifications, and thus to dealing with any specification issues earlier in the process, which hopefully reduces the number of specification changes after implementation has begun. The ultimate goal is that specifications are so detailed that the implementation is as straight forward as possible.
In addition, extensions like [[SpecFlow]] partly automate writing actual tests from Gherkin, which will hopefully provide the necessary nudge developers may need to go the [[Test-Driven Development|TDD]] route.