My experience is you want to move fast by reusing good software. This means that well understood components should be well engineered and documented components, while poorly understood problems might reserve documentation for the future.
Agility requires a stable foundation. And a lot of places forget that.
Isn't this the old Unix tools idea, where programs are tools that ideally do one thing well, and with good inter-program communications developers can combine basic tools to build more complex programs?
Agility requires a stable foundation. And a lot of places forget that.