Hill Climbing is a mathematical process to find the top of a curve, or "hill". The basic algorithm is as follows:
- Take a step in a certain direction.
- If the new location is higher (better), repeat the process from that new location.
- If the new location is lower (worse), go back to the previous location, pick a different direction and try again.
To reword - try something new, see if it is better than the old. If so, keep it. If not, revert. To me, that sounds very similar to agile development.
The limitation of basic Hill Climbing is that it will settle for local maxima, not the global maximum. Every direction from a false summit is down.
As someone who has worked on many agile teams, I often wonder if we have settled on a local maximum, unaware that the true summit is off in the distance that we will never see. After all, to get to the global maximum we necessarily have to get worse first.
One algorithmic answer to finding the global maximum involves starting from many different locations in the landscape, each one finding a local maximum, and choosing the best from the local maxima. As long as we have started from a sufficient number of locations, the best of the best will be the global maximum.
In terms of agile, in order to produce better results, perhaps we need to periodically restart in a completely new configuration.