15 year MS veteran, here.
The problems here are mostly structural, in the sense that the problems come from the structure of teams, rather than the quality of individual people. Most of the developers at MS are actually quite good; many are top-notch. So why is so much of the product shit? It's because the goals are not set by the engineers. The final decisions are not made by engineers.
The rest is here. Really worth reading, also discussion below linked comment.
EDIT: This thread is a real gold-mine, wow! For his comments sorted chronologically: click here (if you are not familiar with reddit - 'context' link is very helpful).