There is a stream of development. It is an ever changing river that we must ride towards the destination. Sometimes the current pulls strongly and even puts us through the white rapids. And then there are the quiet pools where we can take a breath before diving into the current once more.
And eventually we arrive at the ocean ready to ship.
Software projects are exactly like riding the river. It is exhausting to paddle against the current. And at the same time the rocks under the surface stay hidden until we hit them.
Too frequently I meet people who see testing as a downstream activity. They see testing as something that happens after the development is done. But downstream it is already too late to watch out for the hidden rocks, whirlpools and falls.
Downstream testing today is cleverly disguised inside an agile development process. Few decades ago testing was only a pre-release activity.
Testing was the last hurdle to hop before shipping.
Today testing can be found at the end of a development cycle. Or even at the end of a few week sprint. It is a good trend to move testing upstream, but it is an error in the mindset no matter how well it was disguised.
As long as we deploy testing in a miniature series of waterfalls, we fall short with its full potential. So place testing inside your raft and row like hell.