ProjectAffiliation

Not logged in - Log In / Register

Revision 13 as of 2009-02-11 17:09:50

Clear message

Affiliations

Blueprint: Project/Team Affiliations

Launchpad has projects (née products) that are a central organizing principle for open source development, bringing together bugs, code, translations, answers, etc. Projects are the seeds around which communities in Launchpad grow.

Launchpad also has teams, which are ways to organize the people who want to be involved in a project. Teams are used in some cases to control access to project artifacts (e.g. private bugs, code branches) and as a forum for audiences that want to participate in the project (e.g. mailing lists).

The problem is that there is no association between people/teams and the projects they revolve around. It can therefore often be difficult for an interested user to find the person they need to communicate with, or the team they want to join in order to participate more fully in a project's development.

This spec addresses this problem by introducing affiliations, a way for teams and people to be (optionally) associated with a specific project.

Rationale

How often have you gone to a project page and wondered what people or teams are related to this project? When you're looking for a way to participate, you naturally want to find the related teams and mailing lists, but this is currently fairly difficult. If the teams share a name with the project, you might get a lucky guess. Or your search might turn up something useful. Or you might be able to follow the obscure trail from various project artifacts and permissions to the people and teams controlling them. Ultimately though, because these relationships are not explicit, this is all left to luck, chance, and The Googles.

Similarly, you might have a fantastic idea for improving the user interface for a web application, or you have a branch of code that fixes an obscure bug, and you'd like to get it reviewed and merged into the project's mainline. You can usually find a person who is involved with the project, bug can you always find the right person? Maybe you want to contact the lead architect, or the user interface designer, or the documentation guru, or the BDFL. Launchpad doesn't provide a way to designate these arbitrary community-recognized roles.

Wouldn't it be nice if a project owner could link specific people and teams with the project? Wouldn't it be nice if relationships between people/teams and their projects could be described in terms that make sense to, and have been agreed upon by, the project's community? Wouldn't it be nice if, on the project page you could see a list of related people and teams, and know exactly who was in charge of documentation, or the web site design, or wiki gardening, or internationalization? Similarly, from a person or team's, would you like to see a link to their related projects?

Making these relationships, which often already exist implicitly, explicit and easily discovered opens up a new world of collaboration on Launchpad. For users looking to participate in the project, there's much less guesswork in finding the channels for this participation.

These relationships that people and teams can have with a project model that project's community of contributors. By allowing us to specify and describe the affiliations between people/teams and projects, we can capture arbitrary community structure without imposing a rigid semantic on this structure. We let communities self-organize, evolving from small projects with individual people in key roles, to large, complex, and mature projects with teams filling many of those same roles.

Data model

To support affiliations, two key concepts (and their associated tables) are proposed for adding to the Launchpad data model. These tables support the optional links between people/teams and projects, and the descriptions of these affiliations.

The first proposed table is PersonAffiliation. This table contains a link to a Person and a link to a PillarName. By linking to PillarName we allow for affiliations to projects, project groups (née projects) and distributions, although for the first cut we will support only projects.

The PersonAffiliation table contains a creation date for the affiliation and a status (see below). It also contains a link to the AffiliationDescription table.

AffiliationDescription is the second proposed table, and this contains a link back to its PillarName, along with a text description, a creation date and an order. By assigning an order, we can display the affiliation descriptions in the logical order the user wants them on a project's home page. For example, for the Python project you might have the following affiliation descriptions and order:

description

priority

BDFL

1000000

Release manager

1000

Platform guru

200

Documentation guru

150

Core developer

50

On the Python project page, we'd display those affiliations in the order of decreasing priority, with alphabetical sorting for duplicates.

Stories

Here then are some stories for breaking down the work and estimating their level of effort.

Project affiliation for teams

As a project owner
I would like to be able to affiliate a team with a project
So that it is easier for people to discover this relationship, and the ways they can participate in the project.

Note:

Story points: 2 (though with the additional scope, probably at least a 3 or 5)

View project affiliation

As a Launchpad user
I would like to be able to view the project affiliations for a team
So that I can more easily decide how I want to participate in the project.

Notes:

Story points: 2 (though with additional scope, probably a 3 or 5)

Add affiliation

As a project owner
I would like to be able to propose a person or team affiliation
So that I can more clearly communicate to users what these relationships are.

Notes:

Story points: 5

Remove affiliation

As a project or team owner
I would like to be able to break an affiliation
So that it is clear there is no longer a relationship between the person/team and the project.

Notes:

Open questions