nik codes

Archive for the month “July, 2015”

301 Moved Permanently, Location: Microsoft

Pluralsight If you like my blog, you’ll love my Pluralsight courses:
Tracking Real World Web Performance
WebPageTest Deep Dive

A few weeks ago, I began a new gig as a Program Manager on the Cross Platform and Open Tooling team at Microsoft!


Needless to say, I’m very excited about this opportunity. Let me tell you why:

  1. It’s a very exciting time to join Microsoft. The entire web stack is being re-done. There’s a new browser in Edge, new cross-platform web framework in ASP.NET 5 and Azure, which is technically the “oldest hat”, is still under heavy development and revs every six weeks. As a lover of the web, I can’t think of a better company to be working for right now than Microsoft.
  2. I’m working with a cutting edge group that embodies, perhaps more than any other team, what the “new Microsoft” is all about. Case in point: After 18+ years of successfully avoiding Apple and Mac computers, I’ve been issued a Mac Book Pro as my work machine. I’m still getting used to the OSX way of doing things, but I’m very excited to see how the other side lives. Need more proof that this team is doing something different? Well, they released Visual Studio Code, a cross platform text editor, just a few weeks ago – and that’s pretty cool.
  3. I’ll be working with Anthony, the co-founder of Glimpse. We’ve worked together for nearly five years now, across three different companies. If the past is any indication, we’ll be able to do great things together at Microsoft.
  4. My family and I get to stay put in New York city. Remote work is nothing new to me, and I’m happy that I don’t have to disrupt my family’s life to take this opportunity.

I’d also like to take a moment to thank Red Gate for the past three years. Working for them has been a joy. Not only did I get to work directly with the community to bring Glimpse to new heights, but I got to see the world speaking at tons of conferences and made many great new friends. I’ll certainly be staying in touch with everyone there and I wish them the best of luck as our paths take us in separate directions.

I’ll continue to periodically post on this blog as well as tweet @nikmd23.

What Military Strategy Teaches Us About Web Performance

Pluralsight If you like my blog, you’ll love my Pluralsight courses:
Tracking Real World Web Performance
WebPageTest Deep Dive

In December of 1974, Communications of the ACM magazine published Computer Programing as an Art by Donald Knuth. In it, Knuth wrote these now famous words:
Comunications of the ACM, December1974

The real problem is that programmers have spent far too much time worrying about efficiency in the wrong places and at the wrong times; premature optimization is the root of all evil in programming.

A couple decades earlier, at the conclusion of the Korean War, US Air Force fighter pilot Colonel John Boyd, graduated at the top of his class from the prestigious Fighter Weapons School in Nevada. Shortly thereafter he became an instructor at the school revolutionizing aerial tactics and developing the concept of the OODA loop.


The OODA loop is a reoccurring decision making cycle that, while originally intended for use by fighter pilots, has now been adopted in many fields including litigation and business. Boyd broke the loop into four phases:

  1. Observe: Collect data from the surrounding environment
  2. Orient: Analyze and synthesize the data to form a mental model
  3. Decide: Determine a course of action based on the mental model
  4. Act: Physically act on or implement the decision

The OODA loop begins with Observation, and ends in Action, but at any point in the cycle, if the situation changes or you do not have a clear picture, you can reset and go directly back to Observation. The more salient point though, is that Action is never reached without first Observing, Orienting and Deciding.

When considering web performance, following the OODA loop ensures that developers avoid the evil, premature optimizations that Knuth warns about. It is very difficult to optimize in the wrong place or at the wrong time if you’ve properly observed, oriented and decided first. Let’s consider how the OODA loop applies to web performance in practice:

  1. Observe
    Leverage web analytics and real user monitoring (RUM) techniques to gather information about page usage and performance. There are plenty of web analytics libraries available that are easy to setup and use. I’ve had great success with Google Analytics in the past. For RUM data, the WC3 has authored several specifications (Navigation Timing, Resource Timing, User Timing, etc.) that have been well adopted by browser vendors and provide most of the data required.
  2. Orient
    With usage and performance data gathered, leverage simple statistics and charting tools to build up a mental model that’s easy to reason about. Median values, time series charts and histograms are commonly used and easy to generate, even using software as common as Excel.
  3. Decide
    Identify popular, yet under performing functionality within the application and decide how to improve it with carefully calibrated synthetic tests. Synthetic testing systems, like the perennial favorite WebPageTest, use highly instrumented browsers to provide deep insight into the loading and performance of web apps. This insight allows developers to confidently decide how to best improve the performance of their targeted functionality.
  4. Act
    Update the code, commit it, deploy it, then take the most important step in the cycle.
  5. Repeat

Are you worried about where to focus your performance optimization efforts? Do you know if right now is the right time and right place? Build confidence, assurance and keep yourself on the rails with the OODA loop.


If some of the terms I used in this post, like real user monitoring, synthetic testing and histograms, throw you for a loop, be sure to check out my Tracking Real World Web Performance Pluralsight course where I cover these concepts in detail, with examples and demos of how to automate the steps of the OODA loop.

Post Navigation