Programming platform experience is like knowing your way around the kitchen. Where are the knives, what size plates do we have, and what spices are available. It’s very useful for getting things done without having to search high and low for every little thing. But it’s also an asset with a cut-off point of diminished returns. Once you have a reasonably good idea where things are, it’s no longer the bottleneck in your culinary performance.
Like chefs, like programmers. Peopleware quotes a study that six months seemed to be the cut-off point for programmers. Once they had six months under their belt, the platform knowledge was no longer the bottleneck in their abilities.
That sounds about right to me. That’s how I felt it going to Ruby. In the beginning, I would constantly be looking things up. Trying to internalize the idioms and not merely convert previous patterns to new syntax. But after about six months of exposure, I knew where things were. What tools to reach for. Yes, I kept on learning (and still do), but the difference between now and then is not all that dramatic.
Which leads me to my point: Requiring X years of experience on platform Y in your job posting is, well, ignorant. As long as applicants have 6 months to a year of experience, consider it a moot point for comparison. Focus on other things instead that’ll make much more of a difference. Platform experience is merely a baseline, not a differentiator of real importance.
In turn that means you as an applicant can use requirements like “3-5 years doing this technology” as a gauge of how clued-in the company hiring is. The higher their requirements for years of service in a given technology, the more likely that they’re looking for all the wrong things in their applicants, and thus likely that the rest of the team will be stooges picked for the wrong reasons.
David Barrett
on 05 Feb 08What’s even better is when companies request more years in experience than the platform has existed for. I remember a year or two after .NET was released, seeing an ad from a company looking for 3-5 years of experience in C#.
DHH
on 05 Feb 08Ha, yes. I’ve seen the same thing with Rails. People requesting 3 years of experience when it had been out for 2.
nickd
on 05 Feb 08I had a lot of knowledge in a field (UI design), but every single job I applied for ended up being fruitless – except one, which was extremely suffocating and denigrating and didn’t use me for my stated abilities. I quit that job in just over a year.
And why? Largely because every single one of them, including many posted on your own job board, most of which were entry level positions(!), required a minimum 2-4 years of experience.
I was just out of graduate school. I had a master’s degree. Presumably this meant I knew enough about my field, and had enough intelligence to learn the rest without major issue on the job. This was something that was simply not parsed by any firm I applied to until recently. Every firm I interviewed with openly complimented me for being articulate and principled, but I was turned away for similar candidates that had more experience (as three places directly stated), because 2+ years’ experience was inflexibly “required” in the job descriptions.
Personal bias aside, it’s in turns amusing and mortifying to think that those firms may not have hired the right talent because they established a highly arbitrary metric to separate out the chaff. Regardless, it’s depressing to think that one’s amount of experience, especially in a field this young, is a decontextualized signifier where higher is necessarily better.
some guy
on 05 Feb 08Some times I disagree with what you say, DHH, but this should be shouted from the rooftops in every town, village and hamlet.
Giving companies asking for “3-5 years of J2EE/JSP/servlets/HTML” (like someone who’s been doing JSP for 3 years doesn’t know what HTML is) the benefit of the doubt, they’re looking for day coders who just look at programming as a way to pay the bills. A lot of these people only really know one stack well, so asking for 3 years of X is like asking for someone who’s a moderately competent programmer who can quickly start adding value while working with X.
It’s not clear in these job openings whether it’s just HR stupidity or the fail also extends to the technology department. By way of comparison, military recruiting in the US is extremely messed up but overall the military is an honorable, important institution.
yes
on 05 Feb 08Best post on SvN in a long time.
Ben
on 05 Feb 08I think the YOE in a given technology question is somewhat misleading. More often, companies actually want somebody at a particular point on the path to mastery in their field (for instance, web application development), which generally seems to take about 10 years.
Obviously, someone who’s spent the bulk of that journey with a given language or platform will be better (even if it’s only quantitatively, and not qualitatively) than someone who has been using multiple languages or platforms, but given the six-month level with the technology of interest I think the overall experience in the field is more important.
Joe Van Dyk
on 05 Feb 08I dunno, in some environments, with some languages, it takes a long freaking time to master just the language, even if you happen to know a lot about software dev in general.
Think C++ with real-time software. Or 3D graphics. Or operating systems.
nate
on 05 Feb 08While experience on a particular platform is largely irrelevant after a point, what I do believe is important is programming experience in general, because in that department, there’s always room to grow. No matter how many years you’ve been programming, you can still return to a piece of code you wrote a year or two ago and find all kinds of things to refactor.
DHH
on 05 Feb 08Joe, the areas you’re mentioning are more domain knowledge than platform knowledge. Which seems like a more reasonable thing to specify. Just like a guy that has deep domain knowledge in medical records is probably a much better fit for a project in that domain than a guy that knows the in/outs of the framework being used to build that application.
So domain knowledge > platform knowledge.
nate, problem with that is it’s not a comparable entity. People do not grow evenly. So comparing the value of experience from one guy with 2 years to another with 5 is not something that can be done by looking at the numbers.
Terry Sutton
on 05 Feb 08Depends on whether or not they’re coming at it cold. I started ultra-cold in the graphic design/light web design (html/css/light php) about 3-4 years ago. Its certainly only been one year ago since I would consider myself to be moderately capable.
If I’m starting from scratch on something it will take a good few years, but if I’m moving to something, then 6 months should be a good round number. If I were moving from InDesign to Quark, for example. Not that I’d EVER do that, but I think if I had to, it would take 4-6 months to properly adjust.
Jeff
on 05 Feb 08I agree that there’s a point where you’ve “arrived” to a certain degree, but as the platform evolves, there’s a good chance you’ve got new stuff to absorb.
For example, in the recent updates around .NET, we have all kinds of new stuff in C# like lambda expressions and LINQ. In ASP.NET we have the AJAX framework, which has been out for a year, but if you’re not much of a client-side coder and need to know it, it’s something new to feel out.
If I ever felt I arrived completely, it’d be followed by much boredom. :)
But I will agree that arbitrary years of experience is somewhat silly. Everyone learns at different rates. What matters less is education, frankly. I’m tired of interviewing people with graduate degrees who can’t code their way out of a box.
Shane
on 05 Feb 08Another gauge I found helpful as an applicant looking for Java roles was when the criteria was “Java Certification required” ... like years of service in a technology, if this was a high requirement it tended to suggest a similar environment and culture.
John "Z-Bo" Zabroski
on 05 Feb 08“Only hire programming superstars.”
Peter Cooper
on 05 Feb 08Moving between technologies is certainly possible within months, even to the point of extreme proficiency. There are a lot of Rails developers out there with only a few months under their belt who are surprisingly good! This is demonstrated by the amount of great plugins and ancillary technologies I see in our field coming from new Ruby and Rails developers.
One thing that’s not covered, however, is that the length of experience as a developer overall (that is, having the mindset of a developer) is still extremely important. Someone starting cold with no programming experience is still going to suck after six months on a new technology compared to a seasoned developer. While the “soft” skills in learning certain languages and frameworks are certainly easy to shuffle around, actual programming savvy takes many years to accumulate.
Tom Mollerus
on 05 Feb 08I have to agree with Joe and disagree with the post. Sure, someone can learn the “science”, the specific skills for a job in a short period of time. But learning the “art” of really doing that job well, of interacting with peers and clients, of managing a project, of having a 30,000-foot view—those come from experience.
So for a developer, I’d expect that anyone could learn how to develop in any language after a year. They’d know the syntax. But for their code to be efficient, well-organized, and written quickly? For that I’d rather bet on experience.
Jeremiah
on 05 Feb 08I might have to disagree on this one.
3 years of experience != 3 years of studying a language.
3 years of experience implies that the person has developed products (maybe more than one), has seen the product life cycle take place in the environment. Understands more than one facet of software engineering.
In one to two years, a baby programmer can not understand product development, updating, automation, reporting, error diagnostics, code refactoring and other standard development tasks.
Each of those tasks are different for every environment. AIX C++ programmers can not pick up a book for Borland C++, simply learn the compiler specific language and KNOW how to do all of those tasks.
I will agree that it shouldn’t take more than six months to learn a language or environment. Unfortunately, I havn’t seen a person learn how to do all of those in six months.
Besides, who wants a simple code monkey. Wouldn’t good employers want programmers who can do more than type functioning code?
Joshua Volz
on 05 Feb 08It seems to me that this is only really an issue with larger (>20 people?) corporate type positions. I don’t see startups in the early stages posting this sort of ad; they are too busy doing something. If they are taking the time to hire someone they want someone who can help them, they value X years of experience less than whether you will actually help them achieve their goals. I would also guess that anyone who starts a startup writing to be a better judge of coding ability than any HR person anywhere.
Also it occurs to me that this could just be an HR trick to hold down salaries for programmers. The turnover rate in technology is extremely high - new stuff comes out daily almost - so they set up a false value system that requires years of experience that aren’t really possible for higher paying positions. In this way they can continually recycle the same people discounting their existing experience in other frameworks or technologies.
For example, if you were doing C++ to make Windows applications then C# Windows applications are actually easier, but since you don’t have experience doing it they can offer a lower salary. They justify this by saying “but he only has X years experience in C#” even though we all know that if you can write a C++ program then C# is well within your abilities.
I would argue the same is true for the progression of web frameworks. If you can write well designed CGI scripts in C or Perl, then Rails or whatever isn’t going to take you that long to learn. Your experience making web applications makes it easy for you to learn the new technology, but companies still get a discount because you don’t have “enough” experience in that technology.
I’m sure I sound like a conspiracy theorist here and I’m not even saying that companies are doing this on purpose, or in some organized fashion, it’s just that they are trying to apply a model to hiring programmers that works for other fields but fails miserably with assessing programming ability.
Joe Van Dyk
on 05 Feb 08DHH, I guess if you consider C++ to be domain knowledge, then ok. :-) To write good, efficient, and safe C++, in my experience, takes a long time to master.
Steve
on 05 Feb 08I agree with your article, David. I don’t think it’s just heaping piles of stupid from the companies driving these type of silly requirements, though. Having been on the other side at a big company, the requirements for the job are crafted in a way so that no person could meet all of them (at least not meet all of them and be interested in the job). This is to protect the company from discrimination charges. If someone interviews that meets all of the requirements and you don’t hire him or her, you could be found liable.
I have never met anyone that met all the posted requirements of any job they ever landed.
DHH
on 05 Feb 08I agree fully that someone starting completely cold with no programming knowledge what so ever is unlikely to be running smooth after six months.
This was more specifically about requiring X years of experience in a very narrow piece of technology.
I do agree that having a few years of general experience in the field is a good deal in most cases. Although, I’d say that even that is overrated at times. But at least more reasonable a requirement.
Joe
on 05 Feb 08Your post reminds me of the old joke about a Boeing resumé.
If it says “12 years experience” it means “The same year 12 times.”
Faisal N. Jawdat
on 05 Feb 08Often these reqs are written by HR, or to fulfill HR’s notions of what hiring looks like.
Several years ago I had a req that consisted of three lines (2 years experience in Perl web development, familiarity with Linux or UNIX operating sysytems, and one other I can’t remember). HR came back with a version adding piles of text (“ability to juggle multiple tasks in a fast paced environment”—apparently to contrast this job with the ones that require highly linear thinkers in a slow and unimaginative environment), a request for additional requirements, and then a request to know which of the requirements were more or less important. It took a 90 minute meeting to get across the idea that the requirements were actually required, and we were not going to add additional “requirements” just to make the posting longer.
This sort of nonsense is one of the reasons why job hunts go more smoothly when you know someone who knows a hiring manager.
Enki Stardust
on 05 Feb 08More important than a year of experience with a platform is experience with multiple platforms. If you have had 6+ months of experience with, say, 10 widely varying languages (say, lisp, c, smalltalk, self, prolog, tcl, java, brainfuck, befunge, and malboge), then even if you have no experience with the language in question, you know how to learn languages, and you can pick the new one up very quickly. The same is true of platforms. As long as someone knows how to learn, they don’t have to know the material before starting—if they can read manpages and pick stuff up at a greater-than-subhuman rate, then they should be an asset, not a liability.
Eric Beland
on 05 Feb 08I agree, but there is a caveat. From outsourcing a few things I didn’t want to build myself, I’ve noticed that the single biggest predictor of speed and success is that someone has done item X before at least 1, but preferably several times. If you want a Firefox extension, hire a guy who has built 3 different Firefox extensions. It’s not that the other guys can’t do it, it’s that you want to bet on the statistically most likely horse to win the race. That said, I develop too, and my favorite thing is being paid to learn something new when I’m the developer.
Charles Miller
on 05 Feb 08There’s a significant gap between “no longer a bottleneck”, and expertise.
Martial
on 05 Feb 08I’m not in the tech sector and I see stupid weird job descriptions too. I was recently sent a job description (“forward to your network”) where the included requirements meant that nobody in the world qualified: the years of necessary experience doing mutually exclusive things were greater than a human lifespan. I’m not kidding.
I sent a note back pointing this out. I received an apology – with a request that I still send the job description to “anybody who might be interested”. I sent it on to some grad students and some young people just entering the field who I know could do the listed job well with an instruction to ignore the “qualifications” and an offer of a recommendation if any of them applied (in my field, a recommendation from me would help).
Charles Miller
on 05 Feb 08@Martial: That sort of thing’s been happening forever, usually as a result of miscommunication between employers and recruiters. If you ask a recruiter to look for a “senior developer for a Scala project”, they’ll almost automatically translate that to “five years Scala experience” in the job ad.
Fanboy
on 05 Feb 08I have 10+ years of merb + git + thin + jquery …. can I be in caboose now?
John
on 05 Feb 08Years of experience on a resume can be misleading too. I have been doing web design since 1997. My resume doesn’t show that though because most of the sites I built in the late nineties, early 2000s are no longer around. For the last 9 years I have worked for a major corporation as a web designer, and database admin with a jacked up title. I am constantly being asked by IT for help, but my job description doesn’t say that.
If I mail out my resume, it doesn’t look like I can program in 6 different languages (not counting client side languages if you consider that programming), or that I know sql better than I know my wife. Sure, I can add it as “Qualifications”, or I could list “Professional Experience” for a bunch of sites that no longer exist.
Most potential employers don’t look at side business work, or contract work as real experience, they don’t see sites that no longer exist as real experience. They only see my current jobs description, and the job before thats description.
Also, I like the RoR Developer job I saw posted recently that wanted 5 to 10 years experience in RoR development.
Ian Clarke
on 06 Feb 08I think one issue here is how people define “experience”. I would agree with you that 6 months using a platform as the primary tool in full-time employment is indeed sufficient to become familiar with it.
Unfortunately, many, perhaps most people are rather more liberal about how they define “experience”, perhaps counting months when they really only toyed with a platform occasionally as months of experience with the platform.
I think the solution is to specify at least 6 months working with the platform as the primary tool in full time employment.
Shanti Braford
on 06 Feb 08There are so few companies or hiring managers who will actually grok what you just wrote about, that it’d be hard to disqualify all of them based on wanting ‘X years of experience’ =)
But you’re spot on. Though the 6 months may vary from platform to platform, person to person. For superstars, sure. For the rest of us, maybe it’s 1 year, maybe 2 years.
Think J2EE for example – I don’t think even a rockstar knows his way fully around all the ins & outs, containers, servlets, JSPs, Struts & whatnots after 6 months.
JH
on 06 Feb 08I’d say it depends.
Ruby, PHP, 6-12 months experience is all you need.
For low-level programming in C++ or writing production quality Windows application you need at the very least 2-3 years experience to deal with the complex issues. Sure you can look at the APIs, read the documentation, and know how it should work but figuring out why it doesn’t, stepping through assembler, examining registers, knowing how to really debug takes an experienced programmer. Without experience people run out of ideas, don’t know where to start, or as we’ve most often found are simply out of their depth. We need to separate people who claim to be able to develop in C+, from those who simply translate what they’ve learn in Visual Basic to C+ syntax. It’s a world apart (look at the quality of code on CodeProject for example—appalling).
If you’re working in Ruby or PHP (or any web development) you’ll never need this kind of experience, or depth of knowledge. To make such a wide-ranging statement from where you stand, is, I think a little naive.
Ryan Allen
on 06 Feb 083 years Rails experience? DHH I think you’re the only one qualified for that job ;)
carlivar
on 06 Feb 08Hire smart people. That’s pretty much the only thing that matters.
Of course the trick is figuring out which people are smart.
Miklos Hollender
on 06 Feb 08David,
Six months of WHAT? Six months of busting your ass at a startup 70 hours a week, or six months of supporting a legacy app, idling half of the day, taking phone calls 2 hours a day and 2 hours of chasing some minor bugs? What about six months of contributing to an Open Source project 3-4 hours every weekend? And so on.
Calendar time of experience is totally irrelevant in every sense.
cecil
on 06 Feb 08I also have to disagree with that. When you hire someone requiring X years experience, you’re not only hiring someone developing code. You’re hiring a professionnal with enough experience to be reliable and knowing a few things about the constraints of running software on a productive environment.
No disrespect here but I’ve been in the industry for about 20 years and at least half of the developers I’ve bumped into were more interested in writing funky lines of code, than fitting nicely into a team to contribute in developing an industrial and profitable product. i.e. a product easy to maintain, thoroughly tested, easily deployable and exploitable and, incidentally, a product that meets business requirements.
And it does take a hell of a lot more than 6 months just to be able to understand the difference.
Gavin Laking
on 06 Feb 08After months of putting it off, I’ve finally ordered Peopleware.
Tom G
on 06 Feb 08I like to think of the measurement of skillsets as having three dimensions: speed, scope and depth.
A resume is a useful screening tool for employers to focus time spent on potentially qualified applicants.
Looking at the number of years experience is a crude way of measuring depth.
Bala Paranj
on 06 Feb 08Just curious, how many design patterns is used in the Rails source code?
Nathan Youngman
on 06 Feb 08@Bala serious amounts of influence from Martin Fowler’s design patterns in Rails (Supervising Controller Pattern: his take on “MVC”, as well as the Active Record pattern itself). ~ After a year working with Rails, I still find myself referring to the API reference quite often. And with Rails 2.0 out now, I feel like I’ll never keep up with it all.
I’d have to agree with Miklos, 6 months just using a platform at work is quite different from 6 months being completely engrossed and contributing to OSS on the platform.
EddieN
on 07 Feb 08Microsoft Vista was launched on January 30, 2007. Two days later, I swear to God, I saw a job posting on Dice.com asking for someone with “2 years of experience with Microsoft Vista”. My reaction? Let’s just say it was a good thing I wasn’t holding any sharp objects at the time.
When the HR department decides to hire via technobabble checklist instead of by asking the guys in the trenches what they need, this is what you get. IMO, any tech recruiter who allows a job posting like that to be released should be repeatedly pimp-slapped until they repent of their evil ways. :)
James Justin Harrell
on 08 Feb 08Wow, great point that programmers can use these requirements to help find a better employer. It’s very simple, yet I’ve never thought of it before. I’ll definitely have to consider this next time I’m looking for work.
cm
on 09 Feb 08Based on limited insight into actual interview processes (and how and for what apparent reasons they were aborted) it looks like laundry lists of “desired/plus” skills or even requirements that can be magically waived are used to discriminate, i.e. make up reasons to reject suitable candidates. Sometimes it appears there is no real desire/need to fill the position but only show recruitment activity.
Maybe they are also an expression of an “arms race” between resume lying/exaggeration and raised filtering bars.
Fred
on 11 Feb 08Some platforms take longer than 6 months. If you’re educated in Java apps in college, then embedded C and assembler is going to take more than 6 months to master. You can be productive in 6 months but you just aren’t nearly done.
For someone with an embedded/C/Assembler/Unix/Bash background, Ruby and Rails can easily take more than 6 months to master, because it also involves learning about SQL, javascript, CSS, HTTP and HTML. And maybe Linux servers. But if you’ve been doing HTML/PHP/MySQL for a few years, then there is simply less to learn.
If you’re learning the Windows API, C++ and MFC all together as a platform, it will take more than 6 months to master. Call it 2 platforms, but it could take more than a year.
There is work and there is mastery. Not the same thing.
And none of these areas involve “Domain knowledge”. People do, though, need to spend some of their time at a new company, learning the business and the technology. And when they’re doing that, they aren’t learning the platform or writing great code. Think about what you need to learn when you’re hired on at Google, Microsoft, Intel, Oracle, 37signals, or Cisco. Each company has their own technology base to learn, the domain knowledge. And sometimes their own platform.
Fred
on 11 Feb 08But yeah, asking for 5 years Oracle is nuts. Asking for 2 or 3 years in databases and SQL is often reasonable. Asking for 5 years in embedded systems is not nuts, but merely being demanding.
Also, asking for “Any degree” is unbelievably lame. I’ve known musicians and carpenters who became really good programmers. And Bill Gates coded okay with no college degree. A CS/SE degree is very useful, though. But even then it can be made up by taking night courses and years of experience. Ah, you probably know all that.
If you ever get really bored, put out an ad for ‘10 years of experience in Rails’ and see who shows up.
This discussion is closed.