To run across a lake, you only have to do one thing: Run fast. The same is true in software development.
Imagine you're running across a lake. As long as you're moving fast enough to make it from shore to shore without getting wet, you're fine. But as soon as you slow down, you're in trouble. Once your shoes start to get wet, it gets just a bit harder to run...and the slower you go, the faster you sink. All of the sudden, you're splashing in the lake, and your list of priorities goes from "go fast" to:
- Find out the nearest shoreline
- Watch out for boats
- Keep water out of your eyes
- Try to keep your phone/wallet/keys dry
- Take off shoes for to swim better
- Learn to swim (OMG!)
And so on...
Of course, all of these are just compensating for the fact that you're not running any more...you're swimming. And so it is with software. If you're moving fast...if you're staying out ahead of your customer's expectations, then everything is simple. Just keep moving fast and you'll be fine. People generally don't ask questions when they're getting what they want. When expectations aren't being met, however, all kinds of other concerns come into the picture.
In a corporate environment, falling into the lake usually manifests as status meetings, requests for estimates, change management constraints, and other distractions meant to "get things under control". When developing products, quite often you find yourself investing in better issue tracking and customer service, rather than adding value to your product. Ironically, in both cases, in order to mitigate the problems that you have, you wind up making the problems worse. Because you stopped being focused on delivering value, you created distractions, which means you have even less time to focus on delivering value.
It's a horrible place to be.