Programmer, software engineer, software developer, coder, developer, code-monkey, build engineer, tester, software tester, test automator, test engineer, quality assurance engineer, analyst, business analyst, system analyst, product owner, product manager, requirements manager, subject matter expert, domain expert, project manager, change manager, programme manager, development manager, iteration manager, release manager, deployment manager, scrum master, team leader, technical lead, development lead, architect (system architect, solution architect, software architect), consultant, coach, designer, user interface designer, user experience designer, product designer.
Did I miss any? – There are a lot of roles in software development teams and even more titles. Does your team have a full set? Do you need them all? How do you choose which ones you have, and which you don’t?
And everyone of them offers a solution to your problem. So….
In walks the Programmer (Software engineer, software developer, etc. etc.) and says: “Yes, I understand your problem, what you need is some software writing. Only us programmers can do that so don’t worry about that testing lark, or analysis. Just introduce me to some customers and I’ll work it out.”
The Business Analyst walks in next: “Its all very well writing something, and its all very well making sure it works. But, is it the right thing? How do you know its what you need? Us Business Analysts are trained to understand what you need and give those requirements to the programmers and testers.”
Next in is the Tester. “You see, the problem is that Programmers don’t really know what you want, and when they do they make mistakes. So I’ll test everything and ensure it works, and that it is what you want.”
Very convincing. Next you talk to a Project Manager: “yes, these programmer and testers are very good but have you noticed how long they take? Unless there is someone here to organise them, and dare I say push them, then you’ll never get anything.”
You see, everyone (every role) offers to solve your problem. Maybe by creating a solution, maybe by ensuring its the right solution or maybe by making sure that it all fits together.
And these roles overlap. Programmers can talk to you about what you need, so can Testers. Project Managers like to have a chat too and Business Analysts claim its their right.
As you get more people things get more complicated. They seem to make work for themselves. So you need an overall Development Manager to manage you teams. You hire Architects to ensure the Programmers really do it right.
More people begat more people: Release Managers, Programme Managers and Team Leaders appear to organise people. Designers, Build Engineers, and Consultants appear to specialise in parts of the system.
They all claim to have the answer to your problems but things look worse.
Then someone tells you about Agile. You need a Product Owner, a Scrum Master and a Team. More roles, and the people you already have don’t want to give up their titles so you add some more.
And the holders of all these roles claim they have the solution to your problem.
They can’t all be right.
Thing is: there is only one role you absolutely must have on a software development project. That is the guy who does the coding: Programmer, Software Engineer, Software Developers, call them what you will. If you are not getting code written you aren’t doing software development.
Which of the other roles you have depends on the complexity and nature of the work, the size of the team, the approach you take and your wider organisation.
This doesn’t stop the specialise from telling you they have the solution to your problem. Which makes it all confusing.
I intend to keep with this theme of roles for a few blog entries, so watch this space.