Wednesday, November 30, 2011

Characteristics of Successful Job Applicants: Coachable

This is the last in a series of posts on the characteristics frequently present in successful candidates for jobs at Microsoft. Previously, we discussed the importance of being a good communicator, persistent, passionate, a continual learner, and reflective.


I the last few posts, we've talked a lot about learning from others, which leads to the last area covered in this series. Being coachable means being willing to accept the advice and experiences others share with you. It is critically important to understand that this doesn't mean you have to agree with what others are telling you. In fact, the conversations you'll learn most from are probably those in which you disagree with your counterpart. This is because having your views challenged forces you to provide supporting evidence and to consider alternative approaches. Being coachable is having open ears and a willingness to factor the advice and experiences of others into your evaluations.

Again, don't be scared to admit what you don't know and to seek help figuring things out. As discussed, extensive experiences are good, but if you have some guidance to reduce the amount of friction you suffer along the way, why not take advantage of it?

When I was in school, a big failure on my part was my reluctance to ask for help. When I had difficult programming assignments I would struggle for hours to find subtle bugs, refusing to ask for help from TAs or peers. I loved the tasks (passion), fought until I succeeded (persistence), and learned from my mistakes (reflection and continual learning), but in so doing, I probably lost hundreds of hours in aggregate, which I could have applied to more beneficial tasks like doing additional testing, reading for outside interests, or working on personal projects.

Another critical aspect to understanding what it means to be coachable is to understand that when people give you feedback, you really need to digest it. Don't seek feedback for the sake of marking off a checklist. If that's your goal, you can accomplish it without wasting someone else's time. When someone offers you feedback, use it. And if you want more feedback, be able to demonstrate that you used it. A common question among students looking for internships or jobs at Microsoft is what classes they should take. If you get a suggestion, either follow through or be able to explain your process of consideration and why you decided it wasn't in your best interest. If you come back to interview with that same person and you didn't take the time to consider what they suggested, it leaves a bad impression. Why would they want to hire someone who either doesn't take their opinions seriously or doesn't follow through?

Concluding Remarks

To wrap up this series of posts, observe how the different characteristics are inextricably linked. Passion drives persistence. Reflection helps understand passion and leads to learning. Good communication skills and the ability to learn are required to be coachable, which in turn increases the effectiveness of persistence. All of these characteristics are strongly correlated with success, which is why we look for them in candidates.

There are a few important things to keep in mind when reflecting (yes, that was intended - sorry, I couldn't help it) on all of this information. The first is that the descriptions of these characteristics may appear to have been very black and white, but the reality is that these characteristics do not manifest themselves as binary attributes with on-off switches. They are continually developed over a lifetime. The second is that they must be balanced. Spending the entirety of one's time focused on a single aspect and ignoring others is detrimental to one's development. It is much more effective to spread effort across the different characteristics and leverage them to enhance one another. Think of them as your vitamins for success. There are undoubtedly times when it is appropriate to increase the dosage of one, but you need to get enough of each of them to remain healthy. The last thing to keep in mind is that these are not the only important characteristics. They just happen to be fairly universal. Whenever you apply for a job, or identify any goal for that matter, take time to evaluate how you will achieve success and follow up with the appropriate actions to prepare yourself.

Monday, November 28, 2011

Characteristics of Successful Job Applicants: Reflective

This post is part of a series of posts on the characteristics frequently present in successful candidates for jobs at Microsoft. Previously, we discussed the importance of being a good communicator, persistent, passionate, and a continual learner.


If you've been reading along with the series of posts, hopefully you've picked up on the recurring theme of being reflective. Someone who is continually evaluating themselves and their surrounding environment is someone who can identify opportunities for personal growth and to improve efficiencies. This is tightly coupled with being a continual learner. How does one know where to apply the bulk of their learning efforts, given the limited time capacity we all have? Through reflection and deep personal exploration.

Every experience is an opportunity to analyze the outcomes of actions taken against the intended goals. If you endure a significant failure, don't let it go to waste. Take the time to do a post-mortem and identify the shortcomings that lead to failure. When you have a major success, get a sense for how you were able to achieve that success. In some cases you will not be able to form a concrete answer due to the number of variables, but over time you will be able to identify commonalities across your various experiences. Aggregate experiences will lead to generalized problem solving skills and a large toolkit on which to rely. This is called "wisdom".

No matter how intelligent you are, it's still critical to your development to gain certain experiences. Admit what you know and what you don't know. I would wager that most interviewers at Microsoft can tell when someone is spinning a bunch of bullshit and when they genuinely know what they're talking about. Interviewers don't like having their intelligence insulted, so acknowledge your shortcomings and be prepared to demonstrate your strengths. If you're in the habit of reflecting on your skill set, you'll know where you fall short and where you excel. You've also hopefully been making a concerted effort to improve the areas in which you are week or have made the conscientious decision to avert attention to other areas for good reason, like the desire to be a specialist.

But what about learning from others? Don't forget that when someone takes an hour to explain a year's worth of experience, they are leaving out 8759 hours of detail. Most of that detail is probably mundane, but much of it is why they will be progressively more successful as they continue to pursue their goals. Consider the experiences of others as guidance. They help serve as a compass when we're searching for the right path, but to reach the destination, you still have to do the walking yourself.

Read the next article in the series here.

Sunday, November 27, 2011

Characteristics of Successful Job Applicants: Continual Learner

This post is part of a series of posts on the characteristics frequently present in successful candidates for jobs at Microsoft. Previously, we discussed the importance of being a good communicator, persistent, and passionate.

Continual Learner

Here's something really hard to convince yourself of: it's okay to fail. It is not, however, hard to find numerous resources extolling the benefits of failure (if you watch the linked video, notice that Randy mentions lack of passion as a cause of a personal failures). If you need additional convincing, try doing a web search on "benefits of failure" or "failure is good".

For those who are (now) convinced, it's time to live up to this principle. Admit to your failures. That's the hard part. You can't talk honestly about the experience of failure or what you learned from it until you're able to admit to it and own it. And to be able to successfully interview at Microsoft, you want to be ready to have a conversation about your failures.

Many people preach the message of the importance of admitting failure and learning from it, but from my experience, a large portion of these people, including myself, do not practice what they preach nearly enough. A personal example is that for a long time I was unwilling to reveal that I had been rejected when I applied for a job at Google. I would talk about the experience of the interview and walk around the subject of whether I had received an offer. Why was it difficult to get to the point where I was willing to admit it? This has to do with the psychological response to rejection. Not receiving an offer made me feel like I wasn't good enough for the job. By itself, this was not so bad. However, a more difficult pill to swallow was that many of my friends and colleagues received offers for similar positions at Google. So I was dealing with both self-doubt and a sense of inferiority (relative deprivation) to those closest to me. Perhaps it is true that I am not as smart or qualified as my friends, but the truth is that it doesn't matter. I needed to admit to the failure, determine how it relates to my goals, and figure out what to do next. If the specific job is not required to reach my goals, I should include alternative options in my consideration of how to follow up. If it is required, I should identify the causes of failure and continue trying (persistence!). Until I admitted to the failure, if I had tried applying for a similar position again, I probably would have been met with same result. One who is unable to admit that they have failed is unable to admit that they have made mistakes. One who is unwilling to admit to having made mistakes is unable to identify how to fill the gaps that led to failure.

Over your career you should expect to fail many times. In fact, as you progress, you should carefully consider whether you're failing enough! If you never fail, you probably aren't pushing yourself hard enough. Seeing that someone is capable of learning and growing from both failure and success is important to Microsoft. We want to see people who will continually grow and improve rather than stagnate.

I've spent a lot of time talking about learning from failure, but that's not meant to trivialize the importance of learning from other sources. Clearly, high-tech jobs also require people to keep up with the rapid pace of change in technology and in business processes. This means finding various ways to learn about the newest technologies and practices. One who is versed in these trends will introduce new ideas into their organizations along with opportunities to capitalize on the potential efficiencies and competitive advantages those ideas bring. Such an individual will be rewarded with career growth as they become recognized for these contributions.

To keep things grounded in reality, we must also account for the need to keep everything in balance. If you spend all of your time experimenting with new technologies or processes, you leave little to no time to complete required tasks. Inability to deliver is just as bad or worse than the inability to adapt to change. Further, the benefits of new technologies and processes take time to materialize, meaning that if change is too frequent, the benefits never have a chance to surface, often resulting in more harm than good.

Outside of personal experiences related to success and failure, there are a multitude of sources from which you can learn. Some examples include co-workers, friends, books, the Internet, school, seminars, mentors, etc.

On a side note, I want to encourage everyone out there to go out and mentor someone (cheers to those already doing it!). Your experiences can really help someone else grow. If you're already employed, help college students who want to work in a similar field. If you're in college, help a high school student through the application and selection process. You'll find that the conversations you have with proteges will lead to your own personal growth, along with the development of leadership skills. Plus, it can be financially rewarding due to the benefits to your career!

Read the next article in the series here.

Tuesday, November 22, 2011

Characteristics of Successful Job Applicants: Persistent

This post is part of a series of posts on the characteristics frequently present in successful candidates for jobs at Microsoft. Previously, we discussed the importance of being a good communicator.


I know that for some, the term "persistent" conjures up images of a car salesman who repeatedly lowering the price on a vehicle to stop you from walking out the door, each time complaining about how they're losing money on the deal. However, this is a mischaracterization of the term since it frames the situation around the questionable fact-skewing.

I believe that most people you talk to (including myself) will admit to endearment with stories about triumphing over significant challenges along the path to eventual achievement of one's goals. Usually, the more lofty the goals, the more challenging the journey. By definition, the protagonists of these stories are persistent. Outside the realm of fiction, think about what aviation would look like today if the Wright Brothers had yielded to the challenges they faced when experimenting with flight? Earlier this year, Airbnb received a $1B+ valuation, which wouldn't have happened if the founders had thrown in the towel at any of the many setback they've faced in building their business. This is a company that did some self-funding by creating and selling cereal, and which is still constantly embattled with new challenges like this, this, and this.

In short, people who are persistent don't give up in the face of adversity. Instead, they soldier on and accomplish great things. Microsoft prizes a person's ability to do this when evaluating long-term potential, which is a key factor in hiring decisions. This is also important for the day-to-day challenges software developers face like debugging, designing, and dealing with politics. Remember that interviews are about estimating how well you will do in the job and career you're interviewing for.

Software developers have to be able to focus and not give up when trying to solve difficult problems like finding and fixing obscure concurrency bugs. We can't justify deploying/shipping buggy code with the excuse that it's too hard to identify the problems. We dig in our heels, work through every line of code, write new tests, and crawl through references until we understand the problem and either fix it or determine that the fix should be postponed by weighing the cost of the fix against the severity of the issue. Every software developer I know has a story about spending days or weeks searching for the cause of a nasty bug. As a proxy for assessing your ability to do this, interviews for software engineering positions typically include time coding on a whiteboard. This test gives the interviewers insight into how you approach solving problems and whether your coding skills are adequate. The worst thing you can do during this part of the interview is to spend five minutes and give up. Although you may get a few easy problems in the course of your interview, you will definitely face a few problems that will be very challenging. Don't give up on these! If you get stuck, take a moment to step back and think about whether you're taking the right approach. Try to do this as early as possible so you don't spend too much time going down the wrong path. Also, proactively look for bugs. There's a good chance that you will have a bug you are unaware of because of some fringe case you forgot to consider. When your interviewer points this out, carefully analyze the code and figure out where the issue is.

Software design requires the ability to seek out the right technologies to build a solution to a problem and to figure out how to fit the pieces together. This is not necessarily as straight-forward as it sounds. When developing a web service, should we store data as XML, JSON, strings, a binary format, etc.? Do we need to implement client libraries to abstract access to internal services? What technology stack should we build on? We must insist on working towards a great solution and not just taking the first option we find each time we have a question. We must always be asking "why?" Another common component of an interview for a position as a software engineer is system design. For this type of question, you will get very open-ended design problem like how to build gmail. Interviewers will want to see that you're able to think through the requirements of the system, are aware of various applicable technologies, and are able to reason about which of the available options is most suitable to the system you are designing.

Questions around the right technologies to use brings us to politics. No matter where you end up working, you will face political issues (unless you are in the extremely rare position of having enough money to ignore everyone around you). In a big company, you will have to battle peers for the power and influence to push your brilliant idea forward despite staunch resistance from the status quo. Small companies might seem less political, but you still have to deal with satisfying investors and perhaps a few big key customers. Additionally, small fish look big in a small pond. In small companies, the little fish often let their perceived size go to their heads. On most days, you will deal with politics in some form or another and must have the resolve to fight for the right solution despite adversaries with greater political clout. During interviews, some interviewers may tell you there's a bug in your whiteboard code even though there is not. If you think through all the edge cases and verify that your code is sound, your interviewer may be looking for how you handle disagreement. If you think this is the case, be diplomatic in your approach to disagreeing with your interviewer.

In many cases, software engineers enjoy challenges like those listed here. They are like difficult puzzles that we eventually triumph over. We look for the same characteristics when hiring other developers to be on our teams. Aside from being prepared for whiteboard and design excercises, be prepared to talk about examples from your past that show off your ability to persist in the face of adversity.

One last comment about persistence. This is very important, so remember this. You must be persistent in pursuing your goals rather than in your approach to pursuing them. If you want to break down a concrete wall, you can be persistent about banging your head against it until it crumbles, but the wall will probably last longer than your head. As soon as you start to get a headache, you'll probably realize that a better approach would be to use a sledge hammer or wrecking ball. If not, you'll soon experience the cruelty of natural selection at work.

See the next post in this series here.

Monday, November 21, 2011

Characteristics of Successful Job Applicants: Passionate

This post is part of a series of posts on the characteristics frequently present in successful candidates for jobs at Microsoft. Previously, we discussed the importance of being a good communicator and being persistent.


Thus far, we've covered persistence, with the interesting stories it creates, and good communication, which provides an engaging way in which to tell those stories. We still need a deeper understanding. The underlying driver one must be aware of is passion. Why are people persistent? Because they feel something deep down inside that pushes them to obsess over achieving some goal.

There are an infinite number of things one can be passionate about. A couple of examples include building systems that can scale to support millions of simultaneous users and security that is impenetrable to malicious adversaries. It's also common to have passions unrelated to engineering such as ensuring every child has an opportunity to learn or keeping families safe. Most people have multiple passions; the important thing is that you recognize what they are.

Passion essentially comes free since it doesn't need to be learned. It is inherent to being human. The other characteristics can take some time to develop since they require behavioral modification, but the only investment you need to make in regard to passion is to think a bit about what excites you. The easiest way to go about this is to repeatedly ask "why?" Take something you enjoy and ask yourself why you enjoy it. When you have the answer, again ask why that matters to you. After a few iterations, you will arrive at a core value, which you care about simply because it's part of who you are.

Let me give an example. I enjoy designing and building scalable systems. It's pretty awesome when a system scales to support tens of thousands of transactions per second or more. Why is that awesome? Because it's uncommon to have that kind of demand and when that demand exists, most systems fall over. Why does that matter to me? Because the that level of usage (hopefully) means customers love the product and it's very challenging to build a useful system that can support that transaction rate. Why does customer love matter to me? Because I want to enhance people's lives by enabling new experiences. And why am I interested in building things that are difficult to build? Because I enjoy challenges and the mental exertion involved in the process. We'll leave it at that for brevity, but you get the idea. As you can see, this exercise explores what defines us as individuals.

Showing passion is critical to your interview at Microsoft. If you are passionate about the work, you are more likely to enjoy the job and be a productive member of the team. Your passion will engender the persistence needed to uncover bugs, design and build complex systems, and navigate the waters of uncertainty that surround cutting-edge technology.

Your interviewer will want to know what drives you and it will be to your advantage if you've already thought about it. The typical method we use to try to figure out where your passion lies is to try to drive the discussion to a point where you basically forget that you're in an interview and begin engaging in fervent discourse. If your interviewer can't hit the right topics herself, that's a bad sign for the outcome of the interview. Usually this won't happen since you will have (hopefully) applied for the job due to a deep interest in some aspect of it. However, most people prefer to eliminate unnecessary risk from the equation. Don't be afraid to steer the conversation a bit and talk about the things you love. Just remember to be authentic; authenticity comes from understanding yourself, not from a rehearsed script.

See the next post in this series here.

Sunday, November 20, 2011

Characteristics of Successful Job Applicants: Good Communicator

In the previous post, I shared some general thoughts about the mindset appropriate for pursuing high tech jobs. This post will be the first of several in which I will describe characteristics that are frequently present in successful applicants.

Good Communicator

Although it may not necessarily be a requirement of the job you want, it is very valuable to be a good communicator. This doesn't mean that you have to have the magic that evokes a standing ovation from an audience of thousands. It just means that you have to be able to have a meaningful conversation with your interviewers. You want to be able to express the thoughts in your head without leaving your counterpart confused about what you are trying to say. Suppose you solve the P versus NP problem... what difference does it make if you can't explain it to anyone?

It's also good to develop the ability to express your thoughts without extraneous chaff. While some explanations require a lengthy answer, being too wordy can annoy your interviewer, depending on their personality (recall that in the last post we touched on the need to assess your interviewer). This minor annoyance is innocuous, though, when compared to the risk you take of running out of time. There are many situations in which time is a critical factor and an interview is one of them. If you spend too much time explaining your answer or solution to the first question asked, you will not have time to move on to other questions. Imagine that there are two candidates interviewing for the same position and the first answers one question extremely well but runs out of time while the other answers two questions satisfactorily and one question poorly. In this case, the interviewer doesn't have a full picture of the first candidate. Maybe they would have bombed the second and third questions. With the second candidate, we have an understanding of both their strengths and their weaknesses. A known weakness is preferable to an unanswered question since many weaknesses can be overcome, but unanswered questions may hide unacceptable results.

In addition to being clear and concise, try to be precise. Misinterpretation can be dangerous in an interview. Any thinking the interviewer has to do on their own may lead to false impressions. I have a friend who interviewed at Microsoft and as part of her explanation as to why she wanted to work there, she said she loves the way Microsoft technologies like Live Messenger allow her to communicate with her family. Somehow the interviewer misinterpreted this as the desire spend the day chatting online. This mistake reflects negatively on the interviewer, but the point is to be aware that it happens. In the end, the interviewer is the one who will decide whether or not to recommend hiring you.

There is plenty of information around the web on the importance of effective communication along with some tips on doing it, so be sure to poke around and get a better understanding of both. Many colleges and public institutions, like libraries, have programs (often free) to help participants improve their communication skills. While at UCSD, I went through one such program that I believe helped me immensely.

Check out the next post in this series here.

Saturday, November 19, 2011

How to Get a Job at Microsoft

I am involved in a variety of mentoring programs in which I interact with college and high school students. A frequent question that is asked is how to get an internship or full time position at Microsoft. There are many paths to landing such a job, so my preference tends to be to help potential applicants understand a few universal principals along with how to assess their unique situation, which will continually evolve over time. The things I typically talk about are (1) several characteristics that are beneficial to have (2) things my team looks for when interviewing, (3) experiences that friends and I have had, and (4) things to carefully consider when applying for a job. This post will discuss the topic of applying in general and follow-up posts will address each of the 4 items listed above.

Being smart is a basic requirement for just about every high-tech job (even though it doesn't always seem like it), so no matter how smart you think you are, always assume that there are 2 to 3 people who are smarter than you competing for the same spot. This is particularly true when the job is in a hot area of tech, at a prestigious institution, etc. This may seem like it casts a dour outlook on one's prospects for winning the job offer, but this is only true to the point at which one realizes that hiring is not based purely on intelligence. People are highly complex with a multitude of skills and characteristics. If someone is brilliant, but lacks the discipline to deliver, their value is highly diminished in most cases. Nearly every interview assesses the candidate for a variety of skills and characteristics.

Something else people often miss is that interviewers are people too. Just as job applicants are complex individuals, so too are the folks who participate in their interview loops. They eat, sleep, and poop like everybody else. They had to go through the interview process at some point in time and now they are in the position of interviewing you and having to make a decision about whether or not to recommend hiring you. Because they are individuals just like us, the exact same interview with two different interviewers may have a very different outcomes. In fact, the exact same interview with the exact same person could have very different results at different times of day! As hard as we might try to exclude emotion from objective assessments, we're just not going to be in a good mood after we dropped our laptop because we sprained an ankle chasing the bus we missed the day after our grandmother's funeral. So be ready learn how interviewers think and be ready for anything.

Uniqueness is further not just limited to people. It applies to groups of people, meaning teams, organizations within companies, and companies themselves. Think about it - in the end, each is made up of lots of individuals with unique personalities. Essentially, any organization, regardless of size, will exhibit unique characteristics that differentiate it from others. These unique characteristics are usually called culture. This is a big topic and I will definitely write more about it in the future.

So what this sums up to is that you must be able assess yourself, the job you're interviewing for, the people interviewing you, the team your are interviewing for, the company you are going to be a part of, etc. Make sure that you prepare by first gathering as much information as you can, then focusing on the right things to positively distinguish yourself from the other applicants. What makes you unique? If you are unable to distinguish yourself from other candidates, the decision will basically come down to a coin toss. You don't want to wager your career on a coin toss, right? When it comes to interviews, you have the ability to affect the odds. Study the position, study the team, study the company, and study yourself.

Check out a follow-up post on the characteristics of successful candidates.

Friday, November 18, 2011

Why blog?

As an indication of my age, I still remember when blogging first took off and everyone was openly exposing their life stories to the rest of the online world. While those stories were often relevant to readers within the authors' social circles, I always felt like the overall value was limited. Personally, I preferred to create deeper connections through in-person interaction. Because of this view, I neither followed blogs nor wrote one of my own for many years.

Over time, I have come to recognize that there are many stories out there that have helped me in many ways. I have found solutions to engineering and coding problems many times in blog posts by other engineers who dealt with the same problems. I've found clues on life and philosophy in the random musings of individuals half a world away. This abundance of information cannot be found in books. It is the seemingly trite details that these stories include that make them real and relatable. They are the difference between reading abstract theory and reading about the actual steps taken to reach the goal.

In the end, the question I have come to ask myself is no longer "why blog," but instead "why not blog?" There are several easy excuses including not having enough time, not having anything interesting to write about, etc., but the reasoning behind these excuses is lame. Anyone can take 15 minutes while waiting for the bus to jot down a few thoughts. Assuredly, there is someone out there in the estimated 7 billion people around the world (or at least the 360M with internet access) who will relate or benefit in some way from our real-life stories.

So, I embark on this journey in the hope that someone out there will find what I share useful. I know I have found your thoughts and stories to be of great value and thank all those bloggers out there who have been contributing to our collective story over the years.

In closing, here's a post from one of my favorite bloggers, Brad Feld, about why he blogs and what it has meant for him.