Skip to main content

One post tagged with "life"

View All Tags

4 Things I Learned in 4 Years at Microsoft

· 9 min read
Shawn Tabrizi
Software Engineer

I am in the midst of a turning point in my life. This month I left Microsoft to join Parity Technologies, a start-up company focusing on blockchain infrastructure and the future of the decentralized web.

It feels a bit like when I graduated from university, and in a way it is exactly the same! I spent 4 years at Microsoft, met new friend, lived in a new city, and learned new things literally every day. As a recent graduate of 'Microsoft University', I thought it would be important to reflect on some of the big picture items I learned during my time there. These learnings will be more opinions rather than facts, but nonetheless, things that I will bring with me to this next adventure and continue to develop as I grow in this new role.

Customer Obsession Isn't Just a Phrase

I joined Microsoft the same year that Satya Nadella became CEO. I distinctly remember his internal speeches when he emphasized the importance of "customer obsession". In his own words from his book Hit Refresh:

First, we need to obsess about our customers. At the core of our business must be the curiosity and desire to meet a customer’s unarticulated and unmet needs...

As a new employee to a large company, I was a little skeptical of this attitude being more talk than action, but I can tell you from my personal experience, customer obsession isn't just a phrase. I actually spent a full 2 months at Microsoft learning about the "moneyball"/"signal" process, and it really has shaped the way that I approach product development and project management. The successful product teams I saw at Microsoft were always able to answer the following questions:

  • What is the top frustration of your customers?
  • What are some solutions to those frustrations?
  • How are you experimenting and measuring those solutions?

The key aspect of these questions is that it starts at the customers who use your products. Many times product owners use their own anecdotal experiences to determine what they should be working on and what their customers are experiencing, but this is a setup for failure. When you are too close to a product, all of your view points become skewed, and you lose sight of what the average customer experiences. I have seen teams spend all their efforts adding new features to a product, when in fact, there were so many problems with sign-up and onboarding that people would likely never even get that far before they gave up! I am not saying that you should mindlessly do everything your customers say, but you do in fact need to understand their perspective and allow that to shape your short and long term plans.

Be Your Number One Customer

I mentioned in the previous learning that product owners are often too close to what they are working on to be able to independently understand how their product is actually used. But this is not a bad thing; in fact, I think this is critical in driving a successful product. As a product owner, you need to be your number one customer. You need to be a power user; the person that begs for more features; the person who understands all the bugs and complexities of your software; the person who has built hacks or scripts to overcome limitations. This is a perspective needed to grow your product beyond its current scope and provide vision for what it could become.

Too often at Microsoft, I found people who spent their 9-5 working on a product they never used themselves! Whether they wrote code or wrote specs, these people had a task to get done, and usually a small list of check boxes to determine when they were complete. You can imagine that this leads to disorienting products where features are stitched together in a UI rather than building an end to end story for the user. Furthermore, you can't expect these individuals to be able to talk on the same frequency as their users, so how can they engage them to learn more?

One of the criticisms I have toward working at Microsoft is that they are very enterprise oriented, and as a result, it is especially hard for individuals to become power users. For example, if you are working on enterprise identity systems, then your customers are people managing thousands of accounts within their organization, with dozens of custom RBAC settings, and even things like on-prem federation. It is not likely that a college hire will be able to easily emulate these behaviors, but in my experience, it is so critically important to try! I think to truly excel at your role, you need to immerse yourself in your product, and this might even require working on extra projects where you take on the "customer" role. Additionally, this might also mean that not everyone is a perfect fit for every job. To be most successful, you should look for teams where becoming the number one user is natural, rather than forced.

Product, People, and Pay

Continuing from the last learning, the product you choose to work on can be an important factor to your success; but that is not the only factor. When choosing a team or job, you need to consider three main factors: product, people, and pay. This is one of those things that each person will need to evaluate for themselves, but I can share some of what I learned about myself in this regard.

When graduating from college, the only factor that seemed relevant to me was pay. Being broke for 22 years straight meant that my bias toward making a good income and the ability to start saving outweighed most any other factor I could think of. I was and still am a Microsoft fanboy, so it helps that I did not have to look far to find a good fit, but even when I was talking with Microsoft, I don't remember thinking for a single moment about what I would actually work on. Just that I would have a stable, well paying job. However, salary at Microsoft is pretty fixed and independent of what you work on. So over time, I started to consider the other two factors.

I was fortunate to start my career on a product I found pretty interesting. Identity, authentication, and authorization are technologies that everyone interacts with in the modern day. It is a subset of software security, and if done wrong, can either make customers hate you or lead to compromised accounts. I was generally happy working on the team, and found myself becoming an expert in certain topic areas due to my natural interests in the space. But the grass is always greener on the other side, and I wanted to try my hand on more cutting edge technologies like machine learning. I set out to find another role at Microsoft which would allow me to explore that technology, and I eventually switched to the Azure health and supportability team who was using ML to correlate large outages to specific and shared root causes. Unfortunately, it panned out that I did not get to touch ML while on the team, and that really made it evident how much product really was a factor for my happiness. If I go to work unexcited about what I am learning, or what our mission is, then it will be an uphill battle until the end of the day.

By switching teams, I also learned how much I undervalued the people I worked with. The team I moved to had a much different employee composition, and while I will avoid the specific details I never made close friends with people on this team like I did over in Identity. But that wasn't even the main problem. More importantly I learned how much managers and working relationships affected my happiness on a team. It will always happen that you are given a task that you won't enjoy, but it needs to come from people that you respect and enjoy working with. When things get hard, you need to know the people around you are there to support you rather than make things worse. These things sound obvious, but it is incredibly hard to evaluate the people on your team until you actually start working with them. This means that if you find people you like, don't keep that a secret. Even if your paths diverge, you never know when they will cross again, and you should keep them close. But also, don't be afraid to join new teams and try new things. While the goal is to maximize each variable for your needs, you will never quite have a metric to measure and compare until you have had a range of experiences.

You Can't Fuck Up

This is probably the lesson which I have the most to learn about, but my current outlook on life is that you can't fuck up. Even before I went to university, I knew I wanted to work in tech and in the world of software. However, life would have it that I ended up studying physics and math rather than computer science. At the time, I was so concerned that I would not be able to get a job out of undergrad due to my lack of formal computer science training. I really felt that I had fucked up 4 years of my life.

But I was wrong; everything turned out fine! I literally applied for one job, went end to end through the interview process, and landed a gig at my dream company. Then, when I switched teams at Microsoft, I gave up being a topic expert to explore interesting tech. That didn't pan out the way I hoped, and I thought I would be fucked again, but here I am, starting a new role outside of Microsoft having grown more as a result of my experiences. In my time at Microsoft, I have seen people literally 'fail upward'; and while I am not claiming that is what happened to me, I certainly feel that having had these experiences, even negative, has made me grown as a person.

Again, these are my anecdotal experiences, and I am very willing to be shown wrong as I continue learn. But, I think my current attitudes toward work and life are very much shaped by these lessons. I am very excited for this next chapter, and I can't wait to keep learning.