On Appreciation

Over on Twitter today, there’s a trending hashtag #HonoringWebFolk, started by the very honorable Molly E. Holzschlag. My feed is full of friends, colleagues, acquaintances, and folks I’ve yet to meet expressing their gratitude to “unsung leaders” for their contributions to the web. Of course, some of the folks being honored aren’t exactly unsung, but even Internet famous tends to rate below a C-list Hollywood celebrity:

image

The list of people I should thank is long—from the folks who took a chance on me back before I’d really written anything of note, to the colleagues who challenged me and helped me grow. One of the recurring themes developing as I slowly crank out my Microsoft-years memoir is how unbelievably lucky I am to have had the chance to work with so many fantastic people over the years.

However, when I think about the unsung heroes I’ve worked with, the first name that comes to mind is Ed Praitis. Ed was a developer on the IE Fundamentals team who made many contributions over the years; one of his most important tasks in the IE9 timeframe was the grueling work of improving add-on compatibility as we continually ratcheted up the security and reliability of the browser. As we made fundamental architecture changes along the way, add-ons written in the era of single-process, non-Protected Mode browsers blew up, often in spectacular fashion. Many of these add-ons were broadly used and essential to everyday users, especially in countries like South Korea. While we evangelized the HTML5 future as loudly as we could, we know we’d be unable to get these users to even upgrade to browsers with better standards support if their banks and other critical sites didn’t work on Day 1. As if debugging sites and add-ons written in Korean wasn’t hard enough, most of these add-ons were designed with obfuscation and anti-debugging code in an attempt to foil malware. And yet Ed soldiered on and helped ensure IE9 had a smooth launch, unblocking deployments and helping drive toward a HTML5 future.

More personally, Ed provided unexpected and fruitful encouragement at exactly the right time. As we built IE9, I lamented that the dev team couldn’t muster the resources to fix around a dozen performance bugs in the network cache code. As I explained the changes needed and how important they were, he listened thoughtfully and then quietly noted: “It seems like you understand this stuff pretty well. Why don’t you just fix it yourself?”

I chuckled until I saw he was serious. “But I’m a PM!” I protested, “we don’t check-in code. At least, nothing like this.”

“I’ll review it for you if you want,” he offered.

And this was just the push I needed. Within a few weeks, I checked in my fixes, and this was probably the work I’m proudest of in over a decade at the company… helping save hundreds of millions of users untold billions of seconds in downloading pages.

Unfortunately, I never properly thanked Ed for his encouragement.

Two other Microsoft stories come to mind.

Early one morning, the IE PM team was having some sort of internal team-building event in a nearby building. One of the exercises called for us to form two long lines facing one another, and we did so in the entry hallway, one line to each side of the hall. Before the exercise started, a few of the employees who worked in that building arrived for work. They looked confused at what must have looked like a receiving line of some sort, until one of the PMs (I cannot recall who) started clapping and the rest of us joined in, cheering on the arrivals as if they were rockstars who’d arrived at a venue. They were beaming as they walked off to their offices, doubtless still confused, but certainly happier than when they’d come in. It was random and beautiful, and later I often mused that teams ought to consider doing “Rockstar Hellos” as a morale event.

When I left Microsoft, I sent out the typical farewell mail to my immediate coworkers. This mail was circulated more broadly to various folks and I received many extremely kind farewells from all over the company. There’s nothing quite like getting a personal mail thanking you for specific contributions you’ve made from someone you admire, especially when you didn’t expect that person to even know who you are.

Express your appreciation today, and as often as you can. You never know who you might inspire.

-Eric Lawrence

Authenticode and ClickOnce

On my old IEInternals blog, I posted a fair bit about using Authenticode to sign your programs so that their origins could be identified and to avoid triggering warnings from SmartScreen. My last post on that blog before Microsoft took it away was about using a hardware token to improve security of your certificate’s private key.

Unfortunately, one topic I didn’t cover was the use of Authenticode with ClickOnce applications. Fortunately @RobinDotNet did a deep dive on this topic nearly two years ago and published her results in this two-part series:

A simple summary of these thorough posts: You should use Authenticode to sign both your app’s executable and the setup.exe bootstrapper to help ensure that your ClickOnce invocation isn’t blocked by SmartScreen. This signing is slightly trickier than it sounds because you must sign the files in the proper sequence or the ClickOnce manifest file will contain the wrong hash value. The most reliable place to invoke signcode.exe is in the AfterCompile or BeforePublish steps.

Note: Signing ClickOnce apps is especially confusing because there are so many different things to sign: the manifest, the assemblies, setup.exe, and the executable. When you specify a signing certificate in the project properties, that certificate is used to sign setup.exe (used to install dependencies if the required frameworks aren’t yet installed) and the ClickOnce manifest, but it isn’t used to sign the executable. If you tick the Sign Assembly box, you might expect this to code-sign the executable too, but this doesn’t perform Authenticode signing– it instead applies a strongname to the assemblies. Strongnames aren’t examined by SmartScreen (or much of anything else for that matter).

-Eric Lawrence

How Hard Could It Be

I have an idea for a new reality show; it’ll be called “How Hard Could It Be?” The show will feature everyday people approaching straightforward (but new to them) tasks, for instance, minor home repairs.

For instance, in the kickoff show, a software developer will be faced with filling a gap introduced in his front porch when a professional replaced an exterior door.

gap

To make it more interesting, we’ll have the work done on the highly-visible front porch, and we’ll have the man’s wife be pregnant to ensure a steady flow of family and friends visiting over the next few months.

The show will start with the man rubbing his chin and looking at the gap. “I know”, he’ll say, “I can fill this with concrete. I mean, ‘How hard could it be?'”

We’ll follow our character as he researches by watching assorted videos on the Internet, wherein a wide variety of workaday joes install concrete successfully in a wide variety of projects.

Confirming the ease of his project, he’ll drive over to the local home depot, grab an 80lb bag of concrete, a few stirs, a 5 gallon bucket, and some red concrete dye. That’s right, dye. The dye serves two purposes: One– to attempt to match the final result to the nearby brick and other décor. Two– so that the viewers at home (and any passers-by) can easily see all of the unintended places that the concrete ends up. To up the ante a bit, this project will begin late on Sunday morning (ensuring that only one day can be spared for the work) and we’ll film on a May day in Austin with afternoon temperatures in the mid-90s.

Reading the bag of concrete mix, he’ll scoff as he reads “Do not let concrete dry in your hair” and feel confident that this project is going to be trivial: “How hard could it be, if the package needs to warn the typical user of such things.”

As the afternoon proceeds, we’ll watch our hapless hero increasingly drenched in sweat, as he learns valuable lessons like: ‘Why you don’t want to pour concrete mix without a facemask’, and ‘Why do professionals mix concrete in wheelbarrows instead of buckets.’ A counter on the screen will track the skyrocketing obscenity count as the afternoon proceeds toward dusk.

The show will end with our red-tinted grimy hero and his very-pregnant wife on the porch looking forlornly at the final lumpy, off-color result.

She’ll look on the bright side. “It won’t look so bad after we cover it with the welcome mat.”

OnBeforeUnload

This was the farewell email I sent to my colleagues when I left the Microsoft’s Internet Explorer team to go work on Fiddler full time at Telerik.


Just over eight years ago, a question in an email changed my life.

At the time, I was a PM on the Office Online team, and I had mailed the “IE team” (which then consisted of a skeleton crew) to try to get help on a browser caching problem. I got an apologetic reply saying that unfortunately IE didn’t have the bandwidth to look into this quickly, but we should stay in touch. At the bottom of his signature was the line “Want to change the world? Join the new IE team today.” with a link off to the Careers site.

I harrumphed and went about my day with nary another thought about it.
That night, however, I couldn’t sleep and didn’t know why. Going over the day in my head, I thought what a pompous little recruiting signature from that IE guy. Change the world. Heh. As if.

And then I started thinking about it a bit harder. I mean, I’d used IE almost daily for half a decade, and was then spending at least 40 hours a week in the browser. IE had hundreds of millions of users, many of whom probably used it as often as I did. Firefox 1.0 was about to ship and it looked like another browser race was pending.

Where else in the world could I have as much impact? I asked myself, and the answer was pretty obvious: nowhere. And besides, if I joined the IE team, I’d get source access to WinINET and could eliminate that caching bug. :-)
I submitted my application the following day.

Within the first month, I’d printed out the entire source to WinINET and found the six (!!) bugs that were preventing the Office Online image from caching correctly. My lead asked whether this meant I was now a retention risk. I scoffed, and showed the dozens of other bugs I’d circled in my printouts. All told, we fixed about a thousand bugs in WinINET in the IE7 timeframe, and many more since.

Over the last eight years together, we have both changed the world and responded to the changing world. We’ve kept Internet Explorer not just relevant but exciting, and in doing so kept Windows at the cutting edge of platforms. We invested heavily in security to keep our users safe, dramatically improved our standards support to embrace the modern web, and multiplied performance many times over to enable entirely new scenarios. We did amazing work with hardware acceleration and reversed the trend toward commodity, lowest-common-denominator browsing.

With Windows 8, we’re bringing the system and the web closer together again (with much better security this time). Internet Explorer 11 holds great promise to refine our revolutionary work in Windows 8 to delight hundreds of millions of users even more, across myriad form-factors. It’s an amazingly exciting time to be working on a browser, and the team is stronger and better-invested than it has ever been.

Of course, working on the IE team also changed me. I met lots of brilliant people, many of whom became good friends and one of whom became my wife. With encouragement and support, I went from writing as little as possible to delivering nearly 200 blog posts, and went from being extremely shy to relishing the opportunity to deliver presentations at conferences like MIX and the PDC. My thanks to you all!

It’s with a heart both breaking and bursting with excitement that I announce that after four major browser releases, I’m off to explore new challenges. In October, my wife and I will be moving to Austin where I’ve taken a job as a .NET developer on a small team. While my post-Microsoft impact is sure to be smaller, it will be good to flex some different muscles and take a look at our industry from a different vantage point.

I’ll be cheering IE11 on from the sidelines and I’m confident that our paths will cross again.


For my farewell party, the team brought a cake and a keg of my favorite beer (Mac and Jacks) and delivered a farewell PowerPoint slideshow. They also presented me with a violin (Fiddle) signed with well-wishes from the team, and gave Jane a pink cowgirl hat with the express intention of getting me to drink enough to allow them to take this photo: