Working at Microsoft
- đ
- đ 2,335 words
- đ 11 minutes
- đŚ Microsoft, Technology
- đˇď¸ career
- đŹ 7 responses
Ahmet Alp Balkan on the Microsoft Azure team reflected on his experiences at Microsoft. His experiences do not exactly match mine (initially on LINQ to SQL, then Entity Framework and finally xbox.com) but I recognize some of his points.
Here is some further discussion along with some other thoughts that have come up over the years. A lot of these donât apply just to Microsoft and some are useful for people new to the industry to think about.
Firstly
People think of Microsoft as a single entity with a sole focus and one opinion.
Thatâs about the worst mistake you can make.
Microsoft is like hundreds of small companies that often work together but sometimes against each other. They have different processes, dynamics, attitudes and goals not only within the same division but also within the same building or floor.
Thinking your experience with one team is a reflection of the whole company is short sighted. Microsoft employs almost 100,000 people including over 40,000 in the Redmond area alone.
Itâs like a small country.
âExpect no documentationâ
Documentation can sometimes be found checked in with source code, in wikis, buried in Sharepoint sites or OneNote. Wherever it may exist it will be out of date by the time you find it.
Documentation can only be up to date if the code never changes or you have a team of incredibly rare developers who like to read and write documentation more than code. Donât fret unless nobody has the source code.
It might appear that people are critical and dropping dead will kill the project because everything gets funneled through one or two people but thatâs not the case. Many people know more than they let on but donât want to be involved on a day-to-day basis because they have moved onto something better. When a dire situation arises these people step up.
âNot everyone is passionate for engineeringâ
Itâs true not everyone you meet will be interested in quality software engineering. Some people just want to get the job done and go home. That happens across and all walks of life. Itâs a personal choice.
Ask yourself how many engineers you meet are passionate about delivering great experiences to users. Do they prioritize their own wants and desires such as a high test coverage in a rarely-regressed area over a simple useful feature many users are asking for.
Software engineering is a means to an end.
Your customers arenât interested in software engineering. They want a useful tool or something entertaining.
What you want is to be able to sustain happy paying customers.
â2â3 hours of coding a day is greatâ
When youâre coding for yourself you are the user. You can make the decisions quickly and know what youâre asking of yourself. There is no communication overhead.
When you work with customers that slows things down especially if theyâre not easy to get hold of. Most of the time you work with a project or program manager (PM in Microsoft speak) who advocates for the user. This speeds up the simpler decisions but complex or difficult decisions will still require time.
With more developers, testers and partners the communication overhead increases. You make educated guesses and perform iterative steps and keep everyone involved. If those guesses are wrong they should show up quickly. You can address those wrong guesses before too many features, code or documentation rely upon them being implemented wrongly.
If a decision canât be easily reversed in the short term the it needs discussion. That takes time.
Two hours of coding a day can be fine. If it takes the product in the right direction.
âNot giving back to the public domain is a normâ
Whether you contribute code back to the outside world is defined by your personal goals and the team around you.
Some teams like the ones on ASP.NET MVC and Entity Framework have completely opened their stacks. Other teams have contributed back to existing projects. Your might not be able to do either⌠yet. Things are changing at Microsoft as these projects show and it can take patience and perseverance to make it happen.
It can be painful for a developer to break through the resistance of his own team and legal. There are reasons not to:
- It takes time and effort to put something out for public consumption
- It can take ongoing time and effort to maintain that code publicly
- If your code is innovative to your business area you might be giving the competition a boost
- Legal may perceive code contributions as a patent minefield
If your code doesnât give you an edge then why are you writing it? Intellectual challenge? Do that on your own time. If something open source already provides important functionality you need to get permission to use that instead. Donât give your competitors your edge while it counts.
âItâs about getting it doneâ
Shipping good products leads to success. Waiting for perfection leads to failure.
Shipping is everything. True, itâs not always first-to-market that wins but being late wonât help unless you have something thatâs radically different. A lower bug rate or a slightly more polished experience wonât be enough.
Itâs incredibly easy to ship updates today. Concentrate on getting the features usable and ensure it doesnât harm the user. That means no corrupting data or major security issues.
All we have to decide is what to do with the time that is given to us. â Gandalf ;-)
Your product will ship with bugs. If you have a good test team youâll know what some of them are. Fix the critical, the blockers and the high-priority as best you can. Your competition isnât going to wait, nor are your users.
The more easily discovered or hard to work around a bug is the quicker it will be found. A hard-to-reproduce bug thatâs easy to work around isnât worth the time you already spent thinking about.
âCopy-pasting code can be okayâ
Starting a shared library between teams requires an intentional co-ordinated effort.
- When a team modifies a shared library do they know how it affects other teams? No.
- Will the other teams be carefully monitoring the shared library? No.
Copy and pasting is fine for odd classes. You get code re-use without having to set-up merging, policies and ownership.
Fixing a critical bug in shared code always requires co-ordination between teams whether they copy and pasted the code or whether they take a shared dependency.
Bugs can hide bugs. Fixes can reveal more bugs.
âCode reviews can be skippedâ
There are a few things people want to get out of a code review and how well it goes depends on the people interested in reviewing the code.
How well did I implement this feature?
Weâd all love to know this but itâs the hardest thing for somebody to critique in a code review. They probably donât know the requirements well and unless theyâve been in that area of code lately they probably donât know what the alternatives are and why you went with this approach. To know as much as you do about implementing this feature they would likely have needed to have spent as much time on it as you.
Code reviews rarely provide good feedback in this area unless youâre new to the team â in which case you should probably have pair-programmed instead and had a better experience.
Are there any glaring bugs?
If youâre a professional you should have read your code back and forth several times and probably refactored it until it looked good. If regular bugs or code reviews point out issues then you need reviews for this. Some people are much better than this than others â itâs one of personal discipline.
You should spend far more time reading your code than you did writing it.
Did I regress performance, security or reliability
This is about the best thing you can get out of a code review. People know arcane little bits about the system that are probably not well known and tricky to document. If youâre working in code that is called all over the place go for the code review especially.
âSo⌠can code reviews be skipped?â
Iâd be lying if I said I had a code review for everything I did. Sometimes you know the code base like the back of your hand and there are plenty of checkpoints further in the process as well as other eyes constantly on the code-base. A lot of open source projects work well this way.
Never skip a code review when:
- Youâre in a rush. Thatâs exactly when you need it most. Send it to multiple people and wait for 1 or 2 responses â it parallelizes well.
- The code is used everywhere. The more callers, the more places to fail.
- The code accesses sensitive data. Patching after a breach is too late.
At the end of the day ask yourself âCould this code damage the reputation of the company and therefore my career?â. If the answer is YES you need a review.
Competition and stagnation
When new markets and opportunities appear it often doesnât belong to one team and many teams can find themselves in the same space as executives go for the land-grab. This behavior is actually encouraged at all levels in the annual reviews ⌠âexpand your influenceâ.
Unfortunately this often results in customer confusion, especially as products expand and subsequently overlap. LINQ to SQL and Entity Framework are my own personal experience this but Iâm sure you think of plenty more.
Conversely once a market is owned by a team it can stagnate quite quickly. Microsoft Billing and the MVP/MCP portals spring to mind. The latter requires Internet Explorer only to function. In compatibility mode no less. There are more than a few Microsoft web sites looking very dated.
Be aware of what other teams are doing and how it impacts yours. Treat teams in similar spaces as potential competitors but remember that their public failures reflect on the whole company including you.
Bring solutions, not problems
The article reminded me of one from a year or two back where somebody left Microsoft after a promising start that turned into a series of bad reviews after he started trying to change things by pointing out to people whatâs wrong.
People know whatâs wrong.
Microsoft like other big tech companies has a lot of smart people working for it. Smart people are busy.
Going around telling people that theyâre doing things wrong or that things need to change without a plan is never going to make you friends or cause change. Guess what. Career progression is part popularity contest.
Worried the new site has so many hands itâs going to be a mess?
Donât complain, do something. Figure out a solution that also solves pain for others so theyâll buy in. Work with the designers on a grid based PSD template, codify it into CSS, check it in and get it included on every page. Sacrifice a few lunchtimes to train the team on it. Get it done.
Think the approach youâre taking for security isnât enough?
Liaise with experts, find the issues, develop or adopt libraries, tools and techniques to make the problem go away.
Get to the root of a problem and make sure the solution fits both sides
If you interface with customers directly through one of the many partner or support programs or indirectly through forums and Twitter youâll see upset customers. Itâs hard, but it applies to all products. Upset people forget there are real people working hard on the product they use. That if they scream and shout theyâll get what they want. It doesnât work that way.
You will come across good ideas, suggestions and feature requests internally and externally. Take the time to distill them down into small useful bite-sized pieces. Take from the criticâs what you can use for a better product and forget the rest.
People develop for themselves and what makes a great solution for them might not be for other people using your product.
Teams can be resistant to fully-baked solutions being handed to them. Come with bite-sized pieces and a few ideas on how they could interact. Let the solution flow out of discussion and debate. The result will be better than what you could come up with anyway.
This is even more important when dealing with other teams. They know their internals, other customers and future road-map better than you do.
Expert means something different on the inside
Whether youâre an MVP or wrote a best-selling book joining the team behind it means youâre about to become a different type of expert.
Youâre an expert on using the product. On the features that shipped. On the way itâs used.
You are about to learn is why the product is shaped that way. The hard decisions, the cut features, the implementation and constraints.
Brace your ego for impact. It doesnât matter that you can write any kind of LINQ query off the top of your head and have used it in several apps. When you join the team behind it youâre in for a crash course in expression trees, compilers and query reduction.  How far down does the rabbit hole go?
All those great ideas and suggestions you had as a user? Be prepared to find out 99% of them arenât original. There are reasons why theyâre not there. Ideas are cheap.
Itâs now your job to figure out how to make them happen. Execution matters.
Conclusion
Donât get me wrong, I loved working at Microsoft. Itâs an exciting place to be with so many cool things going on. Leaving was a hard decision motivated by factors not on this list.
Like any job there will be challenges. Some unique to Microsoft, some big-company specific and some near-universal that you may be experiencing for the first time if youâre new to the industry.
Learn, adapt, thrive.
[)amien
7 responses to Working at Microsoft
Iâve had a bit of a different experience, but can fundamentally agree with some of the points. My biggest gripe has been the level of bureaucracy! The previous company I was with got acquired by Microsoft, and while, we initially were given full autonomy, things gradually changed towards more process. Itâs the natural progression, but it became increasingly frustrating as simple asks (related to APIs) turned into hour-long meetings
I was doing my taxes and somehow ended up here too :-D This is a great post though. The parts about âGetting it Doneâ and âCopy-pasta is OKâ really got to me. Itâs so hard to let go of something when I know it can be a problem, albeit a minor one â but then I realize at 6pm that Iâve spent the whole day on something few people, or no one, will ever see, and despair sinks in. sigh
âWell it is 5 years to the date where i live, stumbled on this post, enjoyed reading it. I was actually looking for fonts recommended on EditPad Pro website, it has a dead link. I then followed the name link and ended up here. â
Iâm not sure how true that is â youâd need some raw data to look at.
One thing to bear in mind is that good developers at Microsoft often blog and become quite well known. When they leave itâs quite visible.
Apple employees rarely blog no matter how good they are. When they leave a lot less people know about it.
I have read recently that Microsoft has problems keeping âexpertsâ in the company. Many of these people prefer to work for apple, google or amazon,⌠I ask myself whatâs the reason for this loss of qualified manpower. Maybe Microsoft is now seen as in a state of hibernation and the cool projects are going to happen somewhere else. Maybe the structure of this 1000 little companies within one big company is not the right approach anymore. My 5 cents.
Yeah I started on that one and went back and forth a few times. It happens and Iâd be lying if I said I always got code reviews. Iâll update the post in a few minutes.
Great answer! Thanks for your post! What about the point âCode reviews can be skippedâ?