Fabulous Adventures In Coding
Eric Lippert is a principal developer on the C# compiler team. Learn more about Eric.
Today I want your insights, opinions and advice.
In any large organization over time people are going to move around within that organization, or leave it for various reasons, and therefore sometimes you need to bring in fresh new people to fill the gaps left by the attrition. Over my sixteen years in the Developer Division at Microsoft I’ve seen numerous understaffed teams working on great technology; it is almost always a struggle for them to find, attract and hire talented developers.
My two questions for all you professional developers reading this are:
(1) When you read a job posting on a career site, what are the things you look for when deciding whether you’re interested or not? Are there “red flags” that immediately make you unlikely to follow up? Are there more subtle indicators that discourage you? What encourages you?
(2) What would you find particularly attractive or unattractive about an opportunity to work on a developer tools team? (at Microsoft or elsewhere, though I am particularly interested in “at Microsoft”.)
Note that I am particularly interested in your opinions on software developer positions; if you have insights on attracting people to program management, quality assurance or user education positions I’m happy to hear them but I’m more interested in developer position factors today.
I certainly know what my answers are to those two questions, but I already work here and I might be atypical. I’m interested in what your answers are. Please leave comments!
> I think it would be great to work on the developer tools team...although I think I have a strike against me because although I have a degree, it is not in Computer Science. I'm also not all that great at articulating my abilities in an interview situation or on my resume, and when it comes to programming, I'm heavily self-taught.
Again, I'm not sure what the requirements of Eric's team in particular are on this, but speaking more broadly, CS degree is not a must to work in DevDiv in general. I do not have any degree at all, CS or otherwise - purely self-taught. It was not a problem during the hiring interview (IIRC the only time this was even raised was a single question by HR representative during the personal interview; it was not mentioned at all during the technical interview), nor did I ever see any sort of "looking down" upon from coworkers who have degrees in the field towards the likes of myself. I also know a few other people here with degrees in entirely unrelated fields or none at all, and I have never heard them mention it as a cause of problems for career advancement within MS.
I can echo Pavel's experence...when I interviewed (And was hired) by Microsoft Consulting Services [MCS], the only mention of my degree status [i.e. NONE] was on one form. It was not a topic that was even mentioned during the Tech Interviews [grueling...started at 09:00 and ended about 21:00...with amost a dozen distinct sub-interviews, some highly technical, others focused on "soft skills" needed to be a successful cusomer facing consultant..]
The most important aspect of a job for me is the opportunities it provides for learning new skills and professional development. I do not want to become stuck in a situation where five years of experience really means one of year experience repeated five times.
I want the culture of the work environment to be collaborative, not cutthroat.
Schedule flexibility is important, too. I don't mind putting in the time needed to get the job done, but I prefer to control when that time is worked, allowing, of course, for metings with theteam and clients.
I do enjoy being paid well, as mercenary as that may sound.
Like many others, I detest postings that require experience with every technology that has been invented since 1969 and ridiculous requirements as in: "You built apps that access Oracle using middleware, but we want someone hwo access SQLServer using middleware."
Pavel/David...that's reassuring to hear. Maybe it depends on the company/HR department.
As far the job descriptions themselves...maybe that depends on who is actually writing them.
I suppose an equivalent ridiculous requirement list for an entry level accounting person would read something like: "must have 10 years experience processing debits/credits, 5-7 years experience with Peachtree, Quicken, Quickbooks, dBase, Paradox, Access, Excel, Word, AppleWorks, iWorks, Lotus 1-2-3. Advanced accounts receivable experience, accounts payable experience, billing experience, payroll skills. Must type 75 wpm, have 10-key experience, be able to answer phones, and be able to lift 50+ lbs. Must know how to use e-mail and a copier."*
Someday I'd like to see what HR departments actually use for queries when they look for resumes to try and fill positions like this.
* I do know actually know of one controller who cleaned his own company's toilets in order to save money. I'm not sure if he ever lists that on his resume, though. Unfortunately, the company eventually went bankrupt, but I think the two subjects are unrelated.
One of the things that really turns me OFF about any posting is a disproportionate emphasis on methodologies rather than actual talent. I'm not sure I'd want to work with some of the people here commenting that the company absolutely MUST use TDD or some other Agile spew. If the most interesting thing you can mention about yourself or your company is your adherence to TDD, MDD, DDD, ADD, QED, TLA, or whatever else, then you're probably boring as hell.
Microsoft has recently picked up a bit of rep for being management- and process-heavy. I think that a lot of developers (myself included) want to know that they'll have the freedom to get real meaningful work done and occasionally try new things, rather than follow a daily checklist.
Some of the other things I would notice:
• Personality. Does it sound like a fun place to work, or is it going to be status reports and death marches?
• Clarity. JoS mocked a Microsoft posting a while back that was full of jargon and management-speak. If I can't understand what's being advertised, I'm definitely not going to apply (not that I would anyway, but that's only because I'm violently unqualified to work on a compiler).
• Honesty. Some recruiters just try too hard to make the job sound more exciting than it is and the pretense is painfully obvious. I'm applying for programmer, not stunt pilot; put away the shovel.
• Practicality. This one's specific to the "developer tools" bit, and I know this is going to be contentious, but I don't think I'd want to work on projects like DSL or WWF that end up getting used by about seven people. Compare to working on the Visual Studio or WPF teams where millions of people care about what you're doing.
Take this all with a grain of salt, as I'm one of those types that tends to stay where I am, I don't spend a huge amount of time looking at job postings. Then again, maybe that's the point.
I resigned from DevDiv in 2006; I worked on the test team of a cool project with amazing people. When I started in 2000 I was excited about learning new things, doing things that made a difference. I was fresh out of college and wanted to use everything I had learned. It didn’t happen. 6 years later I found myself working for a BOSS who said "I need you doing THIS job... your career isn't important to me...” I left that team very disillusioned and have been contracting at Microsoft since that time.
I’m happy to now say that my first BOSS was a fluke. Since returning to Microsoft I have worked for very gifted LEADS. They are truly leaders of their teams. They have been very knowledgeable and maintain an open door policy towards their reports regardless of whether you are FTE or CSG. I ask nothing more than to be challenged every day and every project has something new to learn. Sometimes this means learning a new language or a new tool, sometimes I have to make the most of a tedious job.
What do I look for is a job? A job that makes me want to drive 60+ miles every day to do things that are mentally rewarding and occasionally get acknowledged for my work. Not much, just want to know that what I do helps the team and the project. My current position isn’t exactly that kind of position but when I accepted the position it was with the understanding that I could use any down time to create tools to make the process better. I look at every position as a way to build on my skills.
Wow. Have never seen this quantity of comments from so many different people here. Must've struck a nerve (besides my own, that is). :)
Anyway, it's such an open-ended question. However, having been involved in looking for work over the last year or so, some things have stood out.
As far as reading job listings go: a big warning flag is a job description that insists some large amount of very specific job experience is required. I see this in a lot of contexts, but most notably the concurrency group at Microsoft is a significant, recent example. The fact is, what an employer really should be looking for is a smart person. Dumb people can have lots of industry experience, and it doesn't necessarily mean a thing. On the other hand, if the job's really compelling, even if it takes 3-6 months for a new hire to start being really productive, that's a tiny fraction of the amount of time that smart person will spend working in the group, contributing smart-person stuff. And of course, if the group spends 3-6 months waiting for a person with that specific experience to show up, it's a wash anyway.
Or look at another way: if the group thinks so poorly of the level of interest the work they have to offer can generate, that they expect new hires to be gone before they've recouped the ramp-up time investment, that group can't really afford to be that picky anyway.
Fact is, even if I have the experience they're looking for, the last thing I want is to be working in a group where they would rather start with a smart person and bring them up to speed, than wait some indeterminate time for a person who has "the right experience" but who may or may not really be the best contributor to the group. Not only does that tell me that the group has their priorities mixed up, it's the kind of the thing that can significantly affect me as an employee in the group, as the team flounders waiting to fill their headcount.
As far as what would make a job attractive/unattractive to me, there are lots of things. But, having personal experience as to how Microsoft works, here are some points that come to mind:
• Signal-to-noise ratio. Being made to waste time in meetings, or dealing with bureaucratic overhead, rather than being able to spend my time coding, designing, mentoring, etc. – all the things that actually contribute _directly_ to an end goal – is annoying.
• Work environment. As an employee, knowing that the company is doing everything it can to make my experience more pleasurable, so that I really enjoy my job, is a big bonus. Unfortunately, I think Microsoft fails at this more often than it succeeds. It has retained the "free drinks" policy from long ago, but so much of the rest of the work environment is defined by belt-tightening and failure to manage the growth of the company, that there are plenty of sources of frustration.
• Review process/effective management. Coming up with a good review process is difficult, no doubt. But one where the outcome of the material aspects of the review is so heavily dependent on the quality or lack thereof of one's manager and that manager's ability to comprehend the value a report adds to a team, never mind represent their reports during the review process, is just awful. And act as though time spent by an employee on the review process when they know in advance that there's really nothing about their end of the process that affects the outcome of that cycle is downright demoralizing.
Also, having managers that understand that they have an obligation to their reports as much as their reports have an obligation to them. I have seen far too many managers who use their position to emphasize the authority they have over their reports, often adding useless workload to the employees, rather than doing true managerial things such as encouraging their team, praising them when they accomplish good things, and being proactive about filtering all the bureaucratic B.S., protecting their employees.
• Work/life balance. I remember almost two decades ago, Microsoft making a big deal out of how work and not-work needed to be in balance. And yet, nothing ever changed then, and still today I see employees who try to stick to a traditional 40 hour work week simply cannot make any progress in an environment with people who are willing to sacrifice their own personal lives in pursuit of promotion. But, employees will be healthier in a variety of ways, and that health will show in the health of the team, if they are encouraged to really balance their lives. Too often, employees who make that balance a priority have to resign themselves to stagnation in their work status, even when their greater wisdom and broad-mindedness could have significantly beneficial impacts on the work group.
• Smart people! It's hard to write about this without coming across as arrogant, but the fact is, I want to work in a group where the people are at least as smart as me, if not smarter. There's nothing more frustrating than trying to have a conversation with someone who just can't keep up, nor than working with someone who doesn't write good code. And there's nothing more invigorating than working with people who are constantly challenging oneself to be better, be smarter, and think creatively. When I started at Microsoft a couple of decades ago, smart people were a given. When I finally quit, it was in no small part due to the fact that I was finding it very difficult to surround myself with smart people.
Note that NONE of the above has anything to do with a developer tools team in particular. I find programming fascinating in all forms. I admit, developer tools carries a bit more fascination than perhaps other teams, because it's programming about programming (double the fun :) ), but what really is important to me is working on something that matters, with people who know it matters, who are smart enough to do really high quality work and who provide that challenging environment to ensure I stay on my toes and do the best I can.
If a team can continually provide that positive work environment and foster growth in all their employees, they can easily retain smart people, which of course leads to better retention of smart people. If they can't, then the question of whether a person is really all that interested in the specific work assignment – however important that question may be – is the least of their worries.
I would love to work for Microsoft for several reasons, primarily being the learning experience and passion for the technologies they build. (I develop with Microsoft tools, use windows, zune, xbox etc. You lost me with windows mobile but thats another thread...)
Anyway I doubt I would apply for a Microsoft position for a couple of reasons.
1) As a couple of people have mentioned I'm now an enterprise business app developer and have lost (or never had in the first place) the deep computer science knowledge that seems necessary to be successful at MS. I read blogs like Eric's and books to try and keep up, but honestly there is so much for me to learn to keep up with evolving .NET technology I don't have time to backtrack and become an expert on algorithm efficiency. In my mind (and i'm sure this isn't true but I'm also sure this is the the impression many people have) if you weren't top 10 in your class at MIT or spent every saturday night coding in your parents basement since you were 5, you're going to make an ass of yourself in the interview.
2) Microsoft is a very mature and large company. This is definitely not the type of place I would consider rapid career advancement to be very common, and there aren't going to be any dramatic stock increases anytime soon. So...great for you guys that got in on the ground floor (I hear bill gates is doing alright) but not so great for those of us looking for rapid advancement or to reap the benefits of growing with a newer company.
3) Doing enterprise development is (usually) pretty interesting and diverse regardless of what level you are at. I sometimes get the feeling if I got in on the ground floor at Microsoft, I'd be working on a button in visual studio for 3 years. (Probably also not true but the internet has done an excellent job perpetuating a stereotype of MS over the years.)
Any of the job posting, which , by the list of skills mentioned seem to be fit for only Jon skeet or Eric Lipert, I am deffinately not going to wast time over. And this is the case with every 2/3 out there. These sort of jobs posts actually attract those who take both, skills list and the employer non seriously.
A major turn-off for me is a feeling that the author(s) of a job ad themselves don't know what on Earth they want from a candidate. As an example, I once answered an ad that insisted on a potential candidate having "hands-on experience and understanding of 2-D graphics". When I asked them to elaborate a little (at the end of the day, all computer graphic is 2-D, because all commercially available screens are still mostly 2-D), they simply said, thank you very much, see you next time.
Another thing is a job that obviously boils down to being a maintenance drone, but the demands taking wing into something like the knowledge of UML, design patterns, OOP/OOD, SOA, Software Architecture, fluency in two or three languages, nuclear physics, interstellar navigation, and so on. That is a surest sign that the boss simply wants to boost his/her self-esteem by DOMINATING the people who may, God forbid, otherwise think they are smarter than he/she (like, "you're so smart, are you," and so on).
And finally, the need to relocate from where I am now (Tropical Northern Australia) to a place like Redmond, WA, with all the cold, snow, rat race, traffic jams, and the rest of it - no way, not for any money (not that I expect to be invited, obviously) :-)
I look for three things:
* The name of the organization. Sure working for Microsoft is great but many use this as a starting point for launching their career. I don't think many of the developers out there are looking for a long running career in a massive organization.
* A short description of the responsabilities.
* A short description of the benefits.
Quibble: How do you know that the people reading this (and answering here) are the ones you are trying to attract? If you don't know, this will just get you from one unknown to the next.
I guess MS will allways have a quite high number of people that are filtered on the initial screen, being a very known company, having good compensations and strong market position. So you just do attract a lot of people even if they do not match your criteria.
So be open on what you really are looking for. Most of the smart people you need will not be intimidated by the requirements that you have. Additionally try to cut away the "usual bullshit" in job postings (e.g. be jounger than 25 have 15 years of experiance and at least 2 different degrees and are willing to work for a pittance ;-)
Sorry for the double post, but the server gave out an error "ooops"
Considering the topic, I thought this was interesting: http://money.cnn.com/magazines/fortune/mostadmired/2010/full_list/
According to (someone at) money.cnn.com, Apple, Google, and Amazon are all "more admired" than MS.