I started working for Microsoft in August of 1984, there were about 600ish people at the company when I started. I loved telling people I was going to work for a small software company up near Seattle that nobody had ever heard of :)

Wow, things sure have changed.

I started in the Multi-Tasking MS-DOS 4.0 group. DOS 4.0 was a real-mode preemptive multi-tasking version of MS-DOS 2.0 that never really saw the light of day (unless you were in France, or the UK). I was responsible for all of the hardware subsystems in DOS, also known as the BIOS (not to be confused with the PC system ROMs, which were also called the BIOS). I maintained or rewrote the keyboard, screen, printer, floppy and hard disk drives.

My first project in the DOS 4 group was to add support for the newest IBM PCs. Code named Salmon, they were 6mHz 286 processors, with a host of advanced features. They had a 20M hard disk! And they supported up to 8M of RAM! I was fortunate, I got to use one of these as my first PC.

After working on MS-DOS 4.0 for about a year or so, Microsoft pitched our vision to IBM, and they liked it. But they weren't interested in MS-DOS 4.0, they just liked the vision :). The rest of the DOS team went to start working on the collaborative project with IBM that would eventually turn into OS/2. And the MS-DOS 4.0 project was officially killed, leaving behind a skeleton crew to support the few remaining customers that had existing contracts. The most significant of these customers was Goupil in France, which had a contract to provide terminals for the French PTT. So Alan Whitney and I spent about 6 months finishing up DOS 4 - mostly spent working on bug fixes and cleaning up the remaining features that had to be completed.

At around the same time (1986 or so), ICL in the UK was also interested in MS-DOS 4.0. They had a new line of computers that they were rolling out, and these new computers were designed to support a great deal more memory than MS-DOS would normally support (IIRC, it was up to 16M of RAM). OS/2 would have been an ideal solution for them, but it wasn't going to ship until well after they needed to ship. So Microsoft agreed to write a custom version of MS-DOS 4.0 for ICL that would take advantage of the extra memory on the ICL computers. And I was given the job of writing this adaptation of MS-DOS.

During the process of writing DOS 4.1, I got married to my college sweetheart Valorie, and we settled down to live in Seattle. But first, DOS 4.1 raised it's ugly head. We returned from our honeymoon, and I stopped in the office to check my mail and discovered that the entire DOS 4.1 team was going to the UK to have a major powwow with the ICL brass responsible for the project. So 36 hours after I got back from my honeymoon, I was on a plane to England, leaving my new bride behind - one of the stupidest things I ever did - I would have had no problem whatsoever convincing Microsoft to pay for an extended honeymoon for us, but... Sometime I'll write about Valorie's experiences at Microsoft, she's got some fascinating stories to tell.

Some time around 1989, I had finally gotten fed up with the lack of respect that the DOS team was getting at Microsoft, and I decided to find greener pastures elsewhere. At the same time, Darryl Rubin was starting to seriously ramp up the development effort on the LAN Manager project. LAN Manager was a networking client and server written for OS/2. It was quickly painfully obvious that Microsoft needed to have a DOS client, since OS/2 wasn't taking the world by storm at this point and DOS clients would be necessary if we were to successfully compete with Novell (the 900 pound gorilla of PC networking). He had assembled a great team of people, including Ralph Ryan as the development lead and Brian Valentine as the test lead.

So I joined the LAN Manager team as the primary developer for DOS LAN Man 1.0. LAN Manager 1.0 was an OEM-only product - This means that it wasn't available as a retail product, but only to network hardware vendors who would bundle it with their networking hardware. I continued working on DOS LAN Manager for versions 1.0, 1.1, and through to just about the finish of DOS LAN Manager 2.0, the first retail networking product Microsoft had ever done.

After LAN Manager 2.0 shipped, in 1989, I was offered the opportunity to write the networking client for a new operating system that Microsoft was writing called NT OS/2. It was to be a version of OS/2 written from the ground-up, utilizing the state-of-the-art in operating systems design, designed by Dave Cutler and his staff of wizards. And these guys were truly wizards. I jumped at the chance, and moved over to work on NT networking. Five of us came over to NT from LAN Manager at the time, and our presence caused the number of developers working on NT to grow to 20 (there are currently over 4000 developers contributing to the Windows XP development effort).

NT OS/2 was a total change in environment. First off, we were working on a totally new thing. Microsoft had never done operating systems development "right" in the past - we had always had OEM customers with requirements that didn't jive with our desires, we had always cut corners in the past with reliability or robustness. But this time it was different. We knew we were working on something that would be expected to last forever. Tom Miller, one of the developers of the NTFS file system commented to me at one point "This may very well be the last opportunity that anyone in the world will ever have to write an entire operating system from the bottom up." And that statement has held true for the past fifteen years. I don't know if it will in the future, but...

On NT, I wrote the SMB based networking client, with Colin Watson's more-than-able assistance (Colin is responsible for NT's NetBIOS implementation, and for the concept of "overlapped I/O". He's the one that came up with the OVERLAPPED structure and all the semantics associated with them). I also wrote the NT implementation of the WfW 3.11 networking browser, affectionately known as the "bowser".

When we started working on NT OS/2, Microsoft's world was totally focused around OS/2 development - OS/2 was the next big thing and everyone was pushing to see it succeed. And then the Windows 3.0 team shipped. Within three months, they were shipping well over a million units a month. The sales rate was totally unbelievable, and senior management took notice. The investment Microsoft had made in Windows had finally come home, and all of a sudden the world shifted around us. Microsoft saw the light and realized that it had bet on the wrong horse when it invested in OS/2. NT OS/2 was quickly reworked as Windows NT 3.1 and we were off.

NT was supposed to be a 18 month development effort - I started working there in the summer of 1989, we were supposed to ship somewhere around 1991. And we were in "ship mode" for the entire period between 1990 and 1993 when we finally released. It got so bad that after my son was born in 1992, I had planned on taking a 6 week vacation to visit the grandparents and show off the new baby. We were in Florida attending the 1992 World Science Fiction Convention and I got a phone call. The WfW team had totally rewritten the browser protocol, and our version wouldn't interoperate with theirs. I had to take a week off from my vacation to come back and rewrite the entire browser before we locked down the final bits for our first release candidate. So I came back to Seattle, worked for the week, rewrote the code and flew back to New York for the rest of the vacation.

Needless to say, I was pretty burned out when NT finally shipped, I spent some time working on NT 3.1 but left the NT team to go to work over in the advanced consumer technology group on the "Tiger" video file system.

While I was on the Tiger team, my daughter Sharron was born.

It quickly became apparent that my skills and the skills of a research organization didn't exactly mix, so I left the research group and found my next home, the Exchange team.

I settled on the Exchange team because that's where Brian Valentine had landed after the LAN Manager project was folded into NT. He was working on the first version of Exchange, a new email and collaboration server that was intended as a competitor for Lotus Notes. It turned out that there was an opening in the information store team, and they were willing to take a flyer on an almost burned-out developer.

In the Exchange group, I was hired in originally to write the "Push Notification" feature, but quickly got redirected to design and write the backup and restore infrastructure. I also did a bunch of other semi-random development work pushing towards shipping Exchange 4.0 in 1994.

For Exchange 4.1 (later called Exchange 4.5 then Exchange 5.0), we realized that we had to provide internet support for Exchange. It was absolutely critical that we provide a mechanism for our customers to have a choice in clients - Exchange 4.0 was a remarkable system, but it was extraordinarily limited in it's client choices. We had clients for DOS, Windows 95, and Windows NT but we didn't support any other platforms, and it was clear that we needed to provide this functionality and in a hurry. We had started work on a Mac client for Exchange earlier, and we continued that development work, but we also decided to work on providing an internet client to ensure that our non Windows/Mac based customers would have a choice without our having to provide an explicit client for those platforms.

I got the job of writing the POP3 server for Exchange. Since I knew that we'd be doing an NNTP server in Exchange 5.0 and an IMAP server for the next release after that (Exchange 5.5), I also designed the networking infrastructure that was used for all of those protocols - In Exchange 5.5, there's a single common network stack that supports the POP3, IMAP4, NNTP and LDAP servers - all of them use the same shared networking APIs.

As I mentioned, for Exchange 5.5, I was mostly responsible for the IMAP4 server in Exchange, in addition to doing a bunch of store work.

And then came Platinum.

For Platinum, Microsoft decided to convert Exchange from being primarily an email system to a full blown collaboration system. That meant formalizing the mechanisms that were used by the various internet protocols to interoperate with the store, and it meant that Exchange's old X.400 DN based security system had to be scrapped. I was given the job of handling both of these tasks. Splitting out the internet protocols was relatively easy - we had already done most of the work for this in Exchange 5.5, the POP3 and IMAP server already used a dispatch table to interact with the store, so it was a relatively simple change to continue that work.

The security changes on the other hand were absolutely huge. To maintain compatibility, the existing security semantics had to be preserved, which meant I needed to come up with a mechanism for representing Exchange ACL's with NT ACL's. We also had a host of new features we added, like per-property ACL's, item level visibility rules, and "roles". More on all of those in later posts.

After Exchange 2000 shipped, I moved on to work on SCP, an embedded networking system for home appliances. The idea was that an SCP enabled light switch could control any SCP enabled lamp without the interaction of any external entities - once the relationships between the SCP devices were set, the devices would communicate to each other to perform the operations.

SCP end of lifed in the fall of 2002, and I moved on to my current job, in the Windows Media and Devices Group, working on the core windows audio engine for Longhorn.