Dubman.com/narratives

Teaching Software Engineering at Yale

When I first “retired” from Microsoft in 1997, I had worked so hard, for so long, I figured I could take two years completely off, and still have averaged over 40 hours a week. I did an epic road trip from Seattle to Baja California, started a blog, abseiled into caves, hiked glaciers and volcanoes in New Zealand with friends, bicycled across the Southern Alps, dove the Great Barrier Reef. I converted my dad’s old Trek to an e-bike and rode that everywhere.

By 1998, the “dot-com boom” was well underway. Just as it seemed everyone in Seattle in the early 90s was in a band (myself included, actually), by the late 90s it seemed everyone was in a startup. Microsoft grew and grew, always under construction. People flowed in, and people with more money, experience and contacts flowed out. Many of them stuck around the area and formed startups. It didn’t take long for me to feel like I was missing out on the action.

At this time, my mother, a classical music composer, caught wind of a teaching opportunity at Yale University. There was a college seminar program for which one could propose class topics and apply to teach. This sounded appealing for more than one reason. I thought it over and came up with an innovative concept for a class.

Although the job would pay less than the rent for an apartment on the New Haven Green, it would serve multiple purposes. I could try teaching at the college level, give something back to the world, learn all I could from an impressive cohort about a decade behind me, and further develop technical and soft skills I could later apply to some other role down the line. I worked up a proposal, flew out, interviewed with lots of people, and eventually accepted an offer to place my for-credit seminar, Real World Software Engineering, on the Spring 1999 academic schedule.

An emphasis on collaboration

The concept I dreamed up was a combination of class sessions plus hands on labs. The class was designed as a more pragmatic and interactive complement to Yale’s solid but more theory-focused CS program, with a multidisciplinary aspect. Since then, this has become a more popular method of instruction, but at the time, it was quite atypical. The ultra-collaborative nature of the class was an outgrowth of a formative experience at UC Berkeley over a decade earlier.

After that, I then spent years interviewing new CS grads, and knew the biggest hole in their education was around collaboration. In my course, the entire class would comprise a single product team. I would lead the team to produce a functioning web auction site modeled after eBay, which was new and all the rage (yBay, for Yale.) The course was designed for the students, but it was also a creative way for me to get additional leadership experience with a larger team than I’d previously managed at Microsoft.

1 project, 3 milestones, rotating functional teams

The class was an immediate hit, and quickly filled to capacity with some 18 students at varying levels of coding proficiency to start with. The students had to submit written applications describing their relevant background and academic interests. I would have signed up for it myself in a heartbeat had I been an undergrad there at the time. (Had I once applied and been rejected there? I think I did!) I broke it into 3 functional teams of equal size: development, testing and program management.

My favorite part was that at the end of each milestone, everyone in the class rotated roles, so everyone was a developer, a tester, or a program manager on different phases of the project. I figured this would engender empathy, and enrich the students’ understanding of different functional roles, helping them determine their own individual strengths and interests.

This was an opportunity to share my own accumulated wisdom and experience to an eager audience. After teaching junior high and high school computer programming and math years earlier, I missed teaching, and academia in general.

To prepare for the class, I talked Microsoft into donating all the tools, and I hand-coded a bug tracking system similar to FogBugz or JIRA, which was actually modeled after RAID, an internal Microsoft tool. The tool was open-source for the students, so they would have a functioning example with the same tech stack they were using to build the auction site.

The result was an experience I wished had been available when I’d been in college. We did design specs and test specs and spec reviews and code reviews. We did bug triage and stand-ups and retrospectives and I shared war stories from the front lines in my career up to that point.

A success!

I was impressed with how seriously the students devoted themselves to the project, the speed with which they picked up the relevant technology, and the quality of their work. We got a multi-user web auction site up and running, and while there were rough edges, it came together in time and basically worked. My bug database worked as well.

The class was such a success that I was invited to repeat it, but it felt like time to jump into the startup world myself instead of just preparing others to do the same. I left academia a second time to return to my home to Seattle and throw my own hat into the ring.

Roads not taken

It seemed somehow fitting that the student in the Yale class with the weakest participation and lowest grade (he was distracted) founded a tech recruiting startup immediately after, raised serious VC money, and hired tons of people. He later ended up offering me a leadership job in Silicon Valley that I didn’t take, although I did tour their beehive of an office, a sight to behold. I had different priorities, but looking back, tech recruiting in the Valley, in 1999? That would have led to something.

And somehow, it did not occur to me that with all the experience and contacts I had by this point, in the froth and frenzy of 1999 it would have been a cakewalk to raise real money for a real tech startup of my own, for any of the many, many ideas I had kicking around whose potential was eventually proven by others. I could also have attempted to self-fund such a venture, though the dot-com crash was pending, so that might have been an even rougher ride than the way things went down after Y2K.

In life, there are many roads not taken; who knows where they might have led.