Microsoft

My first year at Microsoft

I joined Microsoft on September 8, 2014. Today is my first year anniversary.

Changing the World with Holo Lens

How do I get the job at Microsoft

When I was in College/Grad School, I wanted to work for Microsoft, because of Scott Hanselman, Scott Guthrie, Steve Sanderson, Damian Edwards, Mads Kristensen, Anders Hejlsberg, Eric Lippert, and other great developers. However, I knew them only from their blogs, and conference talks. I didn’t know how day-to-day work at Microsoft looks like. When I was organizing dotNetConfPL 2013 I talked to Tomasz Janczuk, who worked for Microsoft for over 12 years, and he told me that “it is definitely worth it to work for Microsoft if you want to learn how to make software”. After that, I was sure, I wanted to work for Microsoft.

In 2013, recruiter from Microsoft came to my department at Kansas State University, and after collecting resumes, selected group of people for on-campus interviews. I was one of them. Two weeks later I had 30 minutes interview on campus. It was short 5 minutes introduction, and 25 minutes of coding. After a week I got an email informing me that I was recommended for the next round – on-site interview in Redmond. Two months later I flew from Manhattan, KS to Redmond, WA. Interview in Redmond was a set of 5 interviews, with 5 different people, 1 hour each. Every interviewer was asking briefly about myself, and then programming question. What was surprising for me, they asked me to write code in Visual Studio. Two weeks after the interview I got an offer, which I accepted and on September 2014 I joined the Azure Portal Team.

What have I done during my first year

I am working for the Azure Portal Framework team, which is delivering the core of the portal, and framework to build extensions on top of it. Each Extension, e.g. Websites, Virtual Machines, or Application Insights, is a gateway to underlying Azure infrastructure. Framework team is divided in a few subgroups. My group is responsible mainly for developing reusable controls that are part of the framework. I created a few controls, and I was fixing/improving some other. The most challenging one was to create a set of date/time controls. Why was it hard? Because JavaScript Date sucks, and it is not easy to deal with date/time at all.

In addition to controls, I was also working on keyboard support for the Portal, and keyboard shortcuts that I blogged about earlier this year (here and here). Now, it is possible to use the portal with keyboard only.

I also helped to improve our development experience. I proposed to add Sinon.JS to our testing tool-set, and helped to create strong-typed wrapper on top of it – TypeSinon (which was proposed by Steve Sanderson). In order to make our QUnit tests cleaner, I also proposed and integrated QUnit Parametrize plugin that works like TestCase attribute in NUnit. I did other small improvements, like helping to upgrade to TypeScript 1.5, and turning off verbose printing to the console during build – which saves a few dev-minutes everyday, and ultimately a few dev-hours or even days per year.

Lessons learned

The best thing about working at Microsoft is the opportunity to work with smart people, and learn from them. All developers working at Microsoft are this type of people who get things done. They do not like to talk too much about what they want to do, but they prefer doing it instead. I remember when once I was arguing with some people over the email that something should be than in one way, not the other. After a few e-mails one teammate told me: “If you really believe that something should be done in some way, do not argue with people, just do it”. I also noticed that the best developers do not ask you to do something for them, but send out a Code Review instead.

In my team there is no fear to try new things. Do you want to use the latest version of TypeScript, in production, one day before the release? One of my team leaders, personally, performed this upgrade. Do you want to introduce, a new tool? Usually, not a problem, but then you are responsible for it. When I wanted to add Sinon.JS, I sent an email to the entire team to ask what they think. A few folks had some doubts (not about if, but about how). We called a quick meeting, and resolved all of them. Next time, when I wanted to add QUnit Parametrize, I just sent out a Code Review and email to entire team. No problems, everybody was ok with that. The only price I have to pay is helping others with issues related to these libraries. “With great power comes great responsibility” 🙂

I also remember when I wanted to make some change and asked a few people if I can do it. Nobody was sure, and somebody said: “It’s better to ask for forgiveness than for permission” 🙂

Even if you fail, or create something not perfect, people at Microsoft do not criticize very often saying: “This sucks, that sucks”. They know these words would create an expectation to propose better solution, or even implement it, and then – in the future – be responsible for every issue related to that. Instead, they say: “what do you think about this alternative solution?”, or “let’s take a look if we can do it better”, or do not say anything.

From development perspective, the most valuable lesson I learned was to avoid planning for one, big refactoring in the future (which usually you will never have time for), but instead perform small refactorings with every commit. I had also opportunity to observe the real value of tests in the project. Many times when somebody, or myself, were performing some change that “there was no way it could impacted that functionality”, and test was failing – it saved us from probably many long hours of debugging and investigating. I could also observed when after a few weeks we noticed something wasn’t working from “some time ago”, and we didn’t know what caused it because we didn’t have tests. Every time when this happened we had to invest a lot of time to investigate and find the change that caused this (which is not easy in project where 40+ people contribute to one repository, and you have ~40 commits every day).

Culture

I have many friends who knows two things for sure:

  • eventually they will die
  • corporations are evil

I was afraid of the second. Especially after reading the stories about Microsoft on the Internet that can be summarized like that:

Microsoft org chart

The fact that there is enterprise overhead at Microsoft is true. It was nicely summarized by Eric Lippert in his blog post How many Microsoft employees does it take to change a lightbulb? However, now Microsoft is becoming a cool company again. The idea of One Microsoft is happening now. It feels like people are working towards the same goal. Last summer I participated in //oneweek hackathon where together with people from different teams across Microsoft we were hacking together, and it was great to be a hacker for a few days while being an engineer in everyday job (Hackers and Software Engineers). Recently I was at IoT meetup in Seattle, and one guy said: “Microsoft was a wonderful company in 90′, and then took a wrong direction in 2000′, but now they are switching back. There is many interesting things happening at Microsoft now, and they are becoming cool again”. Other people are starting notice this as well: link, link, link.

There is even a new, unofficial logo of the NEW Microsoft – Ninja Cat on Unicorn:

New Microsoft logo

I will say it again: there are many smart people working at Microsoft. What’s more: higher in the hierarchy somebody is – he is a smarter person. This goes from my teammates, through our team leaders, all the way to Scott Guthrie and Satya. What is important when you work for some company, is to believe in your leadership team. I have no doubts that people like Scott Guthrie, Mark Russinovich or Satya know what they are doing. Additionally, every month there is Q&A session with Satya, where every employee can ask him a question. I wish I could quote some of Satya’s answers here, because they are really valuable, and reasonable pieces of advice. You can find more about Microsoft under Satya in this article.

Let’s also talk about management at the lower level. Many people in Microsoft says “my boss”. I do not like calling my team leader like that, because I think he is more a leader than boss:

boss vs leader

I have 1 on 1 with him on every week. Usually 30 minutes, sometimes less or more, depends on the needs. During these meetings he is checking how I am doing, and how he can help me with any issues I have, and how he can enable me to utilize my full potential. He is doing the same for other 8 developers in the team, and in addition to that, he is doing as much development as others. His scrum update is not much different than the rest of us.

Another interesting thing at Microsoft is separate hierarchy for developers and program managers. As Joel Spolsky pointed out in this book – Joel on Software – there is a reason behind it. Instead of giving direct orders to developer, program manager has to convince developer that whatever he want him to implement make sense.

What next?

It has been a great year. I had opportunity to work with amazing people, on a very interesting project, and I learned a lot.

I am staying with the Azure Portal team. We have a lot of work to do. Especially, because Azure is growing exponentially. One year ago, when you clicked ‘Browse’ on the portal, there was ~10 types of services on the list. Now, 1 year later, there is over 40 items on that list. This requires from us to enable other teams to develop at very fast pace using our framework. We keep improving the programming model, APIs, performance, and usability. There is also a lot of requests from users that we constantly monitor, and make happen (150/739 are fulfilled for today). We really appreciate your feedback!

I am very excited about the future of the Azure Portal. From a developer point of view – it’s a dream place to work. We are using the latest, greatest technologies. We are doing things that exercise browsers to such an extent that we are finding bugs in them, or have to fix/patch Open Source libraries that we are using. There is also a few features, I will be working on, that I am very excited about. Stay tuned!

Additionally, in upcoming months I will be speaking at a few conferences, and on October 31 there is the third edition of dotNetConfPL – online conference for .NET developers that I co-founded together with Michal Franc and Pawel Sawicz.

I would like to say thank you for every member of my team. It’s a pleasure to work with you, and be part of Microsoft in these days. I has never been a better time to work for Microsoft!


More keyboard shortcuts and better focus management on the Azure Portal

Two months ago I blogged about keyboard shortcuts on the Azure Portal. We added more shortcuts recently. Now, you can look them up by pressing ? on the Portal.

Azure Portal Keyboard Shorctuts

In addition to that, we improved focus management. Now, you can use portal without a mouse.

Azure Portal with keyboard

Check other improvements we have done recently on Azure Preview Portal Improvements (April update) from Leon Welicki.

 


Hidden feature of the Azure Portal: keyboard shortcuts

keyboard

Last week, we released a new version of the Azure Portal (v5.0). There is a lot of improvements in the portal, but I would like to focus on particular one: the keyboard shortcuts. Check it out!

Hubs (left menu) shortcuts:

H – show startboard

N – open Notifications hub

A – open Active journeys hub [journey is the currently opened group of blades; blade is card/tab/subpage that contains some group of tiles, e.g. website properties or analytics]

/ – open Browse/Search hub

B – open Billing hub

C – open Create/New hub

Azure Portal keyboard shortcuts: hubs

Changing focus between blades shortcuts:

J – move focus to previous blade

K – move focus to next blade

F – move focus to first blade

L – move focus to last blade

Azure Portal keyboard shortcuts: blade focus

This is one of the first steps to make portal usable only with keyboard. Currently we are working on focus management (to have focus placed/restored on expected/useful items). We are planning to add more shortcuts, and keyboard shortcuts legend (available by pressing ‘?’).

What do you think? Are you using keyboard shortcuts on other websites?


Hi, I’m Jakub and I work for Microsoft

Blue badge

After I got my degree in August I moved to Redmond, WA to start my new job at Microsoft. I work for Azure App Platform Team. My official position is Software Development Engineer (SDE).

It has been a month since I started. So far, my team, work environment, the product and development process are great.

My team

MS team

My team (which is part of Azure App Platform) is working on the new Azure Portal. People in my team are smart. All of them. Moreover, they are really passionate about things they are doing, and they really care. I am working with Steve Sanderson, the creator of Knockout.js and one of the best technical speakers. The team is very diverse: people from many different countries all around the World, with a quite few girls among them.

My team is working in Agile.  The working culture is generally: “Get the job done”. People are in the office usually between 10am and 5pm. Some are coming later, and stay longer, others come early and leave early (there are also people who come early and leave late). If somebody feel the need to focus and don’t being interrupted then he/she is working from home, and it is not a problem.

What is the best, I am not implementing some spec written by somebody 5 levels above me. I need to implement an idea, add my contribution, suggest changes etc. When I asked a question what are the expectations from me, my lead and my manager told me that they expect me to suggest some ideas how to make the product better, how we can improve it, and what we are doing wrong. This is exactly what I was looking forward to!

Work environment

MS workspace

The building I am working in (Microsoft Building 44) is designed for Agile interactions. There are white boards everywhere. We work in Open Spaces (around 15 people per room). Microsoft is changing approach, and moving from private offices/cubicles to open spaces. What is cool, there are 3 conference rooms ‘attached’ to our Open Space (2 small, 1 big), and if somebody needs to work in peace, he/she can use one of them. If all are occupied (which does not happen very often), there are special ‘focus rooms’ (with desk and chair) in the building.

I have great machines to work on: HP Workstation Z420 (Xeon E5-1650 v2 3.5 GHz, 32 GB RAM, 128 GB SSD + 256 GB SSD + 1 TB SATA) with two 24″ monitors DELL Ultrasharp U2415, and Microsoft Sculpt keyboard and mouse. I have also ultrabook Lenovo ThinkPad X1 Carbon (i7-3667U @ 2 GHz, 8 GB RAM, 240 GB SSD). I have adjustable height desk, and very comfortable Haworth Zody Task chair.

The product

MS Azure Portal

The new Azure portal is a Single Page Metro Web Application. One of the main goals of the new portal is to make it easy for adding extensions. My team is working on the Framework, which is being used by other teams to create front-end for underlying Azure infrastructure. What is cool,  every extension is working as a standalone application in a separate iframe. Extension authors do not need to work with HTML and CSS a lot. They just use controls (e.g. list, combo box or checkbox) created by us, and communicate with them through TypeScript/JavaScript. Update of the view is performed by Knockout.js. Check Justin Beckwith’s post about the new Azure portal architecture. If you have not seen it yet, check the Overview of the new Azure Portal with Vishal Joshi and Scott Hanselman and Vishal and Scott create a new startup with the new Azure Portal. To get started with Azure, check my previous post, and get a free trial. Moreover, we need (and we appreciate) your feedback!

Technologies


MS technologies

We use HTML5 and LESS for our View layer. LESS is very handy in maintaining big style sheets.

We use TypeScript (which compiles to JavaScript). Strong typing, and abstraction over JavaScript inheritance (TypeScript classes) is very, very helpful in building large-scale application. To be honest, I do not know how we would be able to maintain the new Azure Portal using raw JavaScript.

Our main JavaScript Framework is Knockout.js. This allows us to prepare generic, reusable controls that can be used by other teams without the need of interaction with the DOM.

Our unit test framework is QUnit. For integration tests we use Selenium.

We use git for source control management. As Continuous Integration Server, we use Jenkins.

We have code review process supported by CodeFlow. It is required to have at least 2 reviews before code can be checked-in/pushed to the repository.

Building process is supported by MSBuild.

Behind the scenes, we use bunch of other JS libs, e.g. q.js, inject.js, d3.js, hammer.js or ZeroClipboard.js.

Summary

After 1 month I love it! There are many challenges, and interesting problems to solve. I am still new to the project, and I didn’t discover it entirely yet. What I can say now, I really like the people from my team, the software development process and work environment in my team.

Probably I will be writing about my work on this blog. Stay tuned!

MS sign