You probably don’t need a specification framework

I think plain language specification frameworks like SpecFlow and Cucumber are great, but have a lot of overhead and are way overused.

If you don’t have non-technical folk collaborating with you on your specifications, try writing plain automated tests instead. This means using plain NUnit/MSTest over SpecFlow in C# or minitest over Cucumber in Ruby. You’ll avoid the overhead of maintaining a plain language specification framework and be able to focus on developing a great set of tests instead.

It’s easier than you think to add a plain language specification layer to a set of well structured plain tests. So only add the specification layer when you need it, because chances are you ain’t gonna.

Author: Alister Scott

Alister is an Excellence Wrangler for Automattic.

2 thoughts on “You probably don’t need a specification framework”

  1. Good post. I think that a lot of the reason why people use the plain language test specification frameworks is that it’s part of the whole trend towards Behavior and Test Driven Development. I agree that they’re not really necessary, but even for a technical user, putting the test specification in a plain language format forces the devs and paradevs to think about the functionality of the software and remember that ultimately, it is most likely being used by someone without a technical background.

    But that’s just me playing the devil’s advocate. I agree that they seem to be overused, or at least that people don’t always truly consider the reasons why they’re being used. I think there’s a similar sort of “jump on the bandwagon and charge on forward blindly” type of attitude around a lot of “Agile” practices, ranging from usage of the term “user story” to usage of the Fibonacci sequence in complexity-based estimates as well.


  2. Good post. But curious to wonder, how would plain testing compare with a plain language specification framework when it comes to testing a system that spans multiple systems/endpoints and/or language platforms?

    From what I know, there’s not a lot of plain testing designed to facilitate integration between mobile, destkop, web, and other type apps, especially if they’re on different platforms (e.g. MS Azure/AWS for server/services, iOS for mobile, Java for desktop, etc.). So one may have to roll their own integration among the plain testing tools for this?

    There might not be a whole lot in this case for plain language specification frameworks either though. But there is one that I know of that at least facilitates integrating different (language) platforms together by offering a base design to integrate with: (using the remote library/server API when just Python, Jython, and IronPython are not enough). It is quite popular/useful enough that 3rd party folks have built up remote library API servers in different languages for this framework to facilitate others to integrate with the remote library API in desired language without having to roll their own server component for it.


Comments are closed.