3

Developer /architect / developer 20 years experience. I did an experiment at my previous project where I created a scrum-like process but we decided developers to not pick directly their tasks, but instead the team to assign them the tasks. How is a task picked? We open the design drawing we iterate on where we are and where we would like to go. And then ask the question "what is the next logical step?". Some benefits of this are that:

  1. Avoidance of specialization.

  2. More pair programming since when you get the wrong task you need to ask for help.

In general the process worked well IMO. There were some challenges with regards to the non-agile resources which more or less were not able to understand why one big task may have been executed by several people and were aways trying to pinpoint a responsible person in places where the responsibility has been collective.

My question is:

  1. Is there a process that promotes the group to assign tasks to individual developers. The tasks should be assigned as part of a group decision and as part of what comes next.

  2. How can I deal with the occurrences when actually people get around and do receive tasks from external resources this way hacking the group decision of who is doing what. I kind of wonder is what I have described a nonsense? What agile process discourages developers picking tasks for themselves?

  • 1
    It's considered normal that a developer chooses the next highest priority task in the list that isn't assigned to anybody. Teams enforce this in different degrees, but I don't think it needs a special version of Agile. – DJClayworth Oct 16 '20 at 19:35
  • Avoiding specialization shouldn't be a goal in itself but helps in ensuring that the team as a whole is able to complete the tasks for which it takes responsibility. Specialization is in general unavoidable, developers are not faceless and exchangeable drones, and assigning tasks without regard to capabilities sounds like an anti-pattern to me. Encouraging members to expand their experience in areas they're not familiar with by pairing with an expert is a good approach, though. – Hans-Martin Mosner Oct 16 '20 at 19:44
  • @DJClayworth I have the feeling that in almost every agile team I have been there is a non-agile part of the team that goes in the opposite direction. How do you deal with that ? – Alexandar Petrov Oct 16 '20 at 19:46
  • @DJClayworth and based on experience this rarely happen - developer picking the next ranked task. – Alexandar Petrov Oct 16 '20 at 19:47
  • Is your problem that you would like developers to pick the next logical task rather than the next task they want, to avoid over-specialization? That's a bit different from "is there a named agile process that enforces that?" Is there a benefit to the project other than avoiding over-specialization and encouraging learning? – DJClayworth Oct 16 '20 at 19:53
3

You ask:

  1. Is there a process that promotes the group to assign tasks to individual developers. The tasks should be assigned as part of a group decision and as part of what comes next.

What you need to do is to explain to the team (those doing the picking) what you are aiming at. This may then encourage them to divide up the task as you expect.

Once they realize the benefit of your improvement, most of them will go along with it.

Then you ask:

  1. How can I deal with the occurrences when actually people get around and do receive tasks from external resources this way hacking the group decision of who is doing what. I kind of wonder is what I have described a nonsense? What agile process discourages developers picking tasks for themselves?

While Agile promotes efficiency, you are expecting to promote short-term inefficiency for long-term efficiency.

Once you (re)define "efficiency", then it should flow with your implementation of Agile.

You cannot stop people from breaking the rules, unless you want to become a policeman, and you have the authority to punish people. (Even then you probably don't want that type of culture.) But you can encourage them to play by your rules and explain to them the benefits of it.

Keep in mind that the occasional "rule-breaking" is not the end of the world; sometimes it's better to ignore minor infractions rather than making a big deal out of it and distracting everybody.

A good idea may be to keep a log of when your implementation "saved the day". E.g.: Since x and y knew the code, when x went on a long vacation we didn't need a long handover.

Reminding people who great your system is, with proof, helps them understand it, encouraging them to follow it.

3

I am not aware of a process that explicitly discourages developers to pick their tasks. Instead, most agile frameworks encourage the use of self-organising teams.

One aspect of being self-organising is that the team will decide how tasks are distributed amongst the team members.

It would certainly be legitimate for a team to try a random or pseudo-random task allocation process. They could perhaps run it as an experiment: Decide how they will measure success, try the approach for a time-boxed period (e.g. 4 weeks) and then evaluate how the approach went at the end.

However, it would not be appropriate in a self-organising team for one person to be deciding the approach to task allocation and enforcing it on the team. The team should discuss alternative approaches and reach a consensus on the approach they want to try.

How can I deal with the occurrences when actually people get around and do receive tasks from external resources this way hacking the group decision of who is doing what. I kind of wonder is what I have described a nonsense ?What agile process discourages developers picking tasks for themselves?

If the team decides on the approach that they will use then they are far less likely to try and get around it. This is the value of self-organising teams: the teams have a buy-in to the chosen approach and so are more likely to execute it well.

  • I am not forcing tasks on people. I just try to give environment where instead of you picking a task for yourself the group picks a task for you. – Alexandar Petrov Oct 17 '20 at 10:58
  • By the way I change the title of the question. This question fits better in within what I am seeking,. – Alexandar Petrov Oct 17 '20 at 11:00
2

Agile is about self-organizing teams. The team is the one that can figure out the best way of doing the work, and usually, you end up with some kind of pull system. People take work, they are not assigned work.

If the team decided it's a good idea to encourage everyone to take tasks that they are not familiar with, then that's one thing. If you want a practice that discourages them to take tasks that they are familiar with, then that's another thing. The first approach is Agile, the second... I doubt so.

I don't think there is any Agile process that does what you are asking for, and that's because it doesn't really make sense unless your context is particular. By that I mean that the work is more or less from the same area of expertise, your team members have roles from within that area of expertise, but they don't just have the same experience. Some are more skilled, some are less. Doing what you suggest might work in that situation, but it can't work in all situations. And the reason is that, inevitably, you will have specialization within the team.

The way you phrased to question makes me think that you believe specialization is a problem. It isn't as long as the team has all the roles within the team to do their job, then that's no problem. Teams deliver software in Agile, not individuals.

Specialization becomes a problem when the company has silos of specialists that get shared between teams and projects. There you indeed have an issue because it's an external dependency and the team actually lacks some roles to do their job properly on their own.

It's good to share knowledge, it's good to have pair programming sessions, it's good for people to get the big picture and have shared responsibility over results, but assigning them tasks they are not familiar with is not necessarily the way to do it. It pushes them out of their comfort zone and that's a way to learn things, but push them too far and you will get a mess on your hands, end up causing a lot of frustration, and even employee turnover. Like I said, this works in certain contexts, not in all. I encourage you to think at the last project you tried this on and consider the skills of the people and the nature of the work, and I'm sure you will discover that there was not too much variation, just different levels of experience and view of the big picture.

To give you another example, consider you have a designer on your team and a Java back-end developer. Would you force a design task on the back-end developer just because you want to avoid specialization? Or worse? Would you give the designer a back-end task? It makes no sense.

There is indeed one issue: when working on priority tasks. Say the designer is busy, but the back-end developer just finished some work and can pick up the next task from the list of priorities. The next task in order of priorities is a design task. Ups! Now the developer has to look around to see what other back-end work there is. The second task is back-end work, so they pick that task up. But that was the second priority, not the first. That's a problem, right? But you don't fix this problem by shoving the design task on the throat of the back-end developer.

If you are worried about the way the work is performed or you have identified some risk with programmers picking only certain types of tasks, then bring the issue up with the team and let them figure out a way to fix it. Don't impose a certain way of working, there might be other/better ways to fix it, not necessarily like you suggest.

  • The problem within a larger team with people taking tasks they like is that you have different levels of programmers. Some programmers are realy efficient. If such programmer position himself between lets say production and the development you will end up in a situation where a lot of the other developers will have 0% clue about the infrastructure because each infrastructure task will be automaticaly picked up by that developer. Same goes for the functional aspects of work. If you have a person very interested into it you inevitably get a functional expert out of him. – Alexandar Petrov Oct 17 '20 at 10:58
  • By the way I change the title of the question. This question fits better in within what I am seeking,. – Alexandar Petrov Oct 17 '20 at 11:00
  • 2
    What you are talking about is called a bus factor and yes, you can improve it by sharing the know-how. But why do you need a process to discourage developers from picking up only certain tasks? This is a matter of team self-organization. Bring the issue up with the team and let them figure out a way to fix it. Why do you think dissalowing them to assign their own tasks is the only way to remedy the situation? – Bogdan Oct 17 '20 at 12:15
0

Generally speaking, you should be concerned with what the team undertakes to do next, and not with precisely who among the team members actually does it.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.