Attracting Talent, summarized


Thanks for all your insights on what is attractive or unattractive about job postings, and about working on developer tools. A great many of the comments were strongly aligned with each other; no one likes “alphabet soup”. And a number of them illustrated that there is a wide spectrum of what people find attractive and unattractive. To sum up the hundred comments I received:

Factors that make a job posting unattractive are:

  • “Required Skills Include…”
    • “technology vomit”, aka “alphabet soup”. ASP, PHP, ODBC, VSTO, ADO, VB, TLC, NGO, BMX, OMG, WTF, BBQ…
    • overemphasis on specific existing knowledge vs. ability to learn new skills
    • too many specifics: so many “required” skills that no mortal could actually fit the bill
    • too few specifics: “Fortune 500 company seeks detail oriented, self motivated programmer to work on exciting new projects” says nothing
    • nonsensical requirements: a posting requiring “five years experience with C# 4” makes no sense
    • things that ought to be assumed (can type, knows how to use a word processor)
    • too much emphasis on certifications / degrees / class standing
    • requiring familiarity with older technologies (VB6, for example)
  • Format and style
    • too long; didn’t read
    • too short; not enough information
    • sounds like it was written by someone who has no idea what they’re actually talking about
    • arrogant or aggressive style
    • full of internal jargon, or exposing clunky mechanisms – “Position: SDEII(707719-External)”
  • Personality and culture
    • no evidence of awesome coding methodologies, such as “Agile Programming”
    • evidence of dogmatic devotion to trendy coding methodologies, such as “Agile Programming”
    • flat, boring list of requirements with no evidence of “personality”
    • silly attempts to inject “personality”. (Be a ninja rockstar coder!)
    • no indication of working environment – is it a noisy cube farm, private offices, on-site at the client’s space, what?
  • The job itself
    • vague, unfocussed, directionless, no clear indication of responsibilities, posting seems to be about hiring a warm body
    • job description does not distinguish it from a thousand other postings (“Web developer wanted for… web development”)
    • no telecommuting
    • relocation required
    • no indication of salary range
    • salary is indicated but too low
    • job requires crazy hours away from family and other pursuits
    • no indication of what tools/languages will be used

Factors that make a job posting attractive are:

  • Required skills
    • relevant, focused, sensible
    • emphasis on ability to learn
  • Format and style
    • well-written, self-aware, humble, enthusiastic
  • Personality and culture
    • good work-life balance
    • corporate culture and values clearly expressed
    • evidence of programming methodologies, such as “Agile Programming”
    • opportunity to work with famous industry leaders or on famous products
  • The job itself
    • described in detail: specific team, specific product, specific job
    • telecommuting possible
    • work is beneficial to industry and society
    • work has large scope — “change the world”
    • work is challenging
    • product is innovative
    • tools/languages to be used are described and are current and familiar
    • good pay
    • autonomy to choose own tools, architectures, methodologies
    • details of the team stated – team size, for example
    • more than just typing in code – opportunities for UI design, DB design, troubleshooting user problems, and so on

Factors that make working on developer tools unattractive are:

  • not used by ordinary people; less impact than working on a browser or a word processor, which ship to hundreds of millions of people
  • problems are too academic, too abstract, too difficult
  • the job requires a CS background; the interview process is going to be scary, difficult, and I don’t want to set myself up for failure.

The last point I want to talk about in a bit more depth.

You don’t need a PhD in computer science or be a Waterloo grad to work in DevDiv. Now, don’t get me wrong; it helps to have a relevant degree from a great school. A great many of my coworkers have degrees in CS, mathematics or other related fields. But a number of my coworkers do not have degrees and are not even from Waterloo. (At one brief moment in my career my entire management chain from me up to our vice president was Waterloo grads; there are disproportionately many Waterloo grads in DevDiv.)  Having an academic background certainly helps because it means that you’ve already been exposed to a lot of the ideas that we work with every day. But what matters is whether you can grasp those ideas and use them in practice, not whether you can “chew algebra and spit assembler” as one commenter put it.

A few anecdotes to illustrate my point. A couple years ago I had a conversation with an architect who had spent several years building up a library of objects to represent control flow operations on generic types, and only a year after he was finished did he realize “aha, this pattern of composable objects that I built this whole architecture around is called a monad.” You don’t need to be able to rattle off “a monad is an endofunctor with an associated bind and return functor” in order to write a library of objects that an academic would identify as being monadic.

A more extreme example: my wife worked at Microsoft successfully for ten years as a software tester; her degree is in the study of the French “Theatre of the Absurd” movement of the mid 20th century. Admittedly, that sort of thing is less common these days than it was fifteen years ago. But it does illustrate that people do come here with all kinds of academic backgrounds. What matters much more than academic background is drive, talent, intelligence, ability to learn new skills, and simply getting stuff done.

Let’s move on to the positives.

Factors that make working on developer tools at Microsoft attractive are:

  • your customers are developers; you understand the customer and they understand you
  • you are building tools that make your own job better
  • problems in this space are more challenging, interesting, academic, abstract and difficult than those in many other problem spaces
  • a whole team full of tool makers is likely to be a good team to work with
  • the opportunity to ship cutting-edge technology to millions of customers
  • “programming about programming is twice the fun!”
  • employees are surrounded by industry leaders who do great things; employees have direct access to these leaders rather than relying on blog posts, magazine articles, interviews, and so on.
  • programmers are well-shielded from having to deal with non-programming aspects of business
  • corporate culture is well-known: hours are flexible, dress code is flexible, and so on
  • Microsoft provides opportunities to take huge bets; our projects have enormous scope
  • compensation and benefits – all kinds of insurance, gym memberships, bus passes – are generous
  • developers can advance on the “technical track”; you don’t have to become a manager to get promoted around here

Thanks again for all your comments and constructive criticisms. I appreciate it very much.

Comments (39)

  1. MarcelDevG says:

    Hi Eric,

    Useful stuff.

    In my experience, it’s also important to have personal contact.

    I know it’s impossible to do that with each applicant, and phone screening is also a form of contact.

    But, I always wonderd that there was no stand on de the PDC (not in ’08 when I was there) which gave job information.

    Looks to me a great way for screening people, every visitor is into devloping in some way.

    “Please spend thousands of dollars and several days in lost productivity to send your best developers to the PDC so that we can attempt to poach them away from your company” is not a message we would like to send to our best customers. — Eric

    A lot of software developers needs some kind of push or pull to get out of there ‘not so’ comfort zone.

    The good one’s mostly have a job.

    Marcel

  2. Brian says:

    I was going to reply to the last post, but ended up getting distracted.  No worries, Business Week ended up publishing an article with most of what the post was going to say:

    http://www.businessweek.com/managing/content/mar2010/ca2010034_122704.htm

    What has frustrated me most about applying with Microsoft is the "Black Hole"  I’ve applied to several positions I’ve thought I’ve been a good fit for and never hear anything back other than visiting later to see the position closed (or worse not)

  3. Chris B says:

    For the most part, this is a really great list of do’s and don’ts for hiring overall, thanks for putting it all out here!

    A few of them caught my eye.

    1. no evidence of awesome coding methodologies, such as “Agile Programming”

    2. evidence of dogmatic devotion to trendy coding methodologies, such as “Agile Programming”

    It is somewhat interesting that both of these occurred, and I definitely think there is an important balance between them.  People need (want?) to be coordinated and work together towards a goal, but they also want some freedom of expression and creativity to pursue it in their own manner.  As an employee, I expect to be told what the goal is, but I definitely want to be involved in figuring out how to get there.  Give me a process, but don’t choke me with it.

    The other interesting one was "problems are too academic, too abstract, too difficult."

    Academic and abstract I can understand.  Work that doesn’t produce a tangible result isn’t for everyone.  But when someone says "too difficult" my heart skips a beat and I feel all tingly.  At that point, my intellectual prowess is being challenged, and I almost feel compelled to at least TRY to meet that challenge.  I won’t always get there, but where is the fun if you never try to push your limits?

  4. MarcelDevG says:

    Haha!

    That,’s true, but there some who pay their own.

  5. Gabe says:

    It’s amazing how analagous the requirements for a good "help wanted ad" are to the requirements for a good online dating profile! Most of these translate verbatim, like "too much emphasis on certifications / degrees / class standing" and "flat, boring list of requirements with no evidence of “personality”".

    I suppose the only real difference is the need for an online dating profile to have a photograph, which I don’t think I’ve ever seen in a help wanted ad.

  6. jsrfc58 says:

    Chris B wrote:

    "Academic and abstract I can understand.  Work that doesn’t produce a tangible result isn’t for everyone.  But when someone says "too difficult" my heart skips a beat and I feel all tingly.  At that point, my intellectual prowess is being challenged, and I almost feel compelled to at least TRY to meet that challenge.  I won’t always get there, but where is the fun if you never try to push your limits?"

    Good point. I think probably the best combination of factors in terms of this (well, for me at least) might be working on a piece of software that has some practical value, but gives you enough latitude to try to work in some more abstract/experimental elements.  

  7. AndyF says:

    I once interviewed a candidate for a Director of Product Development position and upon seeing the guy’s resume I was almost floored!  He had an undergrad degree from Harvard, and a post-grad degree from M.I.T., as well many other accoladacious achievements.  He was well-spoken and clearly VERY intelligent.

    Then I asked him for his references.  He fumbled with his briefcase for a while and then looked up and sheepishly told me "I have forgotten the combination to my briefcase!" and it was clear, he had.

    NO – I did not hire him.  Why?  Because before I care at all about glorious degrees, amazing experiences, or fantastic achievements I need to see the ONE thing that is so sadly lacking in today’s world.  What is that?  

    Common Sense.

    This, the most vital element in the world is so sadly lacking in so many corners that well, when you find it, hold on to it, and when you dont see it – RUN LIKE HELL!

    Like I say, I dont care if you have 10 degrees from the 10 top schools – if you then lock yourself out of your briefcase, or (worse) over-design software or make it way too needlessly complex, you are not "smart and creative" – you are in fact, badly in need of a shot common sense.

    But alas, look at our world…  In 2008-2009 6,000 Americans lost their lives due to people talking and texting on cell phones in their cars, and we still dont ban it.  Common sense?  No, lunacy…

    Give me common sense any day, and I will take care of the rest.

  8. Grico says:

    Common sense….its a funny word if you stop to think about it….because its anything but common.

  9. Land says:

    So after that teaser in the first post, you’re not even sharing your answers, Mr. Lippert?

    On the subject of job postings: I only ever look at job postings from the perspective of the employer, not the candidate employee, so I don’t have a good sense of what makes postings attractive or unattractive. Hence the question. On the subject of working on tools, I don’t have anything particular to add. I enjoy very much the combination of the abstract/theoretical/academic and concrete/practical aspects of designing and implementing language tools, and it gives me a lot of satisfaction to ship those tools to millions of people just like me. I also like that the tools are not there for themselves, but are part of a larger business strategy for producing huge value in the economy. Basically not different from what others said. — Eric

  10. Dean Harding says:

    I got a PhD in BBQ… do I get the job?

  11. Allen Gould says:

    “What matters much more than academic background is drive, talent, intelligence, ability to learn new skills, and simply getting stuff done. “

    While I agree that this is an important skill, as a candidate, how do you express this in a resume or cover letter (besides the required “I am a quick learner” shtick everyone puts on)?

    It’s difficult. Many of these things come across much better in person, in an interview, than on a resume or CV. — Eric

  12. Mark Dennehy says:

    If I could get people to do just one thing when recruiting in order to make the process more effective, it’s this – I’d get them to remember that a job ad without salary information is like a CV without a name on it.

    I disagree completely with the thrust of this analogy; I’ll proffer up two analogies which I believe are far more exact. I say a job posting without the company’s name on it is very much like a CV without the candidate’s name on it. And I say that a job posting which does not state the offered salary range is very much like a CV which does not state the candidate’s required salary range. Are you in the habit of putting your required salary on your resume? If not, why not? and why do your reasons as candidate not also apply analogously to the employer? — Eric

  13. Niall Connaughton says:

    That’s a good point, Eric.

    I think what worries people most about job ads with no salary range is that they feel that if they’re offered a position, the employer will ask the candidate how much they are looking for, usually before mentioning any kind of range they are looking to pay. This leaves the candidate with 3 potential outcomes, two of which are bad:

    - Asking for more than the employer is willing to pay and making them balk, potentially removing the offer or just going with someone else

    - Asking for less than they would pay and having them accept the offer, only to build resentment later when the employee finds out what other people are earning

    - Asking for something in the right range, and everyone’s happy

    Indeed. My point is that the employer is in the same boat. They can offer signficantly less than you’re willing to accept, which means you balk and take your skills to their competitor. They can offer you significantly more than your minimum acceptable salary, which means they just wasted shareholder profits. Or they can make the right offer. Three outcomes, two are bad. — Eric

    The anxiety over the first two can be pretty bad. I hate telling people what I am “looking for” before hearing what they are looking to pay. It just feels like a setup to give an answer that’s likely to disadvantage me in one way or another. I think another anxiety causing situation is employers who make talking about your salary in any way a sackable offence. It builds enormous distrust from employees. I think the more open the employer is with the employees about salary and progression, the less reason employees have to whisper among themselves.

    Of course that puts you at a disadvantage. The point of the negotiation tactic is to put the other party at a disadvantage. This is the oldest tactic in the book; whoever mentions a number first is automatically at a disadvantage, so a skilled negotiator who is coming from a position of weakness will try to get the other party to mention a number first. No one is forcing you to answer the question. Were I in that position I’d simply turn the question around and ask what the total compensation package was like — salary, bonus, stock options, savings plans, benefits, when are raises typically offered, and so on. All reasonable questions that are hard for the employer to duck.

    A negotiator coming from a position of strength — for example, the party who needs the deal less and is more willing to walk away — doesn’t need to use that tactic. (But that doesn’t mean they won’t use it!) — Eric

    One reason why people want to know the range is that people like to feel like they’re being paid “fairly”. That doesn’t mean “as much as they could get anywhere else”, just that if the role you’re looking to fill generally pays $x-$y, you can work out what seems fair based on what level of experience/knowledge the employer is looking for. Even if you could get a bucketload more down the road at another company, the big point is feeling like your employer values you and pays you what they think you’re worth.

    Indeed, and now we get into a whole other aspect of human psychology. The literature on this is quite interesting; studies show that people will turn down deals that are unambiguously advantageous to them in order to prevent someone else from getting an “unfair” advantage. — Eric

    This is the case for the candidates who are looking for the best project, with good pay, anyway. Some people are just looking for the best rate, regardless of the job. But surely these aren’t the people MS are interested in?

  14. Niall Connaughton says:

    In addition to the last comment, I think to address employers’ worry that stating a salary range on the job ad would cause some people to not apply before giving the job a chance, perhaps a good approach would be for the employer to bring the salary range up early-ish during the interview process. This way the candidate can have an idea of what they’re looking at, and can look at where any offer is made in relation to the salary range to get a feel for what the employer thinks of their skills in relation to what they’re looking for. If you tell someone the salary range, then think they’re a good fit and offer them the maximum, the candidate can then be happy that you have recognised their skill, even if it’s possible for them to find higher salaries elsewhere.

  15. Bruno Brant says:

    Now, Eric, what about what makes a candidate good for Microsoft DevDiv? What are the keys to work with you guys? I’m pretty sure that there’s no simple answer, but what makes a guy stand out in the crowd for you?

    First of all, in DevDiv we don’t hire “for DevDiv”. We hire for Microsoft first and foremost. An ideal candidate should be someone with the skills, learning ability and aptitude to work on anything from XBOX to Mac Office; we then hope that their best fit is in DevDiv. That said, people with a strong background in languages (either from academic pursuits or industry) stand out. — Eric

  16. Brett Allen says:

    AndyF, if you base your hiring decisions on real world common sense, instead of job abilities, I see that as a problem.

    I lock my keys in my car, forget to fill up my low tire, don’t see the wallet on the table right in front of me after looking for 30 minutes (my friend came in and found it for me in 30 seconds).

    I forget my passwords (combinations) to my accounts (mainly because I use several variations of a password everywhere, not the same password everywhere).

    None of that has anything to do with my ability to develop software. Sure you could come up with analogies and "if you can’t do that, it hinders your ability to do this" all day.

    Fact is, I’m good at software because software is what I love. When I am at the computer writing code, or in design meetings with clients, or designing the system itself with the team, I am -very- detail oriented, see potential issues, and plan ahead without trying to over engineer.

    Joke with my friends growing up for D&D: High INT, Low WIS

  17. Mark Dennehy says:

    Actually Eric, I usually ensure the employer knows my salary expectations long before we get to an interview stage and I tend to go after specific posts rather than the shotgun approach, so while it’s not in my CV, it will be communicated on to the employer. But yes, putting it in the CV is an interesting idea – the only flaw I can think of is caused by somewhat unscrupulous recruiters hanging onto old CVs — I’ve gotten calls originating from a CV that was sent out six or seven years earlier, and of course my salary expectations will have gone up since then, which could be a problem if they were in the CV the employer was looking at.

  18. Aaron G says:

    It’s striking to see some of the polar opposites reflected in the list.  I think it just goes to show you that whenever there are two extremes to any discussion (such as, for example, "Agile"), you’re going to end up alienating some people no matter what.

    Then again, if you just average it all together, the want-ad looks boring and indistinct.

    My guess?  Probably none of these things really matter that much in the long haul, and the only *serious* roadblock for a company like Microsoft is that many if not most of the developers at the desired skill level either (a) are not on the market, and/or (b) overestimate the gap between their own abilities and those required for the job.  There’s never a shortage of unqualified candidates because they’re *always* on the market and consistently *overestimate* their abilities.

    Maybe you’ve gotta do what Google does, or at least used to do – actively recruit, don’t always wait for people to come to you.

  19. jsrfc58 says:

    Eric wrote: “That said, people with a strong background in languages (either from academic pursuits or industry) stand out.”

    Hmmm. Could you elaborate on the phrase “strong background” a little more? For instance, does that mean developers with experience in a broad range of languages, or developers who have written their own APIs/frameworks? Or, would it be a step beyond that…i.e. having written a compiler, interpreter, or even a scripting language?

    (I suppose someone who has written their own IDE or developed their own programming language would probably be even better yet.)

    Sure, if we get the opportunity to hire people like Anders or Neal Gafter who have a documented history of designing and implementing famous top-of-the-line tools, those people are very interesting to us. But those sorts of candidates are understandably rare special cases. What I meant more by “strong background” was strength in proportion to the candidate’s life experience and the position offered.

    Given two fresh-out-of-college candidates who are otherwise equal, the one who speaks enthusiastically and in detail about their Compilers 401 project has an advantage over the one who doesn’t. (Full disclosure: I did not actually take Compilers at UW.) Given two industry candidates who are otherwise equal, the one who worked on parsing a query language and optimizing it to their business process has an advantage over the one who doesn’t. And so on.

  20. jsrfc58 says:

    Eric wrote: "What I meant more by "strong background" was strength in proportion to the candidate’s life experience and the position offered."

    Makes sense. I suppose, more generally, like any hiring situation, that could be summarized as:

    chance of getting hired = .2t + .2d + .4e + .1a + .1p

    …where t = talent, d = drive, e = experience, a = appearance, p = personality (each ranging from 0.0 to 1.0 based on the candidate) and the sum of the coefficients equals one. An employer could plug in whatever coefficients they want to, depending on their needs/preferences. As for a candidate, drive and/or raw talent could overcome a lack of experience.

    Unfortunately, e is typically the dominant factor on a resume, and it is more difficult to convey t and d unless the candidate enters into an interview situation.

  21. DRBlaise says:

    @Eric-“The point of the negotiation tactic is to put the other party at a disadvantage.”

    I strongly disagree that a company should take advantage of an employee who has weak negotiation skills.  

    I didn’t say that a company should or should not do anything; merely that these tactics exist and are used. The question of what should an entity do is a moral question. My belief, which is supported by both law and centuries of practice, is that a company has a fiduciary responsibility to protect the interests of its stakeholders; protecting those interests includes compliance with the law of the land and the policies of all regulatory bodies. To do otherwise is to risk the embarrassment, censure, or destruction of the company, which is not within shareholder interests.

    Now, it might well be that the best way to protect stakeholders interests is to foster an environment of openness and generosity in the realm of compensation. Or, it might be the case that the opposite strategy best protects stakeholders. That you and I both find the former attractive and the latter unattractive is irrelevant to the moral question. — Eric

    The salary should be based on a candidate’s qualifications and experience, not on their negotiation skills.

    Another moral statement. What justifies this moral statement? Is it simply the case that what you find unattractive is morally wrong? — Eric

     If you come into contact with a company who is trying put you at a disadvantage or their employees at a disadvantage, my advice is to run away.  Employment is not like buying a used car, it is more of a long term partnership.  You want to work for a company that values their employees and treats them fairly, even if they have poor negotiation skills or are afraid to ask for a raise.

    Indeed, I want to work in a place like that, because I am a lousy negotiator. Of course I want to work for a company that gives me a good deal without having to negotiate much. That’s convenient for both you and me; I would imagine that like me, you are also of a temperament that dislikes negotiation. But why should someone who is a good negotiator be deprived of the opportunity to negotiate a better deal for themself? Negotiation is a valuable skill and surely you would agree that it deserves to be compensated. — Eric

    @Niall made great comments.  I don’t think people can appreciate this issue until they actually work for a company where revealing your own salary information is “cause for disciplinary action up to and including termination.”  It is very demoralizing to have no official information on what other people in your position at the company make or any general information on salary, raises or bonuses.  Everything is individually based and at the discretion of upper management.  It is not a fun atmosphere to work in.

    I am sure it is no fun whatsoever. Are all companies morally required to be fun places to work? — Eric

  22. @DRBlaise:  Why shouldn’t pay be a negotiation?  One thing that I think many people overlook (and I did myself for the longest time) is that you are an individual should operate your professional life like a business.  You are trying to sell yourself for the most profit you can to your shareholders (family.)  At the same time you are trying to create a great partnership with other businesses (such are your employer) that are mutually beneficial.  How do you expect the partner (employer) to know what you are worth if you don’t negotiate?  Should they just take all the profits for the year and split them equally among all of the employees? That would make weak and lazy employees have a huge advantage over those that are strong and hardworking.  

    At the same time comparing your salary and benefits directly with another employee may not very helpful.  Some people could careless about how great the healthcare is and may need/want a few extra bucks tossed their way.  Someone else may want the healthcare and educational/training benefits.  

    There is a reason to have the negotiation.  It allows both parties to come to something they both agree on.  Even if you are “weak” at negotiating, you still have a choice to accept or turn down an offer.

  23. Regarding "Pay Negotiation" I agree with Matthew, but take it one step further. If one is looking for the new employee to contribute ideas to the environment, they MUST have negotiation skills!!!!! If they can not negotiate for something as important (Especially to them) as their compensation, how will they possibly participate in tem negotiations…

  24. Brett Allen says:

    @David V. Corbin,

    Negotiating pay is a "confrontation" between an authority figure and employee.

    Contributing ideas to a project is a collaboration of supposed equals.

    Very different situations. I can only argue/debate/challenge an authority figure if I have a lot of evidence backing my ideas up. Hard to prove why you’re worth something to someone who has never seen you work. (I am good at negotiating raises, not good at negotiating initial pay).

    Contributing ideas to a team is less stressful in that regard, not only because you are not challenging an authority figure with very little evidence, you are also not making statements that will greatly affect your life style for the next 6 to 12 months.

    Now that I have more experience in the work place, I have more proof of past projects should I ever end up negotiating pay for a new job.

    However in the past, I was not so fortunate.

  25. DRBlaise says:

    @Eric – I didn’t mean to make a moral judgment on the practice of all negotiations, I was simply stating what is going to attract me to an employer.  Since my publicly traded company got bought by 3 years ago by a private entrepreneur , I have come to value openness about financial information a lot more than I did before.  I was just trying to give you a reason why others find it attractive when a company displays a salary range and unattractive when they do not.  If a company hides this information from you, it could be a sign that they view you as simply a resource to be take advantage of, instead of a partner in building the company – whether this is for share holders or for a private individual is not relevant.  I have worked for companies that partner with their employees and those that see them as resources to be take advantage of, and I find the first type more attractive to work for.

    Negotiation is a valuable skill, but it should be treated the same as other skills and compensated for as it relates to how much it is used on the job.

    In answer to your last question, companies are not morally obligated to make it "fun" to work for, but it does make it more attractive to work for … and I thought that was what we were discussing.

  26. Brett, You have a valid point. For people early in their career, there is little ability for negotiation. For people who have been doing this for sometime, it becomes much more of an issue. Sometimes I forget what it was like when i was starting out in the 1970’s – just getting a job in the field was a BIG success. These days (for me), negotiation is a very significant part.

  27. DRBlaise says:

    @Matthew Whited-"That would make weak and lazy employees have a huge advantage over those that are strong and hardworking."

    There seems to be an assumption in your argument that "weak and lazy" employees are poor negotiators and "strong and hardworking" employees are good negotiators.   My experience is that how well you do at negotiating is not related to your work ethic or talent.  I also believe that I can judge a person’s work ethic or talent without them "negotiating" with me.  They often have to communicate with me (but not always) but communication is different than negotiating.

    I find people and companies that judge and compensate talent and work ethic based on how well a person "negotiates" unattractive.

  28. Dean Harding says:

    As much as we may dislike it, salary negotiation is always going to part of the process for a highly skilled role like software development. At the end of the day, you’re only worth the salary that you can negotiate. That’s why I don’t think putting salary on the job listing OR CV is a good idea, because it sets up the expectation too early.

  29. Kyle says:

    Eric, what advice would you give to someone interested in getting into creating developer tools?  Any books, subjects, technologies, or any other more general suggestions that would be helpful?

    I think it is generally character-building to build your own compiler at least once, either for a language of your own or for a subset of an existing language. Or check out any of what I’m sure are thousands of open source projects that do developer tools and see how you can help. — Eric

  30. Gabe says:

    I think it’s perfectly valid to ignore any "programmer wanted" ads that don’t include a prospective salary range, the same as I would avoid any car dealership that didn’t have price stickers on the car windows or dating ads that state "no liars or jerks". Particularly this is because that implies that an employee must negotiate their salary. While it’s perfectly legitimate for some jobs (like litigator, CEO, or athlete), it doesn’t make sense for programmers. It’s like basing my salary on whether I can tell you why manhole covers or round or how to move Mt. Fuji.

    Of course anybody could be a good negotiator, but it’s my experience that the aggressive, egotistical, manipulative hotshots are the ones who end up getting paid more and promoted more, and those are precisely the type of people I don’t want to work with, much less work for. I want to work for a company that values my skills and experience, not my negotiating skills.

    The winner in a negotiation is most likely to be the one with the most experience and most power. Since I rarely have to negotiate for money (maybe every few years) and I can only survive a few months without a job, I have little ability to negotiate with somebody who does it every day and can probably survive years without filling whatever position I applied for. Why would I want to put myself in that position if I can avoid it?

    Incidentally, I remember learning in psychology class that the reason women systematically get paid less than men isn’t due to discrimination so much as that women just aren’t as aggressive in negotiating their salaries.

  31. Chris B says:

    “The winner in a negotiation is most likely to be the one with the most experience and most power.”

    I disagree.  I think the winner in a negotiation is most likely to be the one that is most willing to walk away without any agreement.  This party likely has other options which are potentially more desirable.  I’m definitely not a skilled negotiator, but I think the most powerful thing you can have on your side during negotiation is an alternative.  If you select that alternative, the other party must find one as well or walk away with nothing.

    Absolutely that is the case in most negotiations. However, power is a tricky thing. I took a negotiation class once, taught by a former NFL salary negotiator. He described a spectrum of negotiation styles with “Kansas” at one end and “Chicago” on the other. The Kansas style is “Hey, have I got a deal for you! You could do that thing for me, and in return, I’d do this thing for you, and we’d both get higher profits out of it than we’re making now!” The Chicago style is “Hey, have I got a deal for you! You could do this thing for me, and I could refrain from burning your house down!” I think we’d all prefer to be “in Kansas” when negotiating a deal, but we live in a world where some people “go to Chicago”, so it is best to be prepared.

    My point being that sure, the ability to walk away is power, but it is not the only form of power. The ability to inflict a consequence upon the party that exercises their ability to walk away is also a form of power. — Eric

  32. Gabe says:

    Chris B: By power, I meant precisely the ability to walk away from the table. Most companies can be profitable for years without any given position being filled. Meanwhile, an average unemployed worker with a family will only have a few months before they have to get a job regardless of what it pays. Of course a person who already has a job and is just looking around can easily afford to walk away from the table, and thus has a better chance of negotiating a higher salary. It seems to me that on average this just rewards disloyalty.

  33. jsrfc58 says:

    Eric wrote: “I think it is generally character-building to build your own compiler at least once, either for a language of your own or for a subset of an existing language.”

    Ok, but are there any decent build-your-own compiler/interpreter books out there? I’ve tried looking at a few over the years, including the infamous “Dragon Book” (odd, I just noticed there is a 2nd edition of this book that came out in 2006), and well…I’m always sort of struck by how they all tend to fall into same basic patterns of lexing/parsing/etc. Why is that?

    The basic pattern of lexing and parsing is the same all over because analyzing language in general is incredibly hard. We deliberately design programming languages so that they can be analyzed via simple, easy-to-write lexers and parsers; analyzing more “natural” languages is way too hard. (Try Inform7 some time if you want to see an incredibly awesome programming language that reads like English; I can only imagine how hard that parser must have been to write.) — Eric

    Has there been much innovation in terms of how program code is split into tokens, etc.? Note, I’m not referring to JIT compilation, garbage collection or anything like that. I mean the actual initial parsing of the code itself.

    Sure. For example, there’s been some research into monadic parsers. They’re very useful when you have one language embedded in another. Consider writing an analyzer for ASP markup containing HTML, which is itself containing VB, which is itself containing XML literals. — Eric

    Part of me wants to bypass the whole process and come up with a completely different way of lexing/parsing program code. Of course, this would probably involve coming up with a new language too.

    Go for it! — Eric

  34. commongenius says:

    @Gabe

    "Most companies can be profitable for years without any given position being filled. Meanwhile, an average unemployed worker with a family will only have a few months before they have to get a job regardless of what it pays."

    True, but your ability to "walk away from the table" is not solely influenced by how long you can go without a job. It is also very heavily influenced by your ability to get and accept other offers. I never go into any interview assuming that I am at a position of weakness compared to the potential employer. I always assume that they need my skills more than I need their money. I can make that assumption because I have confidence that in most cases I am more highly qualified compared to the other candidates for the job than the job is desirable compared to other potential jobs. That means that the employer has to convince me to work there more than I have to convince him to hire me; and that puts me in a strong negotiating position when it comes to salary and any other negotiated detail of the job.

    Of course, if you don’t have that kind of confidence in your own value, then you can’t make the same assumptions, and you won’t be in the same kind of strong position. And it could be that my assumptions are not always correct. But they have been correct often enough that I have never even come close to the point where I had to accept a job at less than I believe I am worth. I am not trying to paint myself as a rock star developer that everyone should want to hire. You don’t have to be a rock star to have confidence in yourself. Even if you think you are only in the 50th percentile of the candidates for a position, if the position is in the 45th percentile of available positions in terms of desirability, you are still in a strong negotiating position. Remember that the less skill that the job requires (which means the more qualified applicants are available), the more it has to compete with other jobs that require similar skills.

  35. commongenius says:

    Eric, in the “factors that make working on developer tools at Microsoft attractive” category, is it still true that you have to work at the main campus to work in DevDiv? I heard that at one point, but I have also seen evidence of people working in DevDiv from other locations (notably Hawaii). I would love to work on developer tools, but moving to Seattle just isn’t an option right now.

    The vast majority of developers in DevDiv are on main campus, yes. There is also a minority of people working from remote locations; it does happen, but it is rare. — Eric

  36. jsrfc58 says:

    Eric wrote:

    “The basic pattern of lexing and parsing is the same all over because analyzing language in general is incredibly hard. We deliberately design programming languages so that they can be analyzed via simple, easy-to-write lexers and parsers; analyzing more “natural” languages is way too hard.”

    Good points, and thanks for the reply. I think one of things that bugs me, though, is when I use a language like C or C++, and inevitably miss a semicolon somewhere, the compiler sometimes complains that it has found 5-20 errors in my code. In essence, it becomes a lexical trainwreck under the hood of the IDE. When I was first trying to teach myself C, this became an almost insurmountable obstacle because I wasted a lot of time looking for errors that really didn’t exist.

    The C# compiler has huge amounts of “error recovery” heuristics in it to avoid this problem. What we do is try to “reset” onto something that we know is good. So for instance if you are parsing “class C { void M() { class D { }” then we say oh, we didn’t expect class inside this method body, let’s assume that the brace was missing, give an error, silently insert the brace, and continue on.” There are all kinds of heuristics like that which attempt to reset the parser onto something that we know is good so that we can “start over” parsing from that point and not give errors for it. — Eric

    I know Intellisense is constantly improving (for example), but I think this brings me to another point: why is there an insistence on scanning character by character, left-to-right, and down through the code? Maybe I haven’t seen enough compiler/interpreter implementations behind the scenes, but that is what I’ve gotten from various books/online examples.

    We don’t. The current C# compiler parses “top level” stuff in every file first, skipping method bodies and then goes back and parses each method body in each file individually. That way we can do analysis of whether, say, the class hierarchy makes any sense before we attempt to analyze the method bodies that are going to use that class hierarchy. — Eric

    Here’s another way to look at it. In writing, if there is a missing comma in a sentence, it typically does not cause an entire page of text to implode on itself.

    You have good error recovery heuristics in your brain. — Eric 

    And yes…I’ll look at monadic parsers…thanks for the info!

  37. Two observations.

    1) Back in the late 1970’s (at University) we were using a Pascal compiler on a Univax mainframe (Batch!). The compiler would actually make assumptions and attempt to continue to compile the program. This cut down on the number of iterations (which could take 24 hours) – the school did have a policy that any code which contained a “fix” of this nature was an automatic failure. Ironic, that this is unheard of in today’s environments.

    2) Sometimes a comma DOES matter. There was an old “joke” about a prisoner who was about to be put to death. Although I forget the exact syntax of the question, the reply was: “No don’t kill him”. The intent was “No, DON’T kill him”, but the listener took it as “No don’t, KILL him”. Bet THAT prisoner wished the comma was explicit!

    There was one of those on StackOverflow today. Someone wrote something like “this method does not return true as expected”. Is that “As we expected all along, this method does not return true”, or “this method does not return true, which is what we expected it to return”? It would have been more clear to write “this method returns false, as expected”, or “this method returns false, unexpectedly”. — Eric

  38. Abhijeet P says:

    Eric,

    The Job Search tool on the MSFT career site has a "Division" dropdown. I can’t identify the option for DevDiv jobs. My best guess is "Server&Tools Business". Does this seem right?

  39. Richard Berg says:

    Let me guess, the "aha, monad!" guy’s last name was Snover.

    @Abhijeet – yes, DevDiv is part of STB