There is a contradiction that shows up in many books and articles on agile software development. . And I’m going to rant a little on one of them: the “developer” bias in Agile software practices.
Before I begin my rant, I’d like to tell you where it comes from. I am an Enterprise Architect. I am also an agilest. I am a certified Scrummaster (for many years) and have been on many agile projects. I’ve seen success, and I’ve seen failure. I know that agile is good, but not good enough to overcome people who are determined to undermine change.
I am currently engaged on a project to help an organization rewire their business processes. All of their core processes. Some of them are in software development… and that is where agile comes in, but some are in other areas (sales, account management, customer service, etc). I see it all, not just the software engineering bits.
To make this work, we created a set of principles that we use to drive the conversation around transforming the company. We train people on the principles. We connect change to the principles. The principles are developed from the agile mindset but are not the same as the ones traditionally tied to the agile manifesto.
One is focused heavily on the notion of an empowered team. As the trainer, I’ve embedded these principles into my head. Kinda hard not to. So when I’m reading a book on agile practices, and the author says something that violates one of these principles, it stands out. Big time.
And hence the rant. I was reading Mike Cohn’s book on agile stories and I came across a passage that reflects a kind of mindset that does NOT build empowered teams. And I went off. The rest of this post is my rant.
On one hand, there is a basic expectation that we should empower the team to solve their problems using their skills and training. On the other hand, there is a bias towards having developers involved in every part of a business process, from sales through requirements to project management and out to delivery and customer service. The net result: we are empowering developers to perform every role. No one else is empowered. They are, in fact, not trusted at all.
At some level, agile practices like XP and Scrum are written, and promoted, by software developers, so it is understandable that these authors believe that software developers are a necessary part of every process.
But they are not.
So what’s the problem
Organizations intentionally create specific roles and groups of people. Those roles are defined to take the most advantage of the intrinsic motivations of people when performing their duties. The things that motivate a person to become a project manager, for example, are rarely the same things that motivate a person to become a software engineer. Motivation matters. If you are not motivated to excellence, you will not perform with excellence.
While it is fine for an individual person to be able to perform well in a couple of roles, it is absurd to build a system or business process that expects all people in one role to be able to perform another role well. In specific, it is absurd to build processes where a technologist is required to develop requirements, or manage a project, or plan the delivery of systems. Those processes can be performed just fine with motivated people who are trained and experienced in those activities. However, to empower a team, people in these roles must be respected as well.
Agile software, that so values people over processes and tools, demonstrates an utter lack of respect for the individuals who choose to excel in non-technical roles by asserting the need for developers to be involved in every step of their process.
For example, in XP (and sometimes in Scrum), user stories are described as being developed by a “customer team” that includes developers. In the book “User Stories Applied,” Mike Cohn describes a process where a series of user roles are developed. From those roles, the stories will be drawn. The following is a quote from the book:
To identify user roles, the customer and as many of the developers as possible meet in a room with either a large table or a wall to which they can tape or pin cards. It’s always ideal to include the whole team for the user role modeling that initiates a project, but not necessary. As long as a reasonable representation of the developers is present along with the customer, you can have a successful session. — “User Stories Applied” by Mike Cohn
I’m an agilest, and this statement takes my breath away. Why? Because the SKILL of developing user roles is a good skill to have, but not a necessary skill for all developers to have. Yet the author (whom I respect) assumes that the activity cannot be performed successfully without developers in the room! At the same time, the text assumes that the task can be performed by developers exclusively (no one else is necessary at all).
The time that we spend training developers to be good at creating user stories is time that we are NOT spending training them on concurrent processing, idempotent messaging, and query optimization. We don’t train business analysts or engagement managers on C# design patterns, so why should we train developers on user role modeling and requirements analysis? It’s a total lack of understanding of the value of roles, and it is a bias that works against success.
What’s the solution: respect
Roles are not boundaries. In any team, there are roles. More importantly, as a member of a team, I have to trust my team members to fulfill their roles well. If they need help, I TRUST THEM TO ASK FOR HELP. When they do, I am happy to “cross roles” and provide help. When I provide help, I am doing so from the perspective of a less-skilled resource, and under the supervision of the accountable role. (e.g. if I “help” a tester, but don’t document a defect according to team standards, how much “help” am I actually providing?)
Roles are empowering. If my team member does not ask for help, I trust each one to perform his or her role with excellence. If I don’t trust them, how can they develop the excellence that the company expects? How can they be recognized and rewarded for excellence if our processes and methods show a lack of trust in their roles to perform well without a developer present?
Roles demonstrate respect. As an agilest, I value people over processes. That means I value the contribution of individual experts on my team to do their work with excellence, and I will show them respect for the work that they do, and the unique value that they contribute. I will do so by allowing them to do their work without the “supervision and assistance” of a developer.
If they need me, they will ask for me. Until then, I will get to doing what I do best. I have a job to do, after all… and it is mine to do well.
Why this matters
Agile software development solves a problem. The problem is that we are including waste in our processes, and that waste is causing software to be delivered late or with poor quality.
If we optimize our processes, we can reduce waste. If we include developers in every process, we are not optimizing our processes. We are, in fact, replacing one kind of waste with another.