What does Agile Mean? by Terry Crowley
Terry Crowley, former head of Microsoft Office, says that agile means the following:
Continuous planning: You keep re-planning a project throughout its life, rather than once at the beginning.
Continuous integration: Developers merge their commits into master every day in little chunks, rather than having a long-lived feature branch for months that’s merged at the end. Such a huge merge will destabilise master — there’s no way around it. And when it does, identifying where the problem originated becomes nightmarish. You can’t rollback, either, since merging such a huge branch was an enormous amount of work in the first place, and there’s no guarantee the problem won’t arise the second time. CI avoids all these problems.
Continuous stability: You keep master stable all the time. This prevents the problem of engineers optimising for their efficiency, breaking the build temporarily, slowing down the entire team.
Continuous dogfooding: The team should keep using a new build of the product every day, so that problems are caught and fixed soon.
Continuous delivery: Traditionally, software launched once in a few years. All features had to be ready by then. This forced a huge amount of planning, coordination and other overhead to synchronise everything by the launch date. Missing the date was a big deal because you didn’t get another chance for years. Agile changes this: You launch regularly 1, so if your commits missed a launch, another launch is coming in a week, so don’t stress about it.
Business model: Agile requires either a subscription or an advertising business model, so that all customers are running the latest code. Buying version 7.0 of an app is not agile.
Enterprise customers can give self-contradictory feedback to innovate more quickly but not change things.