1 July, 1916.
British infantry launched a massive assault in France along the Somme River. It was a huge effort - days of artillery bombardment intended to destroy German trenches and defensive positions, as well as destroy the barbed wire obstacles in front of the German positions.
British infantry launched a massive assault in France along the Somme River. It was a huge effort - days of artillery bombardment intended to destroy German trenches and defensive positions, as well as destroy the barbed wire obstacles in front of the German positions.
The
best practices mandated by High Command included forming ranks after
scrambling "over the top" of the trenches, then march across
no-mans-land, overcome what would be left of the German defenses and
capture the German positions, thus breaching the lines and opening a
hole miles long though which reinforcements could pour, and send the
Germans reeling backward in defeat. Troops in the first two waves were
promised that field kitchens would follow behind them with a hot dinner,
and supplies of ammunition and more field rations would follow.
Brilliant
plan. Conformed to all the official Best Practices of the day. In a
training setting, the planners would have gotten very high marks indeed.
One very minor issue was it was based completely on unrealistic presumptions.
One very minor issue was it was based completely on unrealistic presumptions.
With luck, the best practices and directives you are getting are not in the same scale of life and death.
Being Done
What I have seen time and again, are mandates for a variety of things:
- All sprints must be 2 weeks long;
- Each team's Definition of Done MUST have provisions that ALL stories have automated tests;
- Automated tests must be present and run successfully before a story can be considered "done;"
- There is a demand for "increased code coverage" in tests - which means automated tests;
- Any tests executed manually are to be automated;
- All tests are to be included in the CI environment and into the full regression suite;
- Any bugs in the software means the Story is not "Done;"
- Everyone on the team is to write production/user-facing code because we are embracing the idea of the "whole team is responsible for quality."
Let me say that again.
- All "user stories" must have tests associated with them before they can be considered "Done;"
- Manual tests don't count as tests unless they are "automated" by the end of the sprint;
- All automated tests must be included in the CI tests;
- All automated tests must be included in the Regression Suite;
- All automated tests must increase code coverage;
- No bugs are allowed;
- Sprints must be two-weeks;
- Everyone must write code that goes into production;
- No one {predominantly/exclusively} tests, because the "whole team" is responsible for quality.
It seems to me organizations with controls like these tend to have no real idea how software is actually made.
There is another possibility - the "leaders" know these will be generally ignored.
Unfortunately, when people's performance is measured against things like "automated tests for every story" and "increased code coverage in automated tests" people tend to react precisely as most people who have considered human behavior would expect - their behavior and work changes to reflect the letter of the rules whilst ignoring the intent.
What will happen?
Automated tests will be created to demonstrate the code "works" per the expectation. These will be absolutely minimalist in nature. They will be of the "Happy Path" nature that confirms the software "works."
Rarely will you find deep, well considered tests in these instances because they take too long to develop, exercise, test (as in see if they are worth further effort) and then implement.
With each sprint being two weeks, and a mandate that no bugs are allowed, the team will simply not look very hard FOR the bugs.
When these things come together, all the conditions will be met:
- All the tests will be automated;
- All the tests will be included in the CI environment;
- All the tests will be included in the (automated) Regression suite;
- Code coverage will increase with each automated test (even if ever so slightly);
- Any bugs found will be fixed and no new ones will be discovered;
- Everything will be done within the 2 week sprint.
If this is to some other group, it is probable that group will howl about the product. They likely will hound your support people and hammer on them. Expect them (or more likely their manager/director/big-boss) to hammer on your boss.
But, the fact remains, all the conditions for "Done" were met.
And together, they ensured failure.
Continuing your military theme, there are two dictums that my father lived by, which he took from Field Marshal Montgomery (who himself had served during WW1):
ReplyDelete1) A bad plan is better than no plan at all; but
2) No plan survives first contact with the enemy.
In our case, "the enemy" is "reality".
Indeed! I've heard that same dictum credited to Moltke and Clausewitz. And Americans tend to credit Eisenhower with it!
DeleteFor us, reality is always the destroyer of nice plans.
Thanks for reading! (There is a followup coming shortly - would have made this too long for a single post.)
I have a follow-up to this post here: http://bit.ly/2QVI7l8
ReplyDelete