(part 1 is here)
My official full-time start date at Microsoft was June 6, 1995. The first release candidate for Windows 95 was June 8, so in a way I started just in time – I started in time to get the Win95 ship gift (limited edition of windows 95), and also got a watch commemorating 20 years of Microsoft. I think we released the US version sometime around the 24th of June, and as a full time employee, I was technically allowed to attend the various ship festivities. I remember a gathering behind building 4 where way too much Dom Perignon was poured on people’s heads, as well as a larger party at the Shriners club in Seattle. I attended both, but I sort of had to sneak to the first one. I had a lot of responsibilities for the Asian versions of Win95, and I was supposed to be making sure that nobody in Japan ever had anything to complain about when running windows 95. But, I figured that since I gave up my overtime to get a blue badge, that it was ok if I went to check out the parties (note that I did the same thing for the official August 24 launch party). Windows 7 shipped a billion or so languages on the initial release day, but back then, the goal was to ship all of the top languages within 90 days (don’t ask me what “top” meant – what it meant to me was that i was working on Japanese, Chinese and Korean Win95 until the end of August). Eventually, we did ship, and it was time for me to be part of the early product cycle for the first time ever at Microsoft.
So, for a few weeks in September (I think) of 1995, I wrote some completely kick-ass tests that eliminated some of our brain-dead manual testing (I know I need to watch my words – not all manual testing is brain dead, but the testing I replaces was). I wrote a controller that applied configurations to multiple machines (think Japanese computer and share names), then ran a suite of network testing against those specific names to verify there were no problems with any Asian ideographs and network connectivity. I showed my (still awful) boss, and he almost smiled. He was so excited, in fact, that he set up a demo with his boss for the following Friday. I spent the weekend tweaking and polishing my suite to make sure it would survive the demo like a champion.
But the demo never happened.
Instead, on the day before the demo all of “PSD” (we were called the Personal Systems Division at the time) were hauled off to a nearby conference center (the MS conf center wasn’t built yet) so Bill could talk to us. He talked about his Internet Tidal Wave memo and said some other stuff that I’m sure was important. All I know is that by the time I got back to my office, I was on the Internet Explorer team.
I worked a bit on IE 2 (although, to this day, I can’t remember what I tested). IE3 was the “Netscape killer” release, and was on a 6 month schedule (Feb-Aug, 1996). I owned the feature that let you select the language of the page. At the time, languages weren’t auto-detected – instead, you clicked a little globe in the status bar and selected the language you wanted the page to display in. My testing consisted mostly of creating a bunch of web content and putting foreign characters in every html element I could find to ensure that they displayed correctly. I also remember that we changed our behavior with named entities. Before IE3, for example, a Russian page could display the character “?” by using the two named entities. One was the character code point – e.g. &196;. The other, unfortunately (blame front page), was by using the named entity for the code point in English – i.e. Ä (“A” with an umlaut). This, of course, is stupid, but the change was going to break hundreds (the 2010 equivalent of hundreds of thousands) of web pages. I remember a lot of panic and worry among some of the managers. I also remember suggesting that I write a tool to help web masters fix their broken html. I wrote the tool in less than a day and received heaps of praise. Bing tells me that there’s still one web page out there about this tool – kind of funny (and embarrassing, since I’m sure it’s the tool is nothing I’d be proud of today). I also wrote some IIS server extensions that had something to do with language detection. It was interesting – and fun, but I knew that web browsers weren’t my calling.
A few weeks after IE3 shipped, I re-joined many of my friends from the previous year and joined the windows 98 team. The first project I worked on was a suite of networking tests – this time written in C and tested at the API level. I felt like a real programmer for the first time and got a lot of mileage from that little test suite. It was flexible enough to test the majority of network functionality against a variety of servers (anyone remember Banyan Vines?). I was on the international team, and as one of the few people on that team who could program well, I also owned a lot of international GDI features (the component that draws text and images to the screen). There were a lot of interesting issues drawing and printing Asian ideographs – I worked a lot with internal (e.g. Office) and external customers to isolate bugs they had run into on windows 95 so we could determine how (or if) to fix them for windows 98. I learned a ton about fonts – at one time I could tell you everything about how a TTF file was put together and explain details of font smoothing for hours. Today I remember only the basics, but I remember lots of reading and experimenting. Eventually I ended up owning GDI and User (user is the component that does windowing, menus, and controls) for all languages of win98. It made me learn a lot about how windows applications work, and a lot more about application compatibility issues (many app compat issues were rooted in the GDI and User components). Eventually (spring, 1998), windows 98 shipped. It was supposed to be the last version of “consumer windows” ever, so the team disbanded, and I got a job working for a pretty cool guy named Brad.
One of the things I love about Microsoft is that you can change jobs completely without leaving the company. The bulk of Brad’s team tested USB on NT5 (later named Windows 2000). A few others owned testing some of the core USB devices and related peripherals. I was in the latter group and tested video capture devices (aka cameras and TV tuners). Most of my tests were written via DirectShow APIs, so it was an opportunity for me to work on COM and C++. After a while, I really got the hang of it. One of my personal biggest successes at the time occurred when I discovered that I needed a generic library function – something that DShow probably should have provided, but didn’t. I wrote the helper function and it worked well for my testing. Of course, just a few days later, DShow added the API so I didn’t need mine anymore. The really cool part was that my implementation was almost completely identical to the API version – it made me feel like I knew what I was doing. Of course, there should probably have been better communication so I knew that the change was coming, but oh well.
I also did stupid stuff. One of the things you have to do if you’re playing with video and audio via DShow is connect all the darn pieces together. It’s sort of like this:
hr = CreateAConnection(...);
<span class="kwrd">if</span> SUCCEEDED(hr)
hr = CreateAnotherConnector(...);
<span class="kwrd">if</span> SUCCEEDED(hr)
<span class="rem">// connect the things, then if they connect, connect </span>
<span class="rem">// more things, etc.</span>
. . .
I would end up creating what I called “the wedge” – where the inner if in my big connection thingy would start on column 70 or something like that. It made sense to me at the time, but … seriously, yuck.
Firewire/1394 video cameras were new at the time – I had one in my office that I could control via an app I wrote (it eventually became the 1394 camera SDK app). I also had this really cool device that could emulate television signals. I had a lot of fun with that one. This was also the first time I played with code coverage. Even then, I realized that the biggest benefit of CC was finding holes in my tests.
Brad also assigned me two “special” projects. One was some work for Windows 98 Second Edition (win98SE). I wrote (ported, actually), the power management utilities from Windows NT to 98SE. It wasn’t really that hard, but it was cool to write software that went in the box rather than just tests. The other project was this thing called Pandora. Pandora was a DVR (although I don’t think that term was even around yet). I think Tivo was announced at the time, but not out yet, so this was pretty cool stuff at the time. I was the only tester on the project and it was a blast. Unfortunately, however, for reasons I was never told, the project was cancelled.
Then, less than a year after the win98 team disbanded, marketing pushed hard for another windows 9x release. Phone calls were made, and before I knew it, I was on the Windows team again working on Windows Marketing Millennium Edition.