<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<meta name="robots" content="noindex,nofollow"><title>FeatureSpecifications - Ubuntu Wiki</title>

<link rel="stylesheet" type="text/css" charset="utf-8" media="all" href="FeatureSpecifications_files/common.css">
<link rel="stylesheet" type="text/css" charset="utf-8" media="all" href="FeatureSpecifications_files/print.css">

<link rel="Start" href="https://wiki.ubuntu.com/FrontPage">
<link rel="Alternate" title="Wiki Markup" href="https://wiki.ubuntu.com/FeatureSpecifications?action=raw">
<link rel="Alternate" media="print" title="Print View" href="https://wiki.ubuntu.com/FeatureSpecifications?action=print">
<link rel="Search" href="https://wiki.ubuntu.com/FindPage">
<link rel="Index" href="https://wiki.ubuntu.com/TitleIndex">
<link rel="Glossary" href="https://wiki.ubuntu.com/WordIndex">
<link rel="Help" href="https://wiki.ubuntu.com/HelpOnFormatting"></head>

<body dir="ltr" lang="en">
<div id="page" dir="ltr" lang="en"><!-- start page -->

<h1 id="title">FeatureSpecifications</h1>
<div id="content" dir="ltr" lang="en">
<a id="top"></a>
<p><strong>This page describes the process by which we define, discuss,
schedule and implement new feature specifications in both Ubuntu and
Launchpad.</strong> </p>
<p>Ubuntu and Launchpad are both complex software projects with
community involvement to various degrees. We need to keep track of many
different initiatives, upstream and in the distribution, and we need to
be able to know exactly where we stand on the delivery of those during
the release cycle. We use the <a class="external" href="http://launchpad.net/specs/"><img src="FeatureSpecifications_files/u-www.png" alt="[WWW]" height="16" width="16"> Launchpad Specification Tracker</a> to do this. </p>

<h3 id="head-dd98a8bf870350d03770c0810f8a8334628f9350">The Specification Process</h3>

<p>So, here's the process in a nutshell. Follow links to other pages for more detail on any particular topic. </p>
<ol type="1">
<li><p><strong>Write your specification in the wiki</strong>. There are currently separate wiki's for Launchpad <a class="external" href="http://wiki.launchpad.canonical.com/"><img src="FeatureSpecifications_files/u-www.png" alt="[WWW]" height="16" width="16"> here</a>
and Ubuntu (you are in it now :-)). Of course, take a look at the
existing specifications to ensure that you are not duplicating an
existing proposal. Most important is that you follow the specification
template that is current for that wiki. When you create the page, you
will have a set of Page Templates, look for one called <a href="https://wiki.ubuntu.com/SpecTemplate">SpecTemplate</a>, and use that. The spec should be as detailed as you can make it. There are best practices documented on the <a href="https://wiki.ubuntu.com/SpecSpec">SpecSpec</a>.
Use the sections provided as a guideline. Change it if you need to, for
a good reason, and make a note of why you are following a different
format if you do so. </p>
<li class="gap"><p><strong>Register your specification in Launchpad</strong>.
This is crucial, as we keep track of specifications in Launchpad so
that we have a rigorous structured list of them which we can
prioritise. You can attach the specification to Ubuntu, the
distribution, or to any of the upstream products registered in
Launchpad, and of course Launchpad itself is registered in launchpad.
Use the following quick URL's: </p>
<ol type="a">
<li><p><a href="https://launchpad.net/distros/ubuntu/+specs"><img src="FeatureSpecifications_files/u-www.png" alt="[WWW]" height="16" width="16"> https://launchpad.net/distros/ubuntu/+specs</a> (Ubuntu specs) </p>
<li><p><a href="https://launchpad.net/products/rosetta/+specs"><img src="FeatureSpecifications_files/u-www.png" alt="[WWW]" height="16" width="16"> https://launchpad.net/products/rosetta/+specs</a> (Rosetta specs) </p>
<li><p><a href="https://launchpad.net/products/malone/+specs"><img src="FeatureSpecifications_files/u-www.png" alt="[WWW]" height="16" width="16"> https://launchpad.net/products/malone/+specs</a> (Malone specs) </p>
<li><p><a href="https://launchpad.net/products/launchpad/+specs"><img src="FeatureSpecifications_files/u-www.png" alt="[WWW]" height="16" width="16"> https://launchpad.net/products/launchpad/+specs</a> (General launchpad specs) </p>
<li style="list-style-type: none;"><p>Note that in each case the URL
above will show you the list of specs already registered for that
distro or product. Now, on the top right of the page you will see a
link to "Register New Specification". Click that to register your spec.
If you will be coding this yourself, make yourself the Assignee. Don't
make anybody else the assignee unless you have discussed it with them
or pay their salary. </p>
<p>If you are the person responsible for drafting the specification and
getting it to the point where it is approved, make yourself the
Drafter. And if there is someone else who will need to sign off on the
spec before implementation begins, or will have to sign off on the code
before it lands, then you should make them the Approver. </p>
<p>You will have given it a name. Now you can update the wiki page of
your spec with the URL straight to the Launchpad entry for the spec.
This allows you to jump quickly between Launchpad and the wiki spec
itself. </p>
<p>Please do not set a high priority for your own specification. Let
the product team, or distro team, determine their own priorities. If
it's really, really important to you, you should either start work on
the code yourself, or reach for your chequebook and fund the
development. </p>
<ol type="2">
<li><p><strong>Propose the spec for discussion at a meeting</strong>. Launchpad keeps track of meetings held by the Launchpad and Ubuntu teams. Currently, the only meeting registered is <a href="https://wiki.ubuntu.com/UbuntuBelowZero">UbuntuBelowZero</a>.
You can propose your spec for that meeting agenda using the "Add to
Meeting Agenda" menu item (top right again) on the spec page in
Launchpad. </p>
<li class="gap"><p><strong>Gather a community around your specification</strong>. Don't assume that people will find it. Announce your spec on <a href="mailto:ubuntu-devel@lists.ubuntu.com"><img src="FeatureSpecifications_files/u-email.png" alt="[MAILTO]" height="13" width="23"> ubuntu-devel@lists.ubuntu.com</a>
and on #ubuntu-devel. Get people to subscribe to the spec as interested
parties. If you have someone who wants to implement it, make them the
assignee of the spec. NB, see above, don't make someone the assignee
unless they have agreed or you are funding them in some way. The better
the community you can build around your idea, the greater the chances
that it will be implemented soon, and well. </p>
<li class="gap"><p><strong>Work to get approval for the spec</strong>.
When your spec is first registered it will be in the 'Brain dump'
state. Over time, its status will change from 'brain dump' to 'draft'
to 'approved'. There are a variety of states there. Please do not move
a spec to 'approved' unless it really has been approved by the people
who have to land the code. You can mark it 'Draft' when it has
everything in it that you think it should have, including
implementation strategy and discussion of any UI, with mockups, and an
assessment of its impact on existing code. When you are really, really
certain its good, you can move it to 'Pending Approval'. The approver
can bump it back to draft or braindump. Don't mess around with the
status, people will just start to ignore your specification. Really. </p>
<li class="gap"><p><strong>Make sure you register spec dependencies</strong>.
The specification tracker has many features. It allows you to ask
someone to review your spec, for example, and keeps track of that. It
also allows you to point to any other specifications on which your spec
depends. For example, if it only makes sense to implement B after A,
you can capture that information. This is really, really useful to the
development team in planning and prioritising their efforts. There are
other spec tracker features that you might like too. Spend some time
exploring it. </p>
<li class="gap"><p><strong>Start implementation of the feature</strong>.
You should use Bazaar, and publish your branches, and register them in
Launchpad. In due course we will support linking of the branches
directly to the specifications, so that people can find your code very
easily. </p>

<h3 id="head-ed6a971a675243558927e9e898cb62de6da3dcb8">Conclusions</h3>

<p>Features that are proposed, caucused, discussed and implemented
openly and transparently have the best chance of making it into Ubuntu
and into Launchpad. Use this process to steer an idea that you have all
the way to delivery. Bear in mind that you can't set priorities or
goals for anybody else unless they agree to it, or unless they report
to you, or you are willing to fund it. To make something happen, START
it and try to gather people around you to make it go faster. Be willing
to do it yourself, all the way, if necessary. </p>
<a id="bottom"></a>

<p id="pageinfo" class="info" dir="ltr" lang="en">last edited 2005-10-21 08:27:35 by <span title=""><a href="https://wiki.ubuntu.com/MarkShuttleworth">MarkShuttleworth</a></span></p>
</div> <!-- end page -->