I'm a huge fan of the gherkin format, it let's me sketch out a feature and then work through it methodically, testing as I go. But cucumber has a critical flaw, it forces you to think about code while you're writing. Because step definitions are global you can't just write any old thing, you might fire off a step you wrote previously. This is only a side issue though, compared to the biggest problem, step reuse.
Given a person "fred" exists
And a person "ethel" exists
And a fatherhood exists with parent: person "fred", child: person "ethel"
Did someone mention cucumber steps are written in english? What happened to:
Given Ethel has a father called Fred
I moved over to Spinach[1] about 18 months ago and I've been much happier. Steps are specific to a feature so I can go to town with shakespearean english. Reuse isn't an issue either, it just happens in the step definitions, not in the gherkin files. Using more natural english tends to lead to fewer larger steps anyway, so it feels a lot less like call-by-regex.
Shakespearean English did you say? Something like this?
Borne o'er the cruel firmament become Ethel
That Fred hath usurp'st from her the silence
When lo! Upon them should harrow a fatherhood
Of parent, Fred besieged by the burden
And his daughter the indifferent imposition of child
Sounds great! I'd much rather use that than Cucumber.
[1] https://github.com/codegram/spinach