Becoming a Software program Style Engineer at Microsoft arrives in all styles and forms. I thought I would give y;all another installment of what it is like to be a “dev” at Microsoft. The writer in this next post (BoB, not a typo) sets himself up really well, so enough of me and on to the post. **************************************** Wow. How do I follow up Lars; entry? How about more of the same from a different guy? Deal? Deal. Forgive me if this rambles a bit, but I;m trying to cover a bunch of the questions that were asked. I am a dev lead (SDE Lead) on the Outlook team. The Outlook dev team is a group of about 40 developers (the whole team adds another 40 testers and 20 PM;s). My responsibilities consist of all the things that an SDE does in addition to managing the time and career of those that work on my team. First, I;ll talk a little about the SDE role, and close with a few words about being a lead. This role is fairly dynamic and changes throughout the different phases of the project. We released to manufacturing (“RTM;ed”) that last version of Outlook in the fall of 2003. Since then, we have been in the planning phase for the next version of Outlook. planning: In this planning time period the SDE;s on the team have been involved in various coding and design tasks. The coding tasks are as varied as the day is long. Some have been involved in code cleanup. We use some internal tools that scrub through code looking for common coding mistakes. These aren;t the kind of mistakes that are guaranteed to cause bugs, but they *could* (uninitialized variables are a good example here). Other code cleanup includes moving to the strictest compiler warning levels and cleaning up all the madness that ensues. A small segment of the dev team works on prototyping early ideas that the product planners and PM;s come up with. A dev will usually work directly with a small set of PM;s throughout the release cycle. Each dev will be assigned specific features to work on and a PM is responsible for developing the functional specifications (specs). These specs define how the app should look and behave with the end user in mind. Near the end of the planning phase, those specs begin to solidify and input from individual developers is solicited. This feedback usually arrives in the form of design critique, reality checks, and SWAG;s (Super Wild-A$$ Guesses [of effort required]). Design critique is usually employed to get another set of eyes on the design, further refining it. The kind of “put that button there,” or, “people will never ‘get; that menu layout,” feedback that makes the product easier to use. Sometimes there are things that we simply can;t do due to legacy architecture, platform deficiencies, or external dependencies; this is where the reality check comes in. After the style is fairly nailed down, devs are asked for SWAG;s. These estimates are used to define how much each of the features costs in manpower. As we have finite resources, these costs (along with test and deployment costs) will determine which features we can code in a given release cycle. Once we;ve decided what features we;re going to include in the project, we enter the coding phase. Early in the coding phase, each developer will write a design spec for each one of their features. In general, these features are small pieces of the whole. A single dev will not own a whole area like “calendaring”, for example. Rather, that area is broken down and several devs will work on it. These specs describe how the feature will be implemented at a somewhat high level. We don;t get into specifics like, “what will the variables be named,” rather we focus on object definitions and how overall systems will be architected. The specs are reviewed in small meetings of 3-4 devs. The meetings focus on having a good style and ensuring that common code is reused and effort is not duplicated. Often times, “code reuse” means using some standard libraries that we have written along the way. FWIW, we don;t use any special style methodology other than tons of peer review. Usually, this style process consumes about 20% of the development cycle. Once these specs have been reviewed coding will begin. Coding generally happens in chunks of several months; each chunk is called a “milestone”. Outlook is written primarily in C/C++, although we;re including some C# in the next version, but only in new features. IMO, most large apps at Microsoft are written in C/C++ as C# is a new language in the grand scheme of things. As features near completion, developers must ready them for submission to the source control system (a.k.a. “checkin”). This includes running suites of automated tests, having code reviews, and having a tester look over a build of the code. The latter is referred to as “buddy test” and is a very important part of maintaining a quality product throughout the development cycle. Once the code is finished and all the above requirements are met, the feature will be “checked in” to the main source tree. We use a custom source control package that can handle the massive number of developers, source files, and binaries that we have. Outlook consists of thousands of source files, millions of lines of code, and tens of binaries. Before I go on, let me address the issue of automated tests. These automated tests don;t appear from the test genie. They come from our hard working STE;s (Software Test Engineer) and SDE/T;s (Software program Style Engineer in Test). Someone asked about the difference between an SDE and an SDE/T. My personal opinion is that an SDE/T is an SDE who;s customers are both developers and testers. They follow the same methodologies as an SDE, but they produce programs which test other programs. They contribute more than you can imagine to the quality of our software program. Automated tests can do in 8 hours what human testers need weeks to do. But I digress… As features are becoming developed and checked in, a magical place called the “build lab” is busy churning out semi-weekly builds of the product. Testers install these builds and enter bugs against them. Developers are free to fix these bugs as they come in, but during the heavy coding phase they usually pile up. Near the end of each milestone we;ll push hard to fix all the bugs that we can. Working late is never mandatory, but we do have one day a week when dinner is brought in for us. If you do need to work late, that;s the night to do it (Thai food is quite popular)! Near the end of the final milestone, we are pushing towards a goal that we call “beta”. The beta stage of a product is where it is stable enough for everyday use. This is generally the point where we release test versions to the public and begin to get feedback. This is where the bulk of our bugs come in and where we find out when we got things wrong in the design or implementation. From Beta to RTM, a dev;s role is pretty much the same: fix bugs,
Office Home And Business 2010, tweak the design, and respond to customer feedback. Sometimes we find out that the functional design was wrong. This causes a style change request (DCR) to be filed. It;s put in our bug tracking system like any other bug, but is tracked much more closely by the team as it represents a larger body of unfinished work. Working on a DCR is much like working on a new feature; we go through all the same steps. It;s both stressful and exciting; we have to get a lot done in a short period, but we know it;s making the product better in a specific way. Finally, one day, all the bugs that we can fix are fixed. All the DCR;s are done. All the tests pass. This is the nirvana that we call RTM. We ship the product with a big party, take some time off to recharge the batteries, and start over again. goto planning; Well, that;s the SDE role in a nutshell. I;d love to answer any more specific questions, so please, lemme have it! Oh yeah, I promised some discussion about being a lead. You didn;t think I;d forget, did you? Anyhow, like I said, I still have all the same responsibilities with a few more added on for good measure. For starters, I am a resource for the whole team, using both my specialized knowledge and my experience to save time and educate people. Additionally, I distribute work items and set goals and deadlines for the people on my team, making sure that there;s enough for them to do and keeping them informed about what;s coming up the ‘pike. Using their feedback, I report to my manager how much time we have available, progress, etc. More importantly, though, is that I help my team members along their career path. I try to provide opportunities to allow them to reach their goals. Being a lead is not just about becoming a senior member of the team, but it;s about really wanting to make an investment in the future of Microsoft through the future of your team members. Watch for a future entry about the SDE career path. In closing, let me just say that devs at Microsoft are a diverse bunch. Sure, some of use could use an additional shower. Sure, some of us could get out in the sun more often. Sure, some of us could talk about work less. But you;ll never meet a smarter, more passionate, group of people in your life. We like to have fun, too. :-) Oh, for those that asked, emode tells me that my IQ is 140. Hope to see you here someday, BoB P.S. Random facts about this SDE: Favorite web sites: ArsTechnica, AnandTech, HardOCP, HomestarRunner What;s currently in my MP3 player: Weezer, Saves the Day, James Taylor Favorite food: really good Albacore tuna sushi Favorite pastimes: TV, target shooting, playing my guitar, surfing the ‘net Random thought: forget curing smallpox, the best thing ever created by man is TiVo. ***************************** Gosh you;re good at this BoB! Ever think of having your own blog? That would be some tough competition :-) Anyway, thanks so much for your time. I am sure our readers really appreciate it! zoë