Sunday, August 6, 2023

My career at Microsoft

I was watching this video which included an interview with Dave Plumber who is an ex-Microsoft-dev like myself who worked on much of the same stuff as I did and his stories bring back fond and not-so-fond memories of my 20 years as a developer at Microsoft.

How I got into Microsoft:

My father lost all his money about the time I graduated High School and at that time I got a soldering job with a company called Processor Technology which invented an S100 bus based 8080 system known as the SOL.



The company was starting in a garage about 2 blocks from my home in Livermore California.  That was an amazing stroke of luck to be there - at about the same time as Apple Computer was also in a garage.

The two companies were in fierce competition and somebody got the idea to buy up all of a very common but very necessary chip that forced Processor Technology (PT) quickly out of business.

Before they died, however, I joined the US Navy and as I was going to schools to prepare myself to become a Nuc on a submarine, I asked my old boss if I could buy a kit for a SOL.  After saving up for a few months it was delivered to my A school in Chicago where I put it together (soldering was necessary as well as assembly) and, after finding it not working, I sent it back to PT to fix it. I was learning to program it in Basic and 8080 Assembly Language from then till entering Microsoft.

Later, when I got to the Submarine, I would, on long runs, bring it and play with it while underwater.  This got me very good at 8080 assembly language which I would code up on a pad of paper while standing a boring watch in the nuc plant. (This was not allowed, but boredom has its motivations).  Thus, in time, I had most of 8080 assembly language memorized and knew the processor intimately.

When I got out of the Navy, I went college, now that I had the GI Bill to make it possible, and proceeded to ace all but 2 classes and graduated with honors.

That was when Steve Wood, one of the coders of the DOS Kernel was recruiting devs for Microsoft.  He and I hit it off well and he arranged for me to go to Redmond for an interview.

I was hired after a long day of trying to impress some of the smartest people I have ever met and became employee #1000 at Microsoft in September of  1986.

My early days at Microsoft:

I did too well in my interviews.  I got married soon after the interview but before starting at Microsoft and wanted to do a honeymoon in Europe over the summer of 1986 and asked Microsoft if I could wait to start till September and they said, and I quote "Sure, we're not proud".

The day I started was the stock market crash of 1986 and at first I thought this was a horrible thing - the stock was crashing, but then I found out that my stock options were entered on that same day.  I had better options than people that had been there for over 5 years!

I was immediately put into the "Presentation Manager" group for OS/2 which is the code that does all the core window management and UI for the OS.  This was one of the top dev teams at the company.  I shared an office with this other new hire, Darren Massena, who was way smarter than me but a nice guy and who later became the architect and main developer of a kids shell for Windows which was touted as being very cool but ended up being rejected by our customers.

This was the era of being a "cool" super smart dev at one of the biggest software companies in the world and egos were super big in those days.

Since I didn't know C at the time of my hire, my first job was to go with our team to Boca Raton in Florida and work on the OS/2 kernel with the guys.  I was given a very poorly written scheduler function to fix and turned 100 locs into about 3 - (IBM in those days paid by the line of code).

The rest of my time there I really had little I was able to do and played my guitar to help soothe the atmosphere for the others.  This historic shot was taken of the team there.  We did some amazing things, blew the IBM execs away and got that baby shipped several months later.


For that we got a 2 week all expenses paid trip to Maui by and with Bill Gates and Steve Balmer with spouses.  There never was a better ship party in the history of Microsoft.

After my early temporary offices I got a nice window office just 2 doors down from Steve Balmer's.
Dave Plumer had an office down and across the hall from me but we never really met each other or worked together.  We were two very lucky dudes that enjoyed a golden time at Microsoft when it was full of smart and motivated people, no HR, no lawyers, and tons of money coming in over time from the incredible stock options.

Another job I got was to do a "simple" mapping of window handles in and out of the presentation manager API.  This was at very early time in my career.  The assembly language was no problem for me, and it was a great way to get to know the system better, but the logistics of adding the mappings to every API that either took or returned an HWND was daunting as I had to mess with almost every file in the user.dll module while learning my editor, getting used to building tons of code that took hours to build, learning C, and dealing with a constantly churning source code with the SLM (AKA Slime) source control system.  

It left me frozen and overwhelmed.  

Even some tester's would come to help me and my boss had the whole team hold off in check-ins for a week to help me get the thing done.  But I just failed.  I simply could not get my head around the logistics of the problem and the project got handed over to another more experienced dev.  It was very much a project where everything had to be perfect or nothing would work.  

I was shattered.  

Steve Wood came to my office to talk with me and try to help me but I was so embarrassed I couldn't even talk to him.  If someone looked over my shoulder I couldn't think.  I sat there silent till he left.

Years later at a reunion of the NT team I tried to get a hold of him and apologize for that time.  We could have been good friends during my whole time in Systems had I not been so proud and embarrassed.

I had a terrible review for that period but my boss Neal Konzen, let me stay on board.  He knew I was just trying too hard.
From then on I was considered by many to be an idiot.  I even caught the guys one night talking about me (they hadn't realized I was in the room eating pizza with them) and when they realized that I was there, they were a bit embarrassed as was I.

So the massive expectations on my performance were lifted and I was given much smaller and simpler projects from then on to do.

One of those simpler projects was to write a sample DDE (Dynamic Data Exchange) app for OS/2.  
DDE was a hack invented over a weekend by the Excel team to show off dynamic stock quotes to Roiters and was a bit clunky to use.  Yet as clunky as it was, it was needed to tell the shell in Windows III what icon an app used to identify itself at setup time.  So the protocol became imbedded into that OS well before I was even there and naturally was ported to OS/2 and NT.

I decided to make my own DLL with an API to simplify it for others.  When the test team got ahold of it, they told our dev manager, Karl Stock, that it was just too powerful an API to test in the time left to ship so they said they would just ship the source and not compile it.

That was fine by me.  I was just happy to have been able to do that and work at Microsoft with such amazing people.

A few months after we shipped, Adobe came to Microsoft and demanded that they port my DLL to Windows III and so I spent some time doing that.
Then Windows NT was starting up, I was tasked with porting it to there, but that was a much harder job because Windows NT had no global memory which DDE used for IPC (Inter-Process Communication).  I had to use kernel level "thunks" to simulate global memory.  My API became the only way to do IPC on NT because the old message protocol could not work on NT.

It eventually moved into the WIN23 API set in user32.dll and was there to stay.

After solving that problem, the OLE team approached me and wanted to use my DLL as the glue for OLE.

What I wrote became very much imbedded into the OS for many reasons.

We then hired a guy from the UK that had implemented a network version of DDE and I inherited that code to maintain as well.
So for about 7 years I was the DDE master of the universe and was quite happy with working on a limited domain of code that was all mine.

I often wonder what would have happened had I written a book on DDE as I had an idea for a convention of how to use DDE that may have caused it to have a much bigger impact on computing.  At the time, I just loved coding too much to take the time to write a book.

I did lots of other things as well including the OS/2 Icon Editor, the NT and OS/2 resource compiler, the Dialog Editor, The Win 16/32 porting layer, NT header files, and lots of bug fixes including handling NT system deadlock issues.

My bosses were so supportive despite the fact that I was a slow and pretty weak dev.

Later, on a large port of the icon code from Windows III to NT for XP, after two months of struggling with the port and enhancing it to do things Windows III couldn't do, my hard disk crashed and I had no backup!  That ended my time in Systems - the schedule slipped because of me and I had to go.

The rest of my time at Microsoft was working in the Applications division where I did projects like Sidewalk, eShop, MSN Yellowpages, and MSN Messenger.

The Messenger team had exceptional managers and I loved working with that team.

How I got fired, possibly due to an NSA back door in Windows NT

After 20 years at Microsoft as a dev, my son was about to graduate High School and I knew I might never be able to do a nice family vacation with him again. I decided to ask my manager if it would be ok if I took 2 months off to take my family to Europe.  This was close to my 20 year anniversary at the company.
My boss and my boss's boss were cool with that but once it got up to the VP level for approval I got the word that HR would not allow it.  I was told I simply didn't rate high enough in the dev hierarchy to do that.  My managers at the Messenger team were trying to get me to that level which involved giving me the responsibility of integrating 3 dev teams of work each day, testing it for bugs and getting ahold of the proper dev to fix it.  It wasn't very fun as there was no creativity in the job and high stress.

I never wanted to go up a ladder.  I just wanted to do what I did best and do it well.

I told them "either I am coming back or I am not." and HR would not budge.  I took the vacation and left the company.

Now there is an interesting back story to this and that is the NSA back door issue.  

A few months before this vacation idea happened, I heard an announcement that the NSA had a big secret project for the NT team.  I was very suspicious of a back-door going in so I emailed all the V.P.s in my division asking if this was so.

No response was ever received.

Another weird thing about my leaving Microsoft was that HR had scheduled an exit interview with me but when I went to that meeting, they took my key-card and the person I was to speak with was nowhere to be found.  I was stood up.
No exit interview for me - and I was quite upset that they would basically fire me because I took a 2 month unpaid vacation after 20 years of loyal service to that company.
It left a bitter taste in my mouth but I don't blame anybody at the company but HR.

It was a very different attitude from the "we're not proud" one I came in with.

Why I succeeded

Most of my best accomplishments at Microsoft were due to my attitude of helping others.  It seemed every time I did a good deed for either the customer or others, it would come back to me as a benefit.
People liked working with me because I was not an ego-maniac or overly proud and I didn't care what work they had for me - I'd happily do it.
  
When I was at UC Berkeley, I had to work with the SPICE circuit simulator program which had a very cryptic way of describing a circuit for input to the program.  So I wrote up a quick-reference card with TROFF that fit on a 3x5" card for myself and decided to give it to the head professor of the SPICE program for others to benefit from.  For that the professor gave me 15 accounts on the most powerful computers on campus at that time.

What I didn't realize at the time was that he also listed me as a contributor to the SPICE program.
So back in 1986, when I was interviewing with Microsoft, on interviewer asked me "didn't you work on SPICE?" and I just said "yes" which was true, but they thought I wrote the code.  No all I did was write a quick-reference card for the user.
This might be why they waited 3 months for me to start and threw me into one of the top dev teams in the company right off the bat.

Another example was that I did lots of cleanup to the NT header files and put my name on just about every one I worked on in the file log.
When I was interviewing with the top network dev for the Messenger team, many years later, he basically offered me a job on the spot with no interview questions.  It was because my name was all over those header files that he simply assumed that I was one of the gods of NT.  
I ended up being a fairly weak UI dev for that team but everyone supported and respected me simply because I had so much experience.

Overall I am so grateful for having had the opportunity to enjoy "the good old days" as described by Dave Cutler one day.  They were truly some of the most rewarding and memorable years of my life.

Sandy