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.