I have 3 years of professional experience working with Microsoft stacks.
I've been programmer since I was 12 (making wacky little web games).
My professional opinion of Microsoft is this:
While, they pioneer a lot of robust (and even daring) technologies, because of their tendency to trailblaze with little foresight, they often end up creating overengineered solutions that are only designed that way to follow "industry standards" (which they are also largely responsible for setting...).
Overengineering causes poor designs that add layer upon layer of complexity to an otherwise simple concept. They tend to do this because they focus really hard on Design Patterns (many of which are good, when used properly, but when misused/abused they lead to overengineering and quickly; for example Dependency Injection, which is not one of the Gang of Four's design patterns in and of itself...)
Microsoft is notorious for this, and I will use this webpage to list off great examples of it: