Archives

An Opinionated Onboarding Setup for New Hires at Microsoft

Welcome to Microsoft! I’ve written this guide to reduce decision fatigue about what to do during onboarding. This information complements what you already receive during New Employee Orientation (NEO). As I get recurring questions from new hires, I’ll update this guide accordingly.

Some assumptions:

  • You work at Microsoft in Redmond or the Puget Sound area.
  • You will only invest in tax-sheltered accounts.
  • You have an emergency fund for 3-6 months of expenses in place (if not, prioritize building your emergency fund before investing).
  • You will pay for your day-to-day expenses almost entirely through bonuses and stock, redirecting much of your base salary to retirement.
  • You prefer a set-and-forget approach to managing your life instead of day-to-day management.

Initial Day-to-Day Life Setup

Rename your alias. Usually, you’ll need to change your automatically-generated alias (for example, tibari to tbarik, internal link). You’ll need to follow the Microsoft account naming conventions (“intuitive aliases”) , which basically means some combination of letters from your first and last name. Do this as early as possible.

Your canonical e-mail address is usually [email protected]. Although you can be e-mailed at your alias, the canonical e-mail address is what you should give to others outside Microsoft.

Machine setup. On the first day, you’ll need to reformat your workstation and laptop using PXE boot, through the corporate network. Don’t try to join the Microsoft domain using an OEM Windows installation. The exception is if your manager tells you that they already did this for you.

Activate subscriptions. As a Microsoft employee, you have complementary access to some amazing learning resources, including PluralSight and O’Reilly Online Learning. You should also go ahead and activate your subscriptions to the New York Times, Wall Street Journal, and a few others (Microsoft Library, internal link).

Professional membership dues. For researchers (technically I think anyone can do this though), you should expense your ACM and IEEE membership fees. Microsoft’s digital library also includes access to the ACM and IEEE libaries, so don’t pay for those again.

Corporate American Express card. This card takes a while to receive, so go ahead and activate it early (internal link). You only need this card if you travel somewhat frequently.

Visual Studio Online. Login to Visual Studio Online with your Microsoft account and activate your $150 personal monthly credit. Do the same for Office.

Blind. You can finally join Blind (yay?), which has an anonymous community for Microsoft. Yes, Blind is toxic, but it’s sometimes the only way to get an unfiltered lens of the company. Use sparingly.

Outlook rules. You will receive far more e-mail that you can actually manage. I only have three types of simple Outlook rules. First, for each Discussion list, I create a separate rule and folder. Second, I create a priority rule such that any e-mail from my manager or above goes directly to my INBOX (which triggers notifications). Third, everything else goes to a folder called Quiet, which I only check periodically (notifications suppressed).

Personal use. This is a surprisingly common question, so I just looked it up directly: “You may use Microsoft devices, networks and systems for personal use if it does not interfere with your job responsibilities or negatively impact corporate resources.” A separate policy says no pornography or pirated software. There are certain workstations, called Secure Access Workstations (SAW), which have a much usage stricter policy.

Matching donations. Each year, Microsoft will match up to $15000 of your donations, dollar-for-dollar. You can setup recurring donations (deducted directly from payroll) towards your most important causes through the giving portal.

Financial

Here’s how I setup my finances, if you want to do the same. Consult a financial planner for your specific situation.

This section reads like a Fidelity advertisement, but that’s mostly because Microsoft offers their 401k, ESPP, and stock awards through Fidelity.

Fidelity 401K. You will fund your 401K through both pre-tax and after-tax dollars. The pre-tax contribution limit is $19000 with a 50% match by Microsoft ($9500, also in pre-tax dollars). You should also do after-tax contributions to $27000, and for this you will do a daily Roth in-plan conversion to minimize tax burden.

The maximum total payroll deduction allowed for all sources is 65% of gross income per pay period. Microsoft will stop contributing automatically once you hit the IRS limits. Here’s a reasonable allocation:

To reach these targets, you will rely on selling Microsoft stock and using your cash bonuses for day-to-day income. For at least the first part of the year, your actual paycheck will be relatively tiny, since a significant chunk of your paycheck is redirected towards retirement.

If you start later in the year, for example September, you may need to be even more aggressive: ramp up the pre-tax contributions all way to 65% until you reach the maximum Microsoft match, then swing back to 65% for after-tax. Depending on when you start, it may not be possible to reach the after-tax limit in the first year.

The target date funds offered in this plan are really good (0.06% expense ratio). Pick one of the BlackRock LifePath index funds (based on your expected retirement age, mine is BTC LP IDX 2050 N) and put 100% in that fund. If you want to do something more sophisticated, join Microsoft’s invclub.

Employee stock purchase plan (ESPP). The ESPP plan is through Fidelity NetBenefits. Set your ESPP contributions to 15%. Your discounted (10%) stock purchases are limited to $25000 per year (well, essentially). You will automatically be refunded if you overfund your ESPP plan.

Sell your Microsoft stock the day you receive it and use it for income. The reason is that you are already overleveraged in Microsoft just by virtue of working for them.

Backdoor Roth IRA. Your income will likely be too high to contribute to a Roth IRA directly. But you can do a rollover, which basically works like this: open a Traditional IRA and a Roth IRA, then put $6000 in your Traditional IRA. As soon as the funds settle, do a rollover from your Traditional IRA to your Roth IRA.

If you have a non-employed spouse and like them, they too should have a Traditional IRA and a Roth IRA. Repeat the process ($6000) for a total of $12000 a year. But note that the money becomes theirs (the “I” in IRA is “Individual”).

There are some hurdles if you already have pre-tax accounts, in which case you’ll have to shuffle some accounts around first.

I do Boggleheads-style investing for the Roth IRA, with the funds FZROX (0% expense ratio), FZILX (0% expense ratio), and FXNAX (0.025% expense ratio).

Fidelity supports a backdoor Roth IRA out of the box: just do a Transfer from the Traditional IRA account to the Roth IRA account.

Other Fidelity odds and ends. Open a Fidelity Cash Management Account (basically, it acts like a checking account) and use it as your primary account. Direct deposit your pay to this account. You’ll have access to your pay a day early if you use Fidelity. Fidelity also has a nice Rewards Visa Signature card, for which you would now be eligible. Setup extra login security with the Symantec VIP access app.

Annual stock awards and special stock awards. You have a choice of two brokers, Morgan Stanley or Fidelity. Pick Fidelity. Like ESPP, sell your stock the day you receive it and use it as income.

These are announced in September. If you join Microsoft after March 31st, you won’t be eligible for rewards or bonuses until next year’s cycle. You will be eligible for a prorated merit increase (basically, cost of living adjustment).

529 plan. If you still have income left over, consider a 529 plan.

Open Enrollment

Just a few more items left around open enrollment. For almost all of these, I think the defaults are okay.

ARAG. Microsoft offers a group legal service, ARAG, which has gotten me out of a few traffic violations already. You also get credit monitoring through ARAG.

Health insurance. Both health insurance plans are reasonable. The HSA works a bit better if you’re single and don’t expect to have any health issues, while the Kaiser Permanente plan works a bit better if you have a family and have a Kaiser Permanante hospital nearby.

FSA. If you pick the Kaiser Permanente plan, you can utilize an FSA. If you don’t know how much to contribute, set this to $500, and adjust the following year as needed.

Gym benefit. Once you decide, you won’t be able to change it until next open enrollment. I picked the Y, because it has multiple locations and includes childcare.

How should compilers explain problems to developers?

This week I presented the final part of my dissertation, How should compilers explain problems to developers?, at the Foundations of Software Engineering conference in Lake Buena Vista, Florida. This work is relevant to communities, such as Elm and Rust, that are invested in improving the usability of the error messages their tools produce.

The abstract of the paper follows:

Compilers primarily give feedback about problems to developers through the use of error messages. Unfortunately, developers routinely find these messages to be confusing and unhelpful. In this paper, we postulate that because error messages present poor explanations, theories of explanation—such as Toulmin’s model of argument—can be applied to improve their quality. To understand how compilers should present explanations to developers, we conducted a comparative evaluation with 68 professional software developers and an empirical study of compiler error messages found in Stack Overflow questions across seven different programming languages.

Our findings suggest that, given a pair of error messages, developers significantly prefer the error message that employs proper argument structure over a deficient argument structure when neither offers a resolution—but will accept a deficient argument structure if it provides a resolution to the problem. Human-authored explanations on Stack Overflow converge to one of the three argument structures: those that provide a resolution to the error, simple arguments, and extended arguments that provide additional evidence for the problem. Finally, we contribute three practical design principles to inform the design and evaluation of compiler error messages.

One λ at a time

Lambda
Our full paper, One λ at a time: What do we know about presenting human-friendly output from program analysis tools?, has been accepted to the 8th Workshop on Evaluation and Usability of Programming Languages and Tools (PLATEAU) at SPLASH 2017, Vancouver, British Columbia. The paper is useful for human-computer interaction researchers who want to understand the design space of error messages from program analysis tools.

The abstract of the paper follows:

Program analysis tools perform sophisticated analysis on source code to help programmers resolve compiler errors, apply optimizations, and identify security vulnerabilities. Despite the utility of these tools, research suggests that programmers do not frequently adopt them in practice—a primary reason being that the output of these tools is difficult to understand. Towards providing a synthesis of what researchers know about the presentation of program analysis output to programmers, we conducted a scoping review of the PLDI conference proceedings from 1988-2017. The scoping review serves as interim guidance for advancing collaborations between research disciplines. We discuss how cross-disciplinary communities, such as PLATEAU, are critical to improving the usability of program analysis tools.

Expressions on the Nature and Significance of Programming and Play

All is play.

My single-author full paper, Expressions on the Nature and Significance of Programming and Play, has been accepted to the IEEE Symposium on Visual Languages and Human-Centric Computing. I presented the paper in Raleigh, North Carolina.

The abstract of the paper follows:

Play is all around us, an essential and innate phenomenon that serves as an important mediator in creativity, interest, learning, and drive. Though play is thought to be universal, the way in which it materializes is situationally-dependent and not well-understood, particularly in software engineering. To understand how programmers express the concept of play, we conducted a qualitative study on the online social news website, Hacker News—a venue for software practitioners. From Hacker News, we qualitatively analyzed nearly 1,000 user-submitted comments containing the terms “programming” and “play.” The contribution of this work is a contemporary synthesis of how software practitioners interpret programming and play in experiential terms. Our findings suggest how programming and play can be understood through rich metaphors, among them, play as: art, playgrounds, spontaneity, and tinkering. Hacker News authors reflect about childhood experiences as a catalyst for learning programming, and contrast play against work.

Microsoft in Redmond

I’m delighted to announce that as of today, I’ve started the next phase of my research career at Microsoft. I’ll be working with the PROSE team in a dual role: as a Researcher at the intersection of programming languages and human-computer interaction, and as a Research Software Engineer to improve developer experiences across Microsoft’s software development tools.

Do Developers Read Compiler Error Messages?


Our full paper, Do Developers Read Compiler Error Messages?, has been accepted to the International Conference on Software Engineering. I will be presenting the paper at the conference in Buenos Aires, Argentina.

The abstract of the paper follows:

In integrated development environments, developers receive compiler error messages through a variety of textual and visual mechanisms, such as popups and wavy red underlines. Although error messages are the primary means of communicating defects to developers, researchers have a limited understanding on how developers actually use these messages to resolve defects. To understand how developers use error messages, we conducted an eye tracking study with 56 participants from undergraduate and graduate software engineering courses at our university. The participants attempted to resolve common, yet problematic defects in a Java code base within the Eclipse development environment. We found that: 1) participants read error messages and the difficulty of reading these messages is comparable to the difficulty of reading source code, 2) difficulty reading error messages significantly predicts participants’ task performance, and 3) participants allocate a substantial portion of their total task to reading error messages (13%-25%). The results of our study offer empirical justification for the need to improve compiler error messages for developers.

FSE Student Research Competition: How should static analysis tools explain anomalies to developers?

I presented my thesis proposal work, “How should static analysis tools explain anomalies to developers?”, at the Foundations of Software Engineering Student Research Competition in Seattle, Washington. I was awarded second place in the competition. The abstract of the short paper follows:

Despite the advanced static analysis tools available within modern integrated development environments (IDEs) for detecting anomalies, the error messages these tools produce to describe these anomalies remain perplexing for developers to comprehend. This research postulates that tools can computationally expose their internal reasoning processes to generate assistive error explanations that more closely align with how developers explain errors to themselves. My work demonstrates that tools stand to significantly benefit if they incorporate explanation principles in their design.

The associated poster for the paper is also available.

Software Engineering Research for the Post-apocalypse

Designing for Dystopia

I presented our short paper, Designing for Dystopia: Software Engineering Research for the Post-apocalypse, at the Visions and Reflections Track in Foundations of Software Engineering conference at Seattle, Washington.

The abstract of the paper follows:

Software engineering researchers have a tendency to be optimistic about the future. Though useful, optimism bias bolsters unrealistic expectations towards desirable outcomes. We argue that explicitly framing software engineering research through pessimistic futures, or dystopias, will mitigate optimism bias and engender more diverse and thought-provoking research directions. We demonstrate through three pop culture dystopias, Battlestar Galactica, Fallout 3, and Children of Men, how reflecting on dystopian scenarios provides research opportunities as well as implications, such as making research accessible to non-experts, that are relevant to our present.

Check it out before the world ends.

From Quick Fixes to Slow Fixes

Our full paper, From Quick Fixes to Slow Fixes: Reimagining Static Analysis Resolutions to Enable Design Space Exploration, has been accepted to the International Conference on Software Maintenance and Evolution (ICSME). In addition, I also served as Web Chair of the Organizing Committee. ICSME is hosted this year in Raleigh, North Carolina.

The abstract of the paper follows:

Quick Fixes as implemented by IDEs today prioritize the speed of applying the fix as a primary criteria for success. In this paper, we argue that when tools over-optimize this criteria, such tools neglect other dimensions that are important to successfully applying a fix, such as being able to explore the design space of multiple fixes. This is especially true in cases where a fix only partially implements the intention of the developer.

In this paper, we implement an extension to the FindBugs defect finding tool, called FixBugs, an interactive resolution approach within the Eclipse development environment that prioritizes other design criteria to the successful application of suggested fixes. Our empirical evaluation method of 12 developers suggests that FixBugs enables developers to explore alternative designs and balances the benefits of manual fixing with automated fixing, without having to compromise in either effectiveness or efficiency. Our analytic evaluation method with six usability experts identified trade-offs between FixBugs and Quick Fix, and suggests ways in which FixBugs and Quick Fix can offer complementary capabilities to better support developers.

Supplemental materials for the FixBugs study have also been made available.

Blending Programming Environments and Games

Titus presents. Photo by Austin Henley.

I presented our full paper, A Perspective on Blending Programming Environments and Games: Beyond Points, Badges, and Leaderboards, at the IEEE Symposium on Visual Languages and Human-Centric Computing (VL/HCC 2016) in Cambridge, UK.

The abstract of the paper follows:

Programming environments and game environments share many of the same characteristics, such as requiring their users to understand strategies and solve difficult challenges. Yet, only game designers have been able to capitalize on methods that are consistently able to keep their users engaged. Consequently, software engineers have been increasingly interested in understanding how these game experiences can be transferred to programming experiences, a process termed gamification.

In this perspective paper, we offer a formal argument that gamification as applied today is predominately narrow, placing emphasis on the reward aspects of game mechanics at the expense of other important game elements, such as framing. We argue that more authentic game experiences are possible when programming environments are re-conceptualized and assessed as holistic, serious games. This broad gamification enables us to more effectively apply and leverage the breadth of game elements to the construction and understanding of programming environments.