If you are wondering how I ended up at Microsoft, well, it’s a long story and if you have got some time, you can read it here:
If you like to read about dreams and goals, you might like my journey. I won’t claim it to be inspiring and motivating. Neither would I claim it to be struggling and unique. I will leave it for you to decide. But everyone has a journey and a story to tell. And this my friend, is my journey.
This post is retired. Please read Half decade at Microsoft and counting… for fresh content.
July 15, 2013
Each year when I wake up in the morning and find Facebook reminding me of this very date, I can’t stop myself to feel happy and grateful. I thank god who has graced my life with all the opportunities & happiness and given me an ability to be good at what I do.
4 years it’s been since I joined Microsoft and it feels like it were only yesterday when I wandered the corridors of the humongous campus for the first time. Days bled off into years. I have seen people come. I have seen people leave. Life moves on. Everyone is replaceable.
I don’t have many things to talk as I haven’t achieved anything big so far. People who get into Microsoft usually tend to stay longer and I have just started my career here. All I can say is that there is no escape from learning. Either you learn or succumb to doubting yourself. I have learnt many things and there are many more things in queue.
The luxurious month
Stay at 5 star hotel complimented with a car and a driver was how I spent my first month. Days couldn’t be more luxurious. I used to wake up, relax in hot water bathtub for an hour, eat like crazy, play games at office and wander with friends. It was sort of honeymoon period. Work was less and fun was more. Everything seemed like a dream came true.
New Employee Orientation
New Microsoft hires from college have to go through a leap program where they learn about product life cycle and agile methodology. Since they are fresh out from the college, they might not know many aspects from software engineering per se, although being good in coding and problem solving. As part of NEO, I learnt to work as a team, how to use internal tools and most important made friends with whom I could hang out, watch movies, play pool and attend concerts.
I still remember my first day listening to the experienced engineers about how to be successful at the firm.
First day at work
First day at office, mixed feelings, exhilarating and scaring at the same time. Everyone I met seemed to be pretty smart. To be honest, I was bit skeptical if I would be able to survive in that competitive environment.
The world of flow-charts and diagrams – Office Visio
I joined as SDET in Visio team, a part of Microsoft Office division. It was embarrassing that I was going to work on something I never heard of. Visio is an enterprise software not so famous among students. It captures a huge market for clients looking forward to create flow charts and diagrams. In a nutshell, it is something that simplifies tens of millions of human life. As a test engineer, I designed test suite and wrote automation for various features to make sure the regressions are caught early.
K2 phase: It’s Android baby
When I had a feeling that I have learnt enough to fasten my deliverable, a reorg happened and devalued most of the things that I worked upon. As they say, only skills acquired through the process matters in the long run, skills to understand and solve a problem. New team and new manager, it was a tabula rasa. Satya’s vision to focus on mobile and services landed me in Android team. A familiar environment and some prior experience, starting was as smooth as butter. Nightmares begun when I was assigned a problem to apply effects on an image. The office codebase is huge, medieval and it’s an ocean if you don’t know where to start. I still remember those hard moments when I was just looking through the code to pick hints, searching keywords like pImage, IImage in the hope that at least the naming convention would lead me somewhere. It was one of the fastest paced project and I was (un)lucky to be a part of it. Learning was great and sleeps were compromised. My team owned low level Graphics rendering stuffs, everything that you see on screen.
It was exciting as I had never worked on a project of that importance before. Shared code had always amazed me and I got a chance to see how it works. The biggest challenge of developing apps on Android is device fragmentation. Apps you build might work like a charm on one device, while it might be completely screwed up on others. This project literally boosted my confidence as I was really quick when it came to building something on Android. It was an honor to be recognized as Subject Matter Expert. When I got empty hours, I contributed to Android community on StackOverflow and earned many medals. As of now, I hold 11 gold, 42 silver and 87 bronze medals.
Work hard, party harder
Good work should be rewarded and celebrated. Microsoft knows it. It’s not a small thing to book airbuses for 300 people to fly to Goa and stay in one of the costliest luxury Hotel Leela not to mention heavenly parties and unlimited food and drinks. This is how we celebrated our Android release and combined it with an out bound training.
Apple, A costly affair
Satya’s vision for efficient engineering annihilated the concept of tester & developer and rendered everyone a Software Engineer. I moved to Graphics team for iOS where I made design changes and wrote new code to be shared across various apps cross platform. The biggest challenge was to think of design that could sail well across multiple platforms and apps. Making changes at such a lower level is risky & heart throbbing and requires a good understanding. The impact is so huge that making even a small mistake has big ripple effects breaking many features across the apps.
Having got familiarized with both Android and iOS, I must say that I would choose Android over iOS any time of the day both as a developer and a user. Apple’s developer tool XCode hangs and crashes every now and then and sucks. Things that can be achieved in a straight forward way in Android can be a pain when it comes to iOS.
Recalc or Die – Excel
About 30 years ago, when C++ was still in diapers, Microsoft Excel was born. We even shipped Excel on floppy. We didn’t have much of C++ that time. So we wrote our own.
Shared rendering was over and it was time to move to Excel iOS team where I worked on Excel rendering component. Excel is one of the most complex projects and there are many layers of architecture. Few of the bugs literally drove me crazy. I remember frying neurons of my brain for days without a clue on where in the code the problem might be.
As I am writing this, another reorg has landed me in Excel Mac team. Having sharpened my C++ sword for more than 3 years in industry, I can say C++ is hard. But, C is harder. Medieval huge codebase, thousands of feature and no class organization equal a nightmare.
I have got chance to take a closer look at apple products and its OS. Some of the nasty bugs gave me nightmares. It becomes worse when you get response on the top of your fix mentioning that your change would be impacting X millions of customers. I have learnt that this is part of life and as long as the learning curve is steep, things would just work fine. I have learnt to never give up.
In my 4 years of career at Microsoft, I worked with 5 managers in 5 different projects. Lots of learning, challenges, obsession to achieve the best and never ending work. The journey has been no less than a roller coaster.
Every year or so, a reorg happens and either the project or leadership changes. Every time It’s a tabula rasa. As they say, change is the only constant in life. Good thing is you always get to work on something new with new people, diversity at its best.
In office team, we spend most of the time reading code, talking design stuffs and less time writing real code that goes in production. The impact is so huge that we can’t afford mistakes. We have to learn new things quickly and efficiently deliver on it. The world is agile and changing quickly. You can either be a part of it or can be left behind. At Microsoft, our goal is to ship code for the world to use. The work that we do here is no match as compared what we do in colleges. We talk about efficiency in whatever we do.
Effort is important, but knowing where to make an effort makes all the difference!
The type of work can be summarized by a very short story.
A giant ship engine failed. The ship’s owners tried one expert after another, but none of them could figure but how to fix the engine.
Then they brought in an old man who had been fixing ships since he was a young. He carried a large bag of tools with him, and when he arrived, he immediately went to work. He inspected the engine very carefully, top to bottom.
Two of the ship’s owners were there, watching this man, hoping he would know what to do. After looking things over, the old man reached into his bag and pulled out a small hammer. He gently tapped something. Instantly, the engine lurched into life. He carefully put his hammer away. The engine was fixed!
A week later, the owners received a bill from the old man for ten thousand dollars.
“What?!” the owners exclaimed. “He hardly did anything!”
So they wrote the old man a note saying, “Please send us an itemized bill.”
The man sent a bill that read:
Tapping with a hammer………………….. $ 2.00
Knowing where to tap…………………….. $ 9,998.00
Normal days at Microsoft
If you wonder how normal days as a Software Engineer at Microsoft look like, well it can be summarized something like:
- You get a feature and are asked to come up with various approaches to develop this.
- You discuss various pros and cons and why one approach should be preferred over others.
- You write code to develop the functionality. If the code is not shared, Bingo! your life just got easier. If it is shared across apps and platforms , you have to make sure it doesn’t regress anything. There are tons of test cases your code must pass.
- If you get a bug due to your code and it is hi-pri, a hot mail thread starts overnight stating it impacted ‘X’ millions of customers.
- If you get a bug not related to your code, well happy debugging. There are tens of millions of lines of code and you don’t have slightest of clue in what layer of architecture, the issue might be. I remember debugging a bug for 8 continuous days and at the end, I found that it was a race condition issue. The bug reproduced every once in 30-40 attempts.
- Your code performance is super critical. I remember being part of a burning mail thread once because my code regressed the performance by 1 millisecond. I couldn’t see the difference manually as 1 millisecond is something your eyes can’t perceive.
- You think you’re smart. Well think again. There are smarter people talking to whom is so much fun. You are stuck debugging an issue for 2 days. You don’t see anything working. You are pissed off. You send a mail to the people asking for help. They read your issue on phone, respond with a fix and it works.
In a nutshell, the emphasis is more on reading and understanding code than writing a new one. If you can’t understand well what is written, how are you going to modify it? This varies from team to team. Since office was released in medieval time when C++ was still in diapers, making changes in the code becomes a bit difficult, especially when you are making changes to an existing feature.
Microsoft is full of smart people. You can learn something from almost everyone.
Why I chose to stay at Microsoft?
There were many times I thought of a switch. The thing that always seemed to hold me was the thought that I would be doing the same kind of work that I am doing here. Besides, I am happy here, living life as I always wanted, trying out different things, exploring the world around me and pursuing my hobbies one after the other.
Am I happy with the salary I get here? Yes. And I will shortly explain why. Pay is decent, but it is lesser than what competitive companies offer. Many of my friends have switched to other companies for higher pay. There was hardly a day in my 48 months of career at Microsoft that forced me to switch, because of following reasons:
The best thing I like about Microsoft is the work-life balance. The timings are flexible. If you get a good manager who knows how to handle pressure, you won’t have to work overnight unless it’s absolutely necessary.
I chose to stay at Microsoft because while working here, I can pursue my hobbies. You get plenty of time for things you want to do. I travel, do fashion photoshoot, play piano and write blogs, all while writing code in week days.
Money is a good servant but a bad master
The money I earn here is enough to survive and buy things of interest. If I would earn more money, I would buy bigger car or dine in more luxurious restaurants. The standard of living will improve. But the question is, how far are you willing to go for the sake of money. Run for money never ends. Having lived my fair share of life, I realized that life should be made up of moments. As long as you are happy with what you have, you are living a good life. With more money, comes more responsibility. Yes, sometimes I regret not being able to afford a Grand Piano, but I can settle with a smaller version of it.
Although Microsoft pays lesser than few startups, I love it. My granddad proudly says that his grandson works at Microsoft.
Products that I work on are used by billions of people. I can say that the part of picture manipulation code in Word/Excel/PowerPoint has been written by me. This kind of huge impact can only be felt by working at some of the biggies like Google and Facebook.
Signing off for now with an Albert quote which truly applies to the life I have been living: