Something common I’ve seen in effective agile teams is that testing has found a new home at the heart of development. I’m not referring to developers doing test-driven development to create code that is simpler in design and has testability engineered into it. I’m referring to testers working among developers doing continuous exploratory testing on vertical slices of stories still in progress. In this setup I’ve seen the amount of testing performed after development reduce to a sanity check. I think this is because defects are found earlier and fixed immediately with less effort, worry and cost.
Something else that’s common is the continuous investment to reduce rework so that more of the available capacity can deliver value. Technical debt accrued in the rush to get software out the door always comes back to bite so it’s needs to be carefully managed. The effort I’ve seen pays diligent attention to keep the emergent design relevant, the code habitable, to prevent obsolescence, increase reuse, and reduce risks and medium to long-term costs.
Since I first started using Extreme Programming back in 2000, I’ve learned that sustainable business agility, which lasts longer than the short term, starts with healthy software that’s constantly deployable. Of course adapting quickly and cost effectively in response to changing customer and business needs requires more than just flexible software. Flexibility in business thinking needs to be present with visible reasoning that’s open to challenge and new ideas, and a willingness to explore and experiment without fear of failure.