Pros
Very good salaries and benefits You will work with incredibly smart people
Cons
Reluctance to truly embrace open source tools for development really hurts developer skill sets. For example, instead of moving to tools like Spark, MSFT builds it's own tools. Most of their own internal development doesn't even use products they sell externally, like Azure. The proprietary tools they use will severely hurt you when you are looking for your next job. The company is huge part 1. The scope of what you will work on will most likely be small features on existing products. This might be OK from a pure C++ coding perspective but it won't allow you to get architecture development experience, learn new tools or if you want to do something innovative with new technologies. The company is huge part 2. It's difficult to stand out when there are hundreds of really good engineers in a division. There are few engineering management roles now, most were eliminated. Culture can be somewhat forced. Small companies usually have a better culture. Office has implemented a "Shared Engineering" model. Software Engineers are supposed to write product code, test and develop the resulting data streams. Realistically you will find few people that can or want to do all three well.