On increasing contributions

On teams building software, a common question is posed: "how can we get more contributions".

Putting aside that contributions are not the most relevant metric for a team (but perhaps the easiest measured), some form of this question is relevant to most teams ("how can we increase our velocity", "how can we improve our quality", "how can we increase our impact", etc).

For the sake of this post, we'll assume a few things:

... and if any of these are not true, you should probably address them first.

Once you have these in place, the number one thing you can do to increase contributions is to make it easier to contribute, and the number one way to do that is to provide the right kind of work for the right kind of contributor, henceforth referred to as problems, projects, and tasks.

Tasks

The most straightforward way to increase contributions is to provide tasks which are:

I notice that tasks are the number one things most teams get wrong. They either provide tasks that are too big, too vague, or too unimportant. This leads to contributors getting stuck, losing interest, or feeling like they are not making a difference. Failure modes include:

It's worth noting that creating the tasks is valuable work in itself, and should be done by the team as a whole, not just the person who is responsible for the work. This is particularly important for tasks that are not directly related to the product, such as documentation, testing, or community engagement.

A maturing contributor will start to move from working on tasks to defining some tasks for themselves, and eventually to defining tasks for others. This is a natural progression, and should be encouraged by the team, but it is important that the team as a whole is responsible for the work.

Projects

Projects are defining and completing (though not necessarily by the same person) a set of tasks that accomplish a specific goal. Projects are larger than tasks, but smaller than problems, and are often used to group related tasks together, or to provide a clear path for a contributor to follow. They should be:

Failure modes include:

Projects are a natural progression from tasks, and should be used to group related tasks together, or to provide a clear path for a more experienced contributor to follow. Often your team's velocity will be determined by the number of projects you can complete in a given time period, and the quality of those projects.

Problems

Problems are the highest level of work, and are often used to describe a user need, a business goal, or a technical challenge that the team is facing. Problems are too large to be completed by a single person, and often too complex to be fully understood at the outset. They should be:

Failure modes include:

Conclusions

In conclusion, the number one thing you can do to increase contributions is to make it easier to contribute, and the number one way to do that is to provide the right kind of work for the right kind of contributor. This means providing tasks that are vetted, explicit, and small, projects that are scoped, resourced, and noisy, and problems that are challenging, important, and limited.