I had a interesting conversation with Kevlin Henney at Øredev regarding the word ‘should’ and its usage in Behaviour Driven Development. Kevlin does not like ‘should’ as he feels it is too vague in many circumstances. And I have to agree with Kevlin.
Sometime you are speccing something like “the title of the index page should be ‘blabbr.com - the worlds largest social network’”, which might be something that we will change in the future. ‘Should’ is a good choice of words here.
Another time the spec says ‘when the nuclear reactor overheats it should shut down.’. ‘Should’ is not a good choice of word here. I’d much rather say that the nuclear reactor must shutdown, as to really say that we have no other option.
So, let’s use both. Use ‘should’ when describing a something might change, and ‘must’ when describing something carved in rock.
This might also help using the specs as an executable requirement. At the moment all specs are valued the same, every fail breaks the build. Perhaps there is a value in saying that certain specs are really important and should never fail. We could have different colors for different types of failure.
Perhaps there is a use for the rest of MoSCoW?
Thoughts?