Long Story Short
Not a tech blog today more just a store on design and development. So here goes.
Once upon a time not too long ago and not very far away I was happily working working away when the dreaded battle started between 'The Design' and the 'The Process' types.
Well the end of this was that neither side won their little war and as the big hats came in an 'solved' the team problems by a compromise which left both sides unhappy and shall we say not on speaking terms.
So on the process side the great and glorious 'Scrum' process was adopted (btw not the choice of the Process types) and on the design side they stuck with good old Requirements and Design from the 'Waterfall' model we all know and love.
The real rub was the chief process guy was put in charge of the requirements and the chief design person was place in charge of the process. Needless to say I smelt disaster from a long way off.
Well some time later when 90% of the budget was spent we did accomplish a large number of meetings with minutes and a rather thick requirements doc with an equally thick design doc which either side bother to I thing even read.
With no time or budge left to code the project it was sent it off-shore to some Cyber Coolie shop.
Now the problem that lead to the train wreck was not the code coming back from our coolies it was exactly to specification and their coding and design was sound and well crafted.
The problem was the specification called for an API using REST against a set of resources so to comply with that the designer simply lifted the design off the wc3 website and filled in the blanks with the resources from the Spec.
Well my part in this was a 'Applications Specialist' (what ever that is??) so I was handed the design and told to come up with the test suite for it long before any code was created. The perl angle being that I wrote up the tests in perl,
I duly created my test scripts against the the design and things worked and passed with very few iteration back to our coolies. Soon it was coming to release date and me being me I decided that I would try a few things outside the design box and wrote up a little test that used the HTTP delete Method against a full collection;
my $agent = LWP::UserAgent->new; my $url = 'http://projects/1/users'; my $req = HTTP::Request->new(DELETE => $url);
sure enough all the users on the project where deleted. Then I tried
my $url = 'http://projects'; my $req = HTTP::Request->new(DELETE => $url);
and all the projects where deleted.
I then when though numerous other combinations of DELETE and PUT where I was wreak great havoc on the system 1 day before going live and postponed the launch by two months. Suddenly there where no projects, products, accounts, clients and just one record in orders and only one record in users.
Now the short part of the story.
The offshore people did as they where told as they designed to spec, as deleting collections is part of REST. The designers where not to blame as they just fulfilled requirements and the requirements people where not to blame as the designers did not interpret the specs correct.
Seems in the end it was all my fault as I did un-authorided testing???
One has to wonder with all the Scrum standup meetings and design review how something like that would fall though the cracks.
Oh well C'est la guerre