Blueprints

Launchpad blueprints are used to track the implementation of significant features in OpenStack. Keeping their status current is critical to the success of the release and the project as a whole. It avoids unnecessary reporting, pings and discussions, and keeps everyone on the same page.

= Blueprints and Specs =

In addition to tracking implementation status, blueprints can also be used to propose a design and get it approved. Specifically, you can link to an external page that contains your specification, and use the "Design" fields in the blueprint to track the spec approval. However, Launchpad is missing a lot of features that would make iterating on spec design and approval usable, like ability to discuss or iterate on several revisions of a spec, or record multiple approvals.

In order to solve that issue, starting with the Juno cycle, some projects decided to experiment with using a specific git repository (*-specs) to propose, discuss, iterate and track approvals on specifications using Gerrit instead of Launchpad. Those projects still ultimately use Launchpad once the spec is approved, to track the implementation status of the approved feature.

That results in two slightly different workflows, depending on whether the targeted project uses a -specs repository or not.

Spec + Blueprints lifecycle
For projects using a -specs repository (like Nova, Neutron, Oslo, Ceilometer...), you should follow this process:


 * Register your blueprint in Launchpad by going to the project page at launchpad.net/$PROJECT and clicking "Register a blueprint"
 * Upload a design specification in the "specs/ " folder in $PROJECT-specs
 * e.g. http://git.openstack.org/cgit/openstack/nova-specs/tree/specs/juno/name-of-your-blueprint-in-launchpad
 * it should be based on the specs/template.rst, see the instructions in the template for more details
 * get it reviewed by submitting your patch using Gerrit, in the usual way: Development Workflow
 * at the end of each release, non-completed specs will be removed
 * you need to re-submit for the following release, should the blueprint slip
 * Project drivers will approve blueprint by:
 * Setting priority
 * Setting a target milestone, based on the assignee proposal
 * Assignee then keeps milestone and implementation status current to reflect progress
 * Assignee sets implementation status to "Implemented" when the work is completed

NB: an automated script will ensure that no milestone target is set on unapproved (unprioritized) blueprints.

Blueprints only lifecycle
Projects not using a -specs repository (Horizon, Trove...), you should follow this process:


 * Register your blueprint in Launchpad by going to the project page at launchpad.net/$PROJECT and clicking "Register a blueprint"
 * Describe the feature summarily in the blueprint itself
 * Link to another document (using the specification link) if you have more
 * Set yourself as assignee
 * Set target milestone to indicate when you expect the work to land
 * Project drivers will approve blueprint by:
 * Setting priority
 * Assignee then keeps milestone and implementation status current to reflect progress
 * Assignee sets implementation status to "Implemented" when the work is completed

= Blueprints reference =

Here are the different fields available in Launchpad blueprints, and how we use them within the OpenStack project.

Specification link
URL to an additional document, potentially describing the design and implementation details.

Priority
PTLs and their blueprint review teams use priority to communicate how important a given feature is to the success of the next release.

Definition
You can optionally use this field during the planning/approval phase. We also use it to mark a blueprint Superseded or Obsolete.

Implementation
Use this status to indicate the degree of completion of your blueprint. This is mandatory.

Extra statuses (you should probably not use them):

Series goal
The release series (Essex, Folsom...) for the proposed change. This should always match the target milestone. An automated script will ensure that the two fields match, it runs roughly every 2 hours.

Approver
The PTL for the project (optional).

Drafter
The person responsible for the planning phase on this blueprint (optional).

Assignee
The person responsible for implementing the blueprint. This is mandatory.

Milestone target
The milestone the blueprint should be completed by. Use of this field depends on the workflow followed (see above). In a spec-driven workflow, it's initially set by drivers at approval time. In a pure blueprint workflow, it's initially set by the assignee to communicate when the work is expected to land. In both cases, it's maintained by the assignee to communicate when the work is expected to land.

Related branches
Not used.

Related bugs
Bugs related to this blueprint, if any.

Sprints
Not used.

Feedback requests
Not used.

Whiteboard
Free-form notes. If the blueprint implementation is blocked, this should state the reason why. Gerrit will add notes about corresponding reviews in this field.

Dependency tree
Dependencies between blueprints. If one blueprint needs to be delivered before this one, this needs to be recorded here. Note that if B depends on A being completed, the priority of A should be as high (or higher) as the priority of B.

= See also =
 * http://docs.openstack.org/project-team-guide
 * Bugs
 * https://blueprints.launchpad.net/openstack - the blueprints site