Why does the single comment that hit the spot go unanswered? There's a reason why programing tools are called ''languages'' - before problem solving or building architectures, programming is a form of *communication*: we try to express the ideas in our heads in a form that needs to be interpreted, either by the machine, by your fellow team programmers, or the system users. All them need to be able to make sense of the program's effects (at different levels), even though their understanding will be different.
There's no right way to write a program, because programing is not as much writing "a" solution to "a" problem as saying new things about the world. Until developers understand this, they will remain flabbergasted, wondering why their project's requirements change so much.