Skip to content

Instantly share code, notes, and snippets.

@mykhalov
Created February 28, 2019 16:43
Show Gist options
  • Save mykhalov/e31a1da579ca778406dab5c10b3ba4f4 to your computer and use it in GitHub Desktop.
Save mykhalov/e31a1da579ca778406dab5c10b3ba4f4 to your computer and use it in GitHub Desktop.
A re-publication of Brad Abrams' The Pit of Success article with the formatting and the URL fixed
title date author original_publication
The Pit of Success
2003-10-02
Brad Abrams

The Pit of Success

The Pit of Success: in stark contrast to a summit, a peak, or a journey across a desert to find victory through many trials and surprises, we want our customers to simply fall into winning practices by using our platform and frameworks. To the extent that we make it easy to get into trouble we fail.

  • Rico Mariani, MS Research MindSwap Oct 2003.

I had a chance hear Rico Mariani do his stump speech on performance of managed code to an audience of very senior technical folks (not sure why they let me in)… As a performance architect on the CLR team Rico has a ton of passion for how we can change internal CLR details to make performance (more specifically workingset) better. He talked about some very cool things we are doing in Whidbey around NGen, VTable layout etc for saving a few bytes per type or instance. All very cool stuff. And in fact we see some fairly substantial performance wins in our performance test cases in the lab.

But our experience with in house, real world applications has been that they are not realizing this level of performance win. Why? Turns out their performance is dominated by other factors. The big wins we realized at the CLR level are just noise compared to other performance problems in the applications. With just a few days of work our pref team was able to improve the performance of one of these in house applications more significantly than all the CLR level improvements combined. Their findings are published here . This is NOT because the app developers are a bunch of clowns. Rather it is because, as hard as we tried in V1, there were still some places where the design of the platform leads them down the wrong path.

Because he was talking (mainly) to a set of platform folks he admonished us to think about how we can build platforms that lead developers to write great, high performance code such that developers just fall into doing the “right thing”. Rico called this the Pit of Success. That concept really resonated with me. More generalized, it is the key point of good API design. We should build APIs that steer and point developers in the right direction. Types should be defined with a clear contact that communicates effectively how they are to be used (and how not to). I am not just talking about the docs and samples (although those are good) but in the design of the APIs. For example, give the “pretty” name to the types most developers should use (ie. “Foo” and “FooBase”).

A powerful thought, crystallized well…. Enjoy.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment