First off, you only update the environment when there's an change to the environment. For example, if a module's required version goes up. Or, if you now need a new module. Or, and this is kinda weird until you think about it, you no longer need a module.
As for why, there are several reasons.
- To make sure that each environment version is completely self-contained.
- To make sure that each environment version is correctly built against itself.
But, the most important reason is that you have a "last known good" to fall back to when something breaks. This means that you don't alter an environment after it's been deployed against. Otherwise, you don't have anything stable.
My criteria for good software:
- Does it work?
- Can someone else come in, make a change, and be reasonably certain no bugs were introduced?