You’ve been in the crunch for a couple of weeks now. Features and fixes are being merged left and right as the final stakeholder presentation sneaks up on your team at an alarming rate. It is causing you to literally lose sleep, and every morning you wake having thought about five new ways everything could go horribly wrong. The despondent expressions of those around you when you arrive at the office would normally lend itself to a “you look like I feel” quip, if only you had the energy to quip these days.
"Well, that major project was well-planned and adequately resourced, and had reasonable deadlines," said no development team ever.
The final days of these projects share the same characteristics:
- Your team has the best understanding of the requirements they will ever have.
- Your team has the best understanding of the implementation in the underlying code that they will ever have.
- Your team has the least amount of time they have ever had.
What this means is bug fixes and tweaks can be coded and integrated in a fairly short amount of time as people instantly know where and how the change needs to be made. The downside to this rapid-fire coding is that there is now a huge surface area in which bugs can nest, and there is such little time to manually click through your application to try and find them.
The crunch is where automated testing will make or break your people and the project they are working on because automated tests provide the kind of sanity checking that no sane person can provide.
This is something that I have personally learned the hard way. It is often difficult to appreciate why maintaining a comprehensive suite of tests is important during the early stages of development. They are just one more thing to maintain as requirements change, no one outside of the development team cares about your test coverage, and there is so little to the app under development anyway that manual testing is often faster.
As a project is starting to wrap up, though, this dynamic shifts. You are now faced with a code base that has dozens of possible journeys, hundreds of obscure business rules and requirements, and edge cases everywhere. Break or violate just one of them, and you could potentially introduce a serious bug; but how do you know?
If you have maintained a comprehensive test suite, you’ll know because when you run the tests, they come back green.
Without test suites, the only tool you have is an eyeball check of your app. Over the thousands of input combinations that your app accepts. That kind of testing is enough to drive anyone mad.
Test like your mental health depends on it, because it probably will one day.