> 1. Everyone agrees with that. And then they create a mess. They are generally unable to see the mess. One cannot learn without experiencing failure, and when one cannot see the failure, one cannot learn.
Hence "early intervention"! Usually one's own experience is not going to be enough but if one can learn from real experts what to avoid and what works well, one can develop a sense. You can get some of that by careful reading of such people's code.
> 2. Some features are far more susceptible to this than others.
True. This happens when the language developer creates a mess! I am reminded of Tony Hoare's "Hints on Programming Language Design".
> 3. These also come about from my discussions with managers of programming teams and the problems they have to deal with.
They should be listened to for the problems they face but not necessarily solutions :-)