There's a huge range of skills that come to mind when somebody asks for a web developer, and when you start looking for Drupal developers, it gets even more complicated. Drupal developer, module developer, back end developer, what does that mean? Here's how we break down the skill sets into roles:
- Site Builder/Architect: responsible for architecting the information on the site, deciding what goes in a content type vs a vocabulary vs a new entity type, etc. At entry level, this is building fields, views, permissions, etc.
- Front-end/themer: responsible for taking a design, picking a base theme, implementing the CSS/HTML/templates, considering mobile/responsive design, building sprites, etc.
- System Administrator/performance engineer: handles deployment issues, performance and scaling issues, profiling, configuration management. We see a fair amount of overlap between these roles, but when I'm hiring, I'm looking to find somebody who can become a strong resource for the rest of the team in one of these areas. They do all seem to come with quite distinct personalities. We're a small enough team that we encourage learning the other roles, but each of these areas has a leader who defines our shop standards in that area. Graphic Design is separate from front-end/theming, and typically our clients provide that. Testing/QA could probably be another role -- but we're making that part of everybody's job description for the time being, to create test cases relevant to their areas (and then actually doing the testing is turning out to be a great way to train people new to Drupal in what can be done with it, where to find things, and generally the Drupal way...) Each of these roles also has a growth/development path. We start out with people who have some basic skills in at least one area, but there's always a ton of things for each role to learn to really master that role. For example:
- Site Builder: starts with content types, taxonomy, views, and planning URL structures. Mid-level - features, views arguments, ubercart/commerce, simple rules, context. Advanced: Panels, rules, workflow, Maestro, messaging/notifications, SOLR, etc.
- Themer: basic: HTML, CSS, grid-based designs. Midlevel: Sprites, responsive design, video/media. Advanced: UI/interaction design, animations, Facebook apps, custom widgets, mobile
- Back-end: basic: Form API, Database API, Schema API, ability to debug, custom filters. Midlevel: Bulk node operations, data synchronization, Rules components, views handlers, Services, drush scripting. Advanced: node.js, dojo toolkit widgets/AMD, query altering, core development
- System admin: basic: Linux shell, server management, drush, git, mysql/mariadb, apache/postfix, ec2/Cloud Servers, DNS, firewall rules, DOS mitigation, backup management. Midlevel: database indexing, slow queries (explain select), multi-server deployments, database replication, load balancing, disaster recovery planning, PCI compliance, monitoring setups. Advanced: diagnose hacked sites/servers, High availability setups, security planning, offline self-contained appliances, penetration testing, memcached/varnish, CDN setups, HIPAA documentation At least, that's how our current team is organized, and a partial list of the kinds of things each person does. The main site building role in Drupal needs no PHP or programming knowledge whatsoever, and can get quite a lot done. Our back-end developers don't need CSS knowledge. Our front-end developers can get by with rudimentary PHP skills, as long as their CSS is strong. Finding a person who can do everything above well is probably not going to happen. But as a team, we can be strong across the board, and get as technical as we need to to solve the problem. How can we help solve your problem? Drop us a line or leave a comment below! (Most of this post I originally wrote for a discussion on groups.drupal.org, here.)