Good Post! We need more like this to help new developers understand what success means in this business. Humans don’t really communicate that well when compared to computers and code. I usually got a lot out of an evolutionary approach to development so as to coax the end user along to a mutually acceptable end. Not always possible though.
I also liked Test Driven Development as a way to flesh out requirements thoroughly. Sadly this is not so easy to do well and seems to be underutilized.