What's my job?

Last months Dr. Dobbs has an interesting article on the changing face of software development jobs which rings true to me. As the software development discipline matures you might expect the roles to become better defined and specialized. Just like Eskimos have many words that all mean “snow”, in the software development world we have many names for what amounts to “developer”: Developer, Web Developer, Integration Developer, Build Facilitator Developer, Architect, Developer in Test, Test Engineer, Lab Manager, Stress Developer, Performance Developer, Test Automation Writer, Test Automation Runner, Program Manager, Release Program manager, Feature Program Manager, Community Program Manager, etc the list goes on and do... While I am a huge fan of the economies of scale that you can get by specializing, it is not without costs.

Whenever a software\designs have to be handed off between groups there is inherently some amount of overhead and the “us\them” problem has room to take root. As a result the industry is moving to a more agile development model where we need to staff small teams that can deliver solutions end-to-end... In such teams we do certainly need experts, but we also need great generalists that are able to take on whatever role they need to get the job done. To that extent hard lines between the different roles (test, developer, program manager) don’t help.

Here is to a day when we can stop hearing:

“The test team is behind in writing automation tests “

“The development team writes buggy code”

“Xxx is not my job”

And start hearing:

“We finished writing automation tests together as we completed developing the feature”

“Together we assured the quality of the code as it was written”

“We shipped the right product on time!”

What do you think? What is the most specialized role in software development you have seen? Was it worth it?