5 reasons you don't really want a jack-of-all-trades developer
I've spent the last couple of weeks trolling Craigslist and have been shocked at the number of ads I've found that seem to be looking for an entire engineering team rolled up into a single person. Descriptions like this aren't at all uncommon:
Candidates must have 5 years experience defining and developing data driven web sites and have solid experience with ASP.NET, HTML, XML, JavaScript, CSS, Flash, SQL, and optimizing graphics for web use. The candidate must also have project management skills and be able to balance multiple, dynamic, and sometimes conflicting priorities. This position is an integral part of executing our web strategy and must have excellent interpersonal and communication skills.Really. Now I don't know about you, but if I were building a house, I wouldn't want an architect doing the work of a carpenter, or the foundation guy doing the work of an electrician. But ads like the one above are suggesting that a single person can actually do all of these things, and the simple fact is that these are fundamentally different skills. The foundation guy may build a solid base, but put him in charge of wiring the house and the whole thing could, well, burn down. When it comes to staffing a web project or product, the principle isn't all that different -- nor is the consequence. I've thought a lot about this these last couple of weeks, and I don't think this post is sour grapes about the fact that I don't have the top-to-bottom, front-to-back web development skills that this ad and others seem to be asking for. I'm proud and confident of the abilities I've assembled when it comes to front-end development, and I have a rock-solid understanding of what makes websites tick. The thing is, the more you know, the more you find out you don't know. A year ago I'd have told you I could write PHP/MySQL applications, and do the front-end too; now that I've seen what it means to be truly skilled at the back-end side of things, I realize the most accurate thing I can say is that I understand PHP applications and how they relate to my front-end development efforts. To say that I can write them myself is to diminish the good work that truly skilled PHP/MySQL developers are doing, just as I get a little bent when a back-end developer thinks they can do my job. So to all of those companies who are writing ads seeking one magical person to fill all of their needs, I offer a few caveats before you post your next Craigslist ad:
- If you're seeking a single person with all of these skills, make sure you have the technical expertise to determine whether a person's skills match their resume. Outsource a tech interview if you need to. Any developer can tell horror stories about inept predecessors, but when a front-end developer like myself can read PHP and think it's appalling, that tells me someone didn't do a very good job of vetting and got stuck with a programmer who couldn't deliver on his stated skills.
- A single source for all of these skills is a single point of failure on multiple fronts. Think long and hard about what it will mean to your project if the person you hire falls short in some aspect(s), and about the mistakes that will have to be cleaned up when you get around to hiring specialized people. I have spent countless days cleaning up after back-end developers who didn't understand the nuances and power of CSS, or the difference between a div, a paragraph, a list item, and a span. Really.
- Writing efficient SQL is different from efficiently producing web-optimized graphics. Administering a server is different from troubleshooting cross-browser issues. Trust me. All are integral to the performance and growth of your site, and so you're right to want them all -- just not from the same person. Expecting quality results in every area from the same person goes back to the foundation guy doing the wiring. You're playing with fire.
- Asking for a laundry list of skills may end up deterring the candidates who will be best able to fill your actual need. Be precise in your ad: about the position's title and description, about the level of skill you're expecting in the various areas, about what's nice to have and what's imperative. If you're looking to fill more than one position, write more than one ad; if you don't know exactly what you want, try harder to figure it out before you click the publish button.
- If you really do think you want one person to do the task of an entire engineering team, prepare yourself to get someone who is OK at a bunch of things and not particularly good at any of them. Again: the more you know, the more you find out you don't know. I regularly team with a talented back-end developer who knows better than to try to do my job, and I know better than to try to do his. Anyone who represents themselves as being a master of front-to-back web development may very well have no idea just how much they don't know, and could end up imperiling your product or project -- front to back -- as a result.
39 comments
"prepare yourself to get someone who is OK at a bunch of things and not particularly good at any of them" -- This is the crux of the whole problem right now. SMB in particular are satisfied with hiring someone who "JUST" gets the job done without thinking too much about the spaghetti code written to build the app. Ken Schwaber explains this clearly as Scrum Burn Down [27 min]
But on the bright side, there are few employers out there looking for specialized skill sets (i.e Drupal, Zend, Plone etc). So all is not lost. There is still some hope :)
sometimes there is just a lack of work, and in these cases employers want to know if they can move you off to do some other type of work at these times.
also, alot of the time, all of the mentioned skills are required, even if most are not requiring great expertise.
you better get used to it, management are very scabby with developers.
Here in Italy it is the norm for the job postings; they search those developer because they fit in their (terrible) way of developing projects.
I am still dreaming a job in which I don't have to write a single line of html (I'm a backend guy) and I have a great html developer (which I'm not) on my side; I think we could do wonders together.
Recruiters are not looking for a carpenter or an plumber, they really look for
Engineers who are capable of managing the entire project. who can guide the project till the success. ( as a civil engineer guides till the entire house is finished )
The Engineers won’t do all the stuff themselves. but they have to interact with the other person ( speak in their knowledge ) to accomplish the task effectively.
Thats why they are expected to have basic skills in all the area's.and Thats the reason we are called Computer Engineers and not Computer workers.
Don't get me wrong, there's no programming-god who knows all about everything, but many people who know fair enough about the whole environment, and not just about one thing.
:)
It is important for me when building a team that everyone have some level of knowledge of all the technologies and moving parts it takes for a successful project. You should understand not only development but also testing, deployment, maintenance so that you design an overall system that is the most optimized to get out the door. You always must make compromises and it is important for them to be made in the correct place with agreement from the entire team.
To use your analogy in home building which I have done a lot in the past. I would prefer a foundation guy that understands a bit about plumbing and electrical in case we have to move something or modify the foundation to support changes. Or if something was missing in the original design and they can point out the issue that the other party may have missed. Software like home building is a complex process and as humans we are all far from perfect so the more eyes on the project the better.
Most of the time if you read the requirements for the job they are looking for key skills and some other outlying skills. That is how they select one candidate over the other if the major skill-sets are equal. It sounds like with your background you truly do have a wide breath of skills and a knowledge of the entire project life-cycle. Just make sure your resume reflects that and not that you are just an expert in XYZ skill without any knowledge of the other outlying skills.
Best of luck and thanks for a great post.
Let's look at the skills used in an average day in the life of a J2EE developer.
- Java, is the source we write our programs in
- XML configuration files
- SQL to talk to a database
- HTML/Javascript, gotta edit pages to
- Bash/Perl, or some other scripting to parse source, logs, whatever.
- Ant or Maven, its the build tool, got to know that to make software
- CVS or Subversion, version control is important for all devs
On top of that, if you work with native code (JNI) then add C/C++ to the mix.
Of course one's specialty will be in a given area but, every member of the team should be able to do all of these. There simply isn't time to have a developer sitting around waiting for the *SQL* guy to come in and do his piece. We've all got to work together.
A good developer in my opinion will have a strong focus on one particular skill, and have a good understanding of the supporting technologies around it, to the point of being able to bring the majority of the project together themselves, at speed with room for tidy up and maintenance from respective experts around the office.
I also consider myself to be a "generalist/ jack of many IT trades & competent with most of them" developer. I believe I have had more success recently by calling myself an "Integrator/ Developer". (I hope I'm not deluding myself). A number of the readers above mentioned the jack of all trades description. Maybe they too will have more success with hiring managers by calling themselves Integrators. My explanation (to the hiring manager) is that I can get multiple diverse technologies to work together, and I can also build full solutions. Cheers!
On the subject of not knowing how much we don't know, I recently filled in an application form for a specialist IT job agency where they asked me to rate my key IT skills out of ten. How can I do that? There's no frame of reference. Who am I comparing with? Who has 10/10 in any subject anyway? I don't know how much I don't know on any given subject, so how can I rate myself? I gave myself a five in all subjects and added a note to suggest what a ridiculous question it was. It just shows the lack of understanding not just by the employers, but by the supposed IT agencies too.
Often SMB's and large businesses still deal with a "web developer" as if they were the hired help, but they'd actually take a "movie director" seriously. I think there's a place for somebody who really understands web sites, how they interact with other web sites, and how people interact with them. Perhaps that person should be the team leader.
As far as what you choose to learn: I do think it's valuable for IT professionals to have a broad understanding of their field, if only so they can have intelligent conversations about the whole of a project. But when it's time to actually do the project, I maintain that a single person with broad understanding isn't enough.
Say, the interviewer asking, from 1 to 10, how do you rate yourself good in Java. You can say,
"If 10 is good enough to debug a language implementation in JVM, 1 is beginner, 5 is understanding most design patterns and java libraries, then I rate myself at 6"
That would certainly give the interviwer a sense on how good you are, and also how high the bar you set.
With the exception of Flash, anyone who knows ASP.NET should really know all of the others. They are connected technologies that pretty much *have* to be used together to accomplish anything useful. If you are an ASP programmer that doesn't know HTML, JS, SQL, etc then you are clearly not particularly dedicated or experienced in the area...
First of all, there are people that are jack of all trades, and better at any individual thing than a lot of specialists. They are rare but out there.
Secondly, it's hard to work in isolation. You end up getting exposed to all the code, and sometimes you have to get your hands dirty with it. Imagine hiring a backend dev who told you they have never looked at a single line of javascript and vehemently refuse to do so because they'd rather be good at one thing as opposed to being a jack of all trades.
Finally, you may not want an architect hammering nails, but wouldn't you feel better if you found out your architect was also a hobbyist craftsman who paid for school by doing construction work in the summers?
The problem with specializing in ONE technology is that those technologies quickly go out of date and you are left with a skill that no one else uses... Then, you are replaced. I saw so many developers loose their jobs because they only programmed in RPG or COBOL and that "web development stuff is just a fad."
We have begun to rely on "frameworks" that pop up and then are replaced by other "frameworks" and if you haven't developed in the "framework of the hour", people don't want to hire you.
After 35+ years of development, I have become tired of trying to keep ahead of the curve and living my nights like I was in Graduate School, studying and practicing new technologies. However, I can still truly walk into a project, read the book (or now Online documentation of frameworks) over the week end and be productive and innovative. That is because I am a Jack of All Trades.
I can manage a project.... any type of project... I can develop software.... almost any type of software... I can develop and integrate different DB's and different OS's (from Windoz to Apple to OS/400 to Linux)...
But I have become tired of narrow minded managers who want you to have a narrow, specific skill of the week before they will hire you. Design patterns, and concepts are transferable.... If the person you are hiring or is doing the hiring can't understand that.... then they aren't worth the time to talk to. Wake up and get a dose of reality.
Besides, I'm making more money investing the money I have made as a Jack of All Trades developer than I did as a developer. (Another Jack of All Trades skill..... )
Most jobs that I have taken are ones where it helps to know the whole stack. The teams I've been on or built tend to have generalists on them but usually each person on the team has more expertise in one particular areas. As an example, mine is system level work including persistence and messaging systems. Sometimes there is overlap of expertise on the team and sometimes there is not. When you're starting from scratch unless there is a real reason that you need bonafide experts you want people that have skills in all areas because you can't afford (or need) an expert in every layer of your app. The simple truth is you won't have enough DB work for a DB expert in the initial startup phase of most companies or teams(just as an example). And trying to have consultants/contractors on retainer for each of those areas for when you need them is a pain. There are always exceptions of course but I don't think the trend of seeing more generalists type job posts is a bad thing. It's just different. I find it fun because I like knowing how the whole stack works and it's a hedge in case there isn't much demand for a given expertise I might have.
To be fair, there are definitely companies that want the moon and don't want to pay for it...or they want an expert in everything which is unreasonable. Those will normally show during the interview or phone screen.
Just a disclaimer: I am now a development manager but I am up front that I want generalists for the reasons I cited above. I just don't have enough DB or front-end specific work to keep someone busy all the time. If they can't be functional across the board then it doesn't do me a lot of good. That will change a little bit over time as multiple teams get built out but I still like developers that know the whole stack.
but, What's the problem with this ads?. This world its for the best,so if you don't have that skills, search another job or another ads.
If you don't find anything that fits with your capabilities, maybe you did a mistake chosing your career and you have to study rather than complain.
Just open your eyes ;).
I'd much rather see an ad that said they were looking for a front-end developer with solid knowledge of HTML, CSS, Javascript and experience in creating web-optimized graphics, and then say that candidates with ASP.NET and Flash experience would receive special consideration. With the ad as it is, it's not even clear to me what the actual job would be.
You are just not skilled enough yet, its ok. What do you think is "engineers team" in fact is just basic knowledge.
Your argumentation is newbie's nonsense.
I can vouch that there are more people like me out there, like my original mentor. So it is possible to find one, but still quite difficult as we tend to be a rather rare and small subcommunity.
However, there is even a potential problem when you do find such a developer, and it's related to your single-point-of-failure comment. Imagine your guy comes in, does a wonderful job, and then suddenly leaves. Leaving behind an amazing piece of source code that will take other developers MONTHS to study before they're actually ready to continue Jacko's 'marvelous' work on the same level of productivity.
So, when you do find such a developer, make him a project manager, in charge of a team. If he truly is what we're talking about, he will make sure other team members can continue with his work. Because he sure as hell doesn't want to be around your company forever.
Most of the job ads these days are just filled with all the buzz words that sometimes it is difficult to win a chance for an interview unless your skills fit their advertised requirements. It is true that most SMBs would like to hire a Jack-Of-All-Trade kind of guy probably because they offer business software solutions that would require a broader range of IT skills. On a business perspective it would be an advantage for SMBs to have a plethora of IT skills because it would increase their chances in working on a project from a client. Getting the project is just first step, let's just hope that the hiring manager or the project manager have considered all the risk involved in hiring a Jack-Of-All-Trade, but then again your article pointed that out.
One experience I had when I was interviewed was, I was asked if I know Java, and so I replied "Yes, it is written in my resume that I have worked with various Java projects and I have SCJP to support the credibility of my java skill." And the next question was "do you know Object Oriented programming?" It made me pause for a few seconds..
When an employer interviews me, I tend to say that I know only Java (coz I already mastered this in-demand programmer's tool), even though I also do award-winning web designing. The result is, well, I don't get the job. This kind of employer wants someone who does everything! He prefers an imaginary jack-of-all-trades developer than an honest one. This kind of employer wants a robot developer who doesn't sleep and no social life so that he can assign a big webapp project to only one-doing-everything developer, hoping that only one developer means more profit. In the end, this type of employer will realize that the project failed or it took one or two years to finish, and the profit that he expects turns to be a lost.
I wish there were no more employers like this.
They want to hire 2 jack of all trade developer rather hire a 2 difference skill but strong knowledge people.(Worth in $$$)
They rather want to save their cost in short term instead of invest on long term. (because they are $$$ driven, not user driven :))
They think program is : System.out.println("hello world"); how hard could it be ? :)
They not really care how important the technical people is (and they don't want to tell you they know nothing :) especially if they are not IT backgeround), save $$$$ is more important. just get me 2 developer that is cheaper !!!
Depend on the business need, but if you want a very good product, please hire developers whose is good is difference skills. (please remember that know a language very well doesn't mean you can write a good article. !
And sometimes these ads ask for all these skills just so that they can bargain on the salary/rate later on: Yes you are great at writing struts/spring apps in a weblogic environment but you are not that much of a Unix admin/Web Designer/Etc. We'd love to hire you but the salary/rate will be less (much less) than what was originally discussed (which is what enticed you enough to go through the whole interview process in the first place).
It's certainly the case that statistical education is so low that almost no one does the above. Instead people grab onto advice without considering advisee credentials analytically.
The analytical job of choosing a job ad as a job hunter is the dual of deciding on a job ad as a job marketer. And both job hunters and job marketers also have an alternative of using acquaintance networks rather than job ads.
Experience dictates how skills are applied. I have over 25 years of experience in programming, electronics, and digital theory. Not all of them came to me at once, nor did I learn them at a college. Nevertheless, it has always given me an edge in the industry I have typically found greatly enhances my perspective and abilities with the task at hand.
For example:
I used to work as a consultant for a major stock trading firm. Their IT department was staffed with very skilled people, most with PHDs and some with Microsoft Certifications. I have neither. Once a major issue happen with their entire system and the single-skilled "experts" spent hours trying to solve the problem. After much urging to call "Superman" (a nickname I was given) they finally relented (I am not cheap). They called me in and I had the problem fixed in less than fix minutes at the absolute amazement of the other staff. This problem was unique, but quite easy to spot with someone that has knowledge of how a microprocessor works at its fundamental level, and how software is all just specifically arranged machine code executing despite the compiler or interpreter running, AND knowing typically how much an innocent mistake can throw a monkey wrench into the works.
The key here is to keep learning about everything in your field, but to also learn new things. Using the example of Architect given in the article (poorly used by the way). I'd rather have an architect with engineering experience that has demonstrated not only his artistic talent, but also knows how to make it work in the real world because of his engineering knowledge.
Now here's where I get to a touchy subject, but valid nevertheless. There are over 35,000 scientists in the world with expertise in more than one field (by long term experience) that say Global Warming is caused by the sun and its cycles, mostly sun-spots; as well as water vapor. Many are weather experts, many are astronomy experts, many are chemists, and many are even geologists and physicists. What makes them unique is many have expertise in more than one field.
There are about 6000 scientists, most recently out of their PHD programs and in need of funding, that have excellent scientific training and knowledge in only one field of expertise that have formed a "consensus" saying Global Warming is caused by mankind.
Based upon my own experience, I can say that if a jack of all trades is very good at those trades, the he/she will be a better asset (and perhaps worth more) than someone with only a single skill to their name.
I can guarantee you that I can optimize and improve any single "experts" code by at least twice the speed, and usually make it just as easy to follow. How? I leverage the subsystems of a PC or server in a way no programmer is taught about in school.
I don't claim to know everything, and frankly it has taken me many many years to be as skilled as I am, but don't knock knowledge and experience. To have more of both is always an asset.