How I Stopped Worrying And Learned To Love the Reboot
A while has passed since the 2005 PDC, so I can laugh about it now, but at the time, things were not fun at all.
It started long before the PDC. Doug Purdy and I were asked to do the Avalon/Indigo “interop” talk. We got together and I volunteered to “PM” it (PM is a verb as well as a noun at MS). Over lunch (we both love CPK), we hammered out our ideas for a fun demo that showed off the integration points between these two technologies, split the tasks, set the dates and off we went.
My first task was to gather the graphics we’d need for our Avalon front-end, since neither Doug nor I are artists. I asked newly hired Adam Kinney, who did a fabulous job. Everything good about the app is Adam’s fault. Thanks, Adam! I was also to build a script for our demo that we could run by folks internally, which I did.
Doug’s job was to put up a web service that I could write my app against. The problem is that Doug has far, far more responsibility than I do, since while my day job is to PM a group of about 5 people, Doug’s is to PM a group of about 250. At MS, when you’ve got too much to do, the time you set aside for a lower priority task is often “pimped” to service the higher priority task (that’s a technical term : ). I got pimped — hard (without so much as a kiss…).
When you’re pimped at MS, one handy trick is to schedule a “working” meeting, where you sit in the room with the folks that were supposed to do the work on their own and you work “with” them, i.e. look over their shoulder and give them shit if they’re not working on your thing. Unfortunately, the only time I could get with Doug was 6pm-10pm one evening, but I took it and we spent a pleasant evening writing our bits of the app and making them work together under WinFX beta 1.
Then the September CTP bits came along that we were to give away at the PDC. I spent a few hours porting my bits, but Doug didn’t have the time to do his ’til just before the PDC, so we didn’t get a chance to integrate our two apps ’til the week of the PDC itself.
But let’s back up. I’m at the PDC Tuesday morning. My Avalon app portion is ported and running, as is Doug’s Indigo app portion. I go to the keynote in the Microsoft employee overflow where we get to make fun of the people on the screen w/o disturbing anyone and we’re having a good ol’ time. I don’t see Doug, but that’s not surprising, so I head up to the speaker lounge, grab a network connection and drop him a line.
By Wednesday afternoon, I still hadn’t heard from him. I drop him another line. Still nothing. Martin Gudgin, my long-time friend and Doug Purdy direct (aka Martin works for Doug), places a call to him for me. Doug picks up. He can do that because he’s not on a plane down to LA. No, he wouldn’t do that because planes freak him out. Instead, he’s on a train. The ride is 35 hours long and he’s still in the middle of it. I won’t see him ’til later this evening, if at all. At least he’s safe and he’s using the training ride to polish his demo, so I go to a party and feel better.
I awake to find an S+ in my inbox. “S+” is what what ’softies call an Outlook appointment request because we used to schedule meetings using a program called Schedule Plus and, like many things at MS, the noun was verbitized. The S+ is from Doug and he wants to meet to me this morning to have a working meeting to do our integration. I’m happy to do so, so I report to the speaker’s lounge on Wednesday at 10am.
Except for commitments, like Doug’s other talks, my Windows Technology Off Topic mailing list member mini-DevCon and a tiny bit of sleeping, Doug and I are working on the integration of our demos from Wednesday morning at 10am until Friday morning at 4am (our talk is at 10:30am Friday). To get things to work, we’re battling issues we never saw before because in an effort to give our customers the latest and greatest bits, the CTP has regressed on the Avalon/Indigo integration front.
For example, while the add-in that adds Avalon/Indigo features to VS05 modifies the Add Web Reference to create an Indigo client-side proxy, there is no way to set the flag to give us async methods and the generated code for endpoints with more than one method doesn’t actually compile (nor is it easily fixed to compile). The command-line utility, svcutil, generates async methods and the output compiles, but when the async methods are called, they block the UI thread. The worker thread is still spawned and used, mind you, it’s just that the UI thread is blocked ’til the worker thread is done (handily defeating the purpose). Even when we switch the client to use BackgroundWorker so that async calls are really async, the first Indigo call takes 20+ seconds. We didn’t learn this ’til later, but this was apparently due to a DNS look-up error when Indigo was used with a network connection (we were using two machines to be as real-world as possible…). This list went on and on.
We did finally get it all working by 4am, but by then we were swearing at everyone and everything that had gone into the creation of either technology, which made us good company for the other last-minute-Lou’s that were hammering away at their demos into the wee hours of the morning (although Doug and I had the dubious honor of being the last ones in that damn speaker lounge).
I woke up early, so I headed to our session early. Doug had another talk right before ours, so I thought I’d get things set up, test them out as much as possible, etc. Sitting in the back of the room about 15 minutes before the other talk was about to end, I started my laptop up from Hibernate mode just as my cell phone rang. It was a friend, so before my machine had fully booted, I flipped the lid closed again and answered my phone. Just then, the speaker ended his talk, so I ended my call and wandered to the front of the room with 45 long, juicy minutes to set up.
I sauntered onto the stage. I got out my power cord in a leisurely fashion and started my laptop to boot.
I hooked up my power cord and thought I saw a hint of blue on my laptop screen and it was booting again.
I watched more carefully and yes, that was the BSOD. I shutdown the power completely and waited a few seconds. Booting again gave me a BSOD again. Minutes are ticking by, eating into my comfortable lead. The IT guys are coming up to test my laptop’s video output and to hook up the mic. I ask if someone technical could help me. They get onto their radios with a hint of panic in their voices.
By now, I’ve trying safe mode booting, both into Windows and into the command prompt, both of which yielded a BSOD. Then I remember my CD case. I always carry a set of CDs with me with my most critical software, just in case (those old instructor habits die hard). I had recently gone through it and cleaned out a bunch of stuff, so the single CD left in the case is my Windows XP SP2 boot CD. I put it in and pray. As it turns out, I’ve got plenty of time to establish a connection with my maker, because it takes ages for that XP CD boot to get somewhere useful. I chose the Recovery Console and wait.
In the meantime, Martin has wandered in to say hello. It’s about 10:10 and my talk starts in 20 minutes. I ask him if he’s got WinFX and VS installed on his laptop. He says he’s got WinFX and a version of VS installed, but neither are the PDC bits, so they’re not likely to help me (I was up ’til 4am getting my bits working for the PDC build — I couldn’t imagine switching versions on the fly). I ask him to find someone else with a machine I can use. In the meantime, I’m checking the PDC boxes. They’ve got two, both running WinXP (great!), but neither running WinFX or VS05 (boo!). All I can do from these machines is run my PowerPoint deck, but because this session was meant to be code only, we’ve only got about 3 slides. Without the demo, we’ve essentially got nothing.
Now it’s 10:15 and the audience is gathering. Also gathering are people trying to help. One guy’s got a machine with the right bits, but they’re running in a VPC, which is not the greatest place to show off Avalon (but thanks, whoever you are, for trying!). One attendee offers his laptop, which has the right bits installed, but he doesn’t have a power cord and there’s only about 30 minutes worth of battery life left. Rob Relyea (I think) finally comes up with his shuttle PC with the right bits and a power cord and starts hooking it up, along with everyone else I can find that might be able to help me, all of whom are now busy hooking up PCs in line line that nearly bows the table on the stage.
At last, I’m at the recovery console and I’m running every command I can think of, e.g. fixmbr, fixboot, chkdsk, etc. Most of the commands are saying scary things like “Are you sure you want to execute this command? It might work, but I can’t promise not to cause flames to shoot out the USB slots.” I’m typing “y” as fast as I can ’cuz I’ve got nothing and at least flames would be engaging.
Now it’s 10:20 and Doug has just shown up from his previous talk. He boots his laptop without a problem, the sound guys have their way with him, his video works and he announces that he needs caffeine. Of course, I’ve got adrenaline shooting out of my eyeballs by now and I want him to feel my pain, so I tell Doug his is absolutely not going anywhere. He says he is. I tell him he’s not. Now, Doug and I are both big, loud guys, so all of the folks in the front rows, including representatives from the technologies we’re demonstrating that asked us to give this talk, are witnessing us fighting with each other minutes before the talk begins. Finally, Rob to the rescue again, offers to get Doug some coffee.
At around 10:25, all of the fixthis and chkthat commands have been run and I reboot. For the first time in almost an hour, I can log into my laptop and I start to think I might actually get to give my first PDC session ever (did I mention I felt a little pressure?). We pull up the finished version of our app and test it end to end. There’s still the initial 20 second lag, but it all works. Brimming with confidence that only comes from avoiding a bullet with your name on it, I hook up the video on my laptop.
All that comes out is scrambled garbage.
Now we’re panicked again, frantically futzing with the video settings. They all seem mostly right, so we change some things that shouldn’t matter, but nothing fixes the problem.
We can’t get the video to work and now it’s 10:30.
The sound guy puts on my mic and practically dives off the stage in case something does burst into flames, as seems the logical next event.
I pull up the slides on one of the PDC computers so we can start the talk and reboot my laptop at 10:31.
At 10:32, we’ve started the talk. Doug is telling folks who we are and why we’re here. I’m looking for the backdoor.
I log into my laptop, start up the talk on the same slide that’s currently showing and press the switcher to show my laptop’s video.
It shows and I am Superman.
This is where things get fun, because at our most morose, Doug and I are loud and obnoxious in a way that most audiences like. By now, we’ve poured so much energy into the talk right up until literally the very last minute that now we’re practically levitating.
Doug has the idea to take questions first, so I’m writing down a list of stuff that has nothing to do with the talk, all the while we’re making fun of each other and the audience. The audience eats it up.
I’ve got a developer from Indigo and a PM from Avalon in the front row that we bring up on stage because they’ve just gotten engaged and we made them kiss to show off the power of Avalon and Indigo integration, I announce that I got ordained on two separate internet churches the night before in case they wanted me to marry them on the spot. They politely decline, but the audience eats it up.
I show off our application with increasingly funny caricatures of Doug and me. The audience eats it up.
We start into the actual code integrating Avalon and Indigo, joyfully pointing out the problems with the current versions of each other’s technologies, making sure the audience knows the current state of the bits and how to work around problems while pledging to fix things by RTM. After a bit of trouble, we get our integration code working across the network between machines and give each other an enormous hug, professing our undying love for each other and guess what? The audience eats it up.
It’s like a TV sitcom with a laugh track every 60 seconds, except that Doug and I are just riffing and the laughter is real. I’d say it was the speaker version of jazz and it rocked the house.
Of course, as was inevitable, we got to a place where our demo finally failed, but only after we’d gone over our allotted time by 5 minutes and Doug redeemed us with 10 seconds more typing, an off the cuff demo and a flourish, at which time we wisely took our bows and got the hell off the stage.
What was the result? Lots of folks said stuff in their evals like, “Siegfried and Roy have nothing on Chris and Doug. It was a perfect way to wake up on the Friday of the conference.” However, some folks dinged us for “too much show, not enough substance,” and they were right. We would’ve shown more stuff if we could have, but frankly, I’m just happy one of us didn’t spontaneously combust.
The best results of the talk was that Doug went home with a giant list of bugs to get fixed before the WinFX RTM and I kicked off the “WinFX Cross-Pillar SDK Technology Sample Working Group” dedicated to making sure we have a much greater set of SDK samples to show off and drive quality into the cross-pillar integration points between Avalon, Indigo and Workflow. I’d actually like to poke my head out of the speaker lounge at the next PDC and I’ll be damned if I’m going to let the quality of these particular technologies stop me next time if I can help it (and I can).
Still, I find I have a new appreciation for jazz…