When it comes to software development, I don’t believe there is a one size fits all recipe to follow for success. Therefore, I believe the most important aspect of any process is that it improves and refines itself. You can use principles to guide your way, but your team has to do the hard work and find what works for them.
Miscommunication happens. People change their minds. Situations change. Getting stakeholder (other programmers, managers, clients, etc.) feedback sooner rather than later ensures you don’t wander too far down the wrong path. On the other hand, don’t create a feedback loop that is too tight. You need room to work intelligently.
If your stakeholders or peers are not communicating, or were never on board with the way you work in the first place, there is no process that can save you.
Constant analysis and improvement. Bad reasons for doing things are because “you read it in a blog post1”, “we’ve always done it this way”, “this is what everybody else does”, or because “it’s my gut feeling”. Avoid automatic thinking. Ask yourselves what you want to achieve. Is what you’re doing achieving this? If not, find something better. Examine everything. Keep improving. Decide as a team how to do this.
1including this blog post