Microsoft

How we saved $1,000,000 for Microsoft with this one, small change

British Cycling Team - 2012 Olympics

Everyday when I am doing some small bug fixes or minor improvements I am thinking about the British Cycling team. They dominated 2012 Olympics thanks to marginal improvements. Such as cleaning hands properly, taking their own pillows when traveling or sleeping in the right position. All of these small things put together resulted in 7 out of 10 track cycling gold medals.

It turns out that the same strategy might work in software development. Especially if you work on large project.

1 million dollar improvement

In Azure Portal we have hundreds of developers working on one codebase. We are using MSBuild to perform builds. With default options, MSBuild was printing out to console a lot of logs that weren’t very useful. When you are building project, you are usually interested in errors. It turned out that changing verbosity of output speed up builds from a few seconds to a few minutes depending on the project that is being built and type of the build (incremental / rebuild all).

Taking into account that there is at least 100 developers working everyday on the Azure Portal (in fact there is much more, but not everybody is working on the Portal full time), and assuming that everybody is performing at least 20 builds per day (savings up to 30 seconds per build), and 4-5 full project builds (savings around 1-2 minutes), every developer can save around 20 minutes everyday!

This gives us:

100 developers x 20 minutes x 240 days working days per year = 480,000 minutes = 8,000 hours

Assuming ~$150/hr  it give us total savings: 8000*$150 = $1,200,000

Incremental changes over years

When I am looking back, I am impressed how much the Azure Portal have changed over last two years. This is portal in 2014:

Azure Portal in 2014

This is portal in 2017:

Azure Portal in 2016

We haven’t done any breakthrough changes overnight. I have never had a feeling that one day resulted in some significant difference. It was 1 step at the time, one small bug fix one day, one tiny part of new feature another day.

Small improvements every day, everywhere…

This applies not only to large scale project. Think about Open Source. Even when you are doing documentation improvements for ASP.NET docs, you can save time for hundreds of developers. You are not saving particular company’s money, but you are saving our (developers) money and what’s even more important, time that can be invested somewhere else.

Another great example of small incremental improvements is John-David Dalton. Creator of lodash. He is contributing code on github every(!) day for a few years now. This is his github contributions chart:

John-David Dalton contributions

No white squares. Some of his daily commits are tiny, some are small. By being consistent every day, over years he was able to create one of the most popular JavaScript library.

What small improvement can you do in your project? Think about it, and remember that best ideas are born when you are away from your computer!


My second year at Microsoft

Jakub Jedryszek - Microsoft badge

It feels like it was yesterday when I published My first year at Microsoft. Time is going fast! This is what usually happen when you have a lot of things to do, and you enjoy it. My second year spent at Microsoft has been great! Full of new experiences, challenges, and lessons learned.

Azure Portal

Azure Portal in 2016

For the past 2 years I’ve been working on the Azure Portal. Last 12 months has been very important for entire Portal team. Since December 2, 2015 the new Azure Portal is no longer in preview, and is now an official management interface for Azure. The Old Portal is still available, but we slowly retire its features, and move them one by one to the new Portal. More, and more people start liking the new, revolutionary UI. We are getting requests to Open Source our UI, so that people can use it to build their own management interfaces. If you are interested in that, vote here.

Over last year I helped to improve Portal reliability, which was our last milestone before becoming the official management portal for Azure. It was one of the hardest things I’ve ever worked on, because of the Portal Architecture. We started from 80% reliability in some areas, and our goal was to achieve 99.9%. It was extensive few months of investigation, bug fixing, and optimization. Once we achieved three nines, now we have to stay there. We are getting regressions from time to time, but for most of the time we keep the reliability at the desired level.

Another big area was improving accessibility (keyboard + screen reader support). It was very challenging task because, again, the Azure Portal is nothing like most of web apps. Especially from the design perspective. It’s totally different, non-standard, and has a bunch of features nobody have done before (blades, tiles and journeys). As of today I am amazed how much progress have been done, and what the current state of Portal accessibility is. One thing that amaze me at Microsoft is how the smallest, tiniest, everyday improvements makes a difference in a long run.

Besides reliability and accessibility, I work mostly, on the web controls that are being exposed by our Framework. Partner teams (e.g., Web Apps, Virtual Machines, SQL, etc.) are building Azure features using our Framework and controls. Over last 12 months I created a few controls, added a lot of features to existing ones, fixed a tons of bugs, and made a lot of improvements for date/time controls with help from Matt Johnson (yes, he does not work for our team, but he is one of the best date/time and timezone experts in the World, and it happened that he works for Microsoft so it would be stupid to not ask for his expert advice).

There is also one thing I need to rant about: Safari 9.x (and all earlier versions) does not support Internationalization API (Intl). We are using Intl API for numbers and currency formatting. At the beginning, when we were still in preview, we hoped that Safari will add Intl support soon (in a year or so), but it didn’t happen. We had to use polyfill. Oh…actually I should rant about other issues we had with Safari (like Local Storage does not work in private mode), but you can check caniuse.com or just read an article: Safari is the new IE.

In addition to work on features, I also did a few improvements on our development workflow. From automation scripts, through some helper methods for unit testing, to speeding up local build time by changing MSBuild verbosity (printing to console takes time, in some cases we saved up to 1 minute of build time thanks to this simple trick!).

Speaking, traveling, conferences

NDC London 2016

 

Over the last year I have spoken at a few conferences, Seattle Code Camp, and gave a talk at SeattleJS meetup.

I’ve been speaking mostly about TypeScript, Azure Portal and Aurelia Framework (yes – the last one is totally not related to my day job).

My most recent talk about the Azure Portal architecture received a lot of great feedback. One gentleman told me that it was the best talk of the VSLive Redmond conference, somebody wrote a comment that it was the “Most interesting non-scotthanselman presentation ever”, and one person mentioned it (as “excellent talk”) in Azure Portal user voice (which I found while writing this post and searching for a link to Open Source Portal UI user request for previous section).

Over last year I learned that going to talks at the conferences is the least important thing. The most important is to connect with people from outside of your everyday work environment, share experiences, and networking. The most interesting conversations don’t happen during the presentations, but at the post conference dinner or after party. I really recommend to read chapter 14 of Never Eat Alone before attending a conference!

When I am telling people that I travel around the World to speak at conferences, they think it looks like this:

conferences wolf of wall street

They forgot that most of the time it looks like that:

conferences - travel

Of course there are pros and cons.

Pros:

  • Learning new things (while preparing your talk, and during the conference from others).
  • Meeting new people
  • Visiting places you haven’t been before. On my way to NDC London I paid from my own pocket for flight through Iceland with 34 hours connection flight in Reykjavik. I managed to see the Golden Circle, attend New Year’s Concert at Harpa, and I’ve seen the Northern Lights. I have also seen a little bit of London during the same trip

Cons:

  • You need to work after hours to learn and prepare talk for the conference. You also need to write a good abstract so you talk will be selected. This takes a lot of time!
  • Travelling to conference takes time that you could spend with friends, family, or riding bike. Even if it is domestic flight it takes ~30 mins to get to airport, then ~2 hours on airport, ~2-4h during the flight, ~30 mins to get to the hotel etc. When it is on the other continent then you waste even more time + get jet lag. Oh…and you need to pack day before (~30 mins to 1 hour), and you don’t have your nice 3 monitor setup and comfortable Herman Miller chair for a few days.
  • Sometimes you don’t see anything except airport, aircraft, hotel and conference venue (that was the case when I went to ConnectJS conference in Atlanta and Open Source North in Minneapolis).

Thanks to speaking at conferences, I met a lot of interesting people, and definitely expanded my knowledge. What’s important: I learned the most during one on one conversations in the hallway or at the conferences’ dinners.

In addition to conferences I was a guest at .NET Rocks podcast, where I talked about the Azure Portal. I was also interviewed by David Giard – who I met at Open Source North conference – for his Technology and Friends series. Sara Clayton – who works on Open Source at Microsoft, and who I met at the All Things Open conference – did an interview with me about my Open Source library: voiceCmdr. Jeremy Foster (who I met at SeattleJS meetup) did an interview with me for his CodeChat show (episode coming soon).

Learning

workspace

Over the last year I’ve learned a lot about web development, performance, and accessibility. A lot of things I learned are captured in my last talk about the Azure Portal. I improved my coding skills, debugging skills, and also – mainly thanks to attending conferences – communication skills, which is very important in Software Engineer portfolio.

In my first year review I forgot to mention Microsoft Library, which is one of my favorites benefits at Microsoft. Most books I have read over last 2 years are from MS Library. I reviewed a few of them, and some landed in my favorite books listThe Pragmatic Programmer book said that you should read a technical book every quarter.

Last time, I also didn’t mention that when you are working on something related to Cloud, you have to be on-call once for a while. I am very lucky, because our team is large, and rotation requires everybody to be on-call only 1 week per 6-7 months. I have some friends who are on-call one of every three weeks, or even every other week (sic!). FYI – being on call means:

  • no flexible work schedule
  • no freedom (you need to be able to act on incident right away = you need to be close to your computer and Internet = you don’t go hiking, you don’t go out with friends, you don’t go for a bike ride)
  • I don’t know what can be worse than your phone ringing at 4 am, and some people asking you for help with investigating some problem they cannot solve (hint: these people are not stupid, the problem is hard, your brain usually do not work the best in the middle of the night)

However, there are also a good things in being on-call:

  • you can learn more about the project (when you need to investigate/diagnose something in the area you are not familiar with)
  • you can improve your debugging/investigating/diagnosing skills
  • you can meet new people across the company

The new thing for me, over last 12 months, was conducting interviews. It was very interesting experience. The most important thing I’ve learned was to never skip the coding question. My interview usually contains 3 parts:

  1. chat about candidate previous projects/experience
  2. easy coding question
  3. design question

There will be more details in upcoming blog post, but if you are interviewing people, I really recommend you to check out The Guerrilla Guide to Interviewing (version 3.0) by Joel Spolsky.

Staying fit and healthy

Jakub Jedryszek - run

When you are developer, you need to take care of your health. Sitting 10+ hours is not good for you. Sitting is the new smoking. Additionally it turns out that staying fit and healthy makes you better developer.

I bike, I swim, I run, I hike, I take part in bike rides (like 206 miles Seattle to Portland, or 180 miles Seattle to Vancouver), and I compete in triathlons once for a while.

Staying fit and healthy is not only about exercising. It is actually more about your diet:

exercise and diet chart

However, diet-miracle is not a way to go. Last year I tried to count calories I burn and consume throughout the day, and develop a diet I would be able to sustain for a long term. The trick is to realize that it is not worth to eat some things. E.g., this 500 calories cookie is not worth it. I would rather eat two Symphony bars from Hershey’s. Oh…and you need to wait for results couple of months or so.

It’s great that Microsoft cafeterias now provide calorie counts in the food menu. I am not eating these burgers that are 1400 calories, but other ones that have only 700. Together with Microsoft running trails it provides a great fitness bundle.

There are also other aspects you should take into account to stay healthy.

Oh…and I forgot to mention another awesome Microsoft benefit: Pro Club gym – one of the best gyms on the West Coast, and for sure the best in Seattle area. When I did a tour (right after I joined Microsoft 2 years ago), and the guy who was showing me around told me that they can service my car when I work out I was sure he was joking…he wasn’t.

PRO Club

What next?

Stay tuned!


New Go To shortcuts at Azure Portal

A few weeks ago, when pushing towards the new Azure Portal version 1.0 (aka GA at Microsoft), we added new shortcuts that can be activated with G+[key].

We also changed/updated the old shortcuts that you can find in my previous posts: 1, 2.

The full list of shortcuts is available on pressing key:

Azure Portal - keyboard shortcuts

You may notice that we change shortcut for opening dashboard from H to D. However, H will still work. We didn’t want to take it away from people who already learned it, and got used to that. The same with New (formerly Create): the new shortcut N will work together with C.

BTW: If there is some keyboard, or focus related issue on the portal that is bothering you let me know!


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.