You are a techie. You might be an engineer or a web programmer or whatever. You get given requirements by management. Sometimes these requirements are explicit and measurable. This means that you know exactly what to do and how to do it and you can tell, at the end of the job, whether the requirements were met.
"Make a web form that lets someone create an account on our server" - while the implementation details are left up to you, the end result is testable and can be signed off by management. "Could I create an account with this form? Yes I could, thank you very much."
Other times the requirements you get from management are nebulous, flaky or incomplete.
When you get nebulous requirements, how can you tell that you've met them?
A colleague of mine was recently tasked with selecting "similar" data from a database in a search from a web form. This is an example of a nebulous requirement. How similar? Is 5 similar to 10? Is "there" similar to "their"? Is "tomorrow" similar to "tomato"? Is 10000 similar to 20000? Who knows?
Yes, there are algorithms that exist for this type of requirement. Soundex is an algorithm that can be used on English strings to match similar sounding items. Using Soundex, "there" and "their" are equal (which means that they sound similar as spoken in the English language.)
If the requirement my colleague got was to return similar sounding strings in the English language then he could have suggested using Soundex which is a well known, well tested and vastly used algorithm. Management would have agreed, then the requirement could have been changed to be "implement Soundex in the search."
Acceptance testing could then easily prove that this requirement was either met or not met because it is explicit, the algorithm is well known and input and output data can be used to test the implementation.
However the "similar items" requirement also applied to numerical data. My colleague devised a mathematical algorithm himself with an arbitrary percentage allowance between the sought number and the returned numbers. He also had another idea with standard deviations... I'm not sure what he ended up going with. Here's the juicy bit: it doesn't matter. The point is that managment said "SIMILAR!" and he had to decide what "similar" meant.
When my colleague has completed his code, will management be happy? If they want to they can tell you that it wasn't what they were looking for and you need to tweak it - and when would the tweaking end?
When someone has to maintain his code will they understand what was being attempted? A lot of nice commenting could explain what was supposed to be happening, but won't prove that anyone's idea of "similar" is being implemented at all.
If I was in the position of my colleague I would have explained to management that the requirements were nebulous and needed clarification with HARD DATA. When you are given a requirement you should be able to prove (to the best of anyone's ability) that the requirement was or was not met!
YOU DO THIS WITH USER ACCEPTANCE TEST DATA.
If I came to you and said I wanted the data in my application to be more springy, you would be in for a great deal of trouble:
Consider this however: what if I came to you and told you that I want the data to be more springy and gave you a list of 100 examples of a conversion between NON-springy data and springy data? And what if I said that to test whether your implementation worked all I was going to do was to test the data I had given you in the system?
YOU CAN NOW CREATE AN IMPLEMENTATION THAT YOU CAN TEST AND GET SIGNED-OFF. BY DEFINITION, YOUR IMPLEMENTATION MEETS THE REQUIREMENTS AS LONG AS THAT TEST DATA PASSES.
Now - obviously the springy example doesn't hold up well to scrutiny because it is a nonsense word in the context of data - it should be replaced with whatever nebulous requirement you are given today :-)
If my colleague had done one of these two things:
then, I believe, he would be in a better position - a position where he could prove that he had done his job.
Note: Whether management were or were not satisfied with my colleague's results is not the issue. I personally think he did a great job technically - but the issues I am concerned about are provability and maintainability of code.
Django Python 960.gs Git Vim NetBSD Nginx
The author is a software engineer living in Australia. He sux at guitar, loves camping, doesn't like cake, does like coffee and is a lazy home brewer.
Help
Latest entries
*BSD Agile Apache Apple Athletics Beer Best-Practice Censorship Comedy Cool Crosswords Deployment Django English Exim Firefox Git Hardcore Health Interface irssi Javascript Jira Languages Linux Makefile Markdown Mathematics Mobile Broadband MySQL NetBSD nginx Nokia OSX Perl Photo Privacy Python Rant Requirements rsync Ruby Shell Slackware SQL SQLite SSH Standards Subversion Testing ThisBlog Vim VMWare (Fusion) VPN WDTEM X Yum zsh
Yum
Possum
Git's Index
Jira Project Keys
The Coffee Shop
Git GUI
It is more important...
Questioning Unix (and Other) File Times
The Frog King Photo
Rain Cloud Photo
rsync
Timezone
utf8 in your Perl
Theatre Ceiling Photo
Some problems are so complex...
Colours in your PAGER
zsh vared
zsh magic-equals and double-star
Funny Tweets
iMac 27" i7
ChoppingBoard, Project365, RageQuit