<?xml version="1.0"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>CKAN: Ticket #1127: CREP0001: Formalise new feature discussion and definition using CREPs</title>
    <link>http://localhost/ticket/1127</link>
    <description>&lt;p&gt;
&lt;strong&gt;Proposer:&lt;/strong&gt; Seb Bacon&lt;br /&gt;
&lt;strong&gt;Seconder:&lt;/strong&gt; Rufus Pollock&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;h2 id="Abstract"&gt;Abstract&lt;/h2&gt;
&lt;p&gt;
When adding new features to CKAN, a longer, more formal discussion will improve software design quality and documentation, better engage
the wider community, and ensure the core team are up to date with
latest developments.
&lt;/p&gt;
&lt;p&gt;
I propose a formal process (CREP -- CKAN Revision and Enhancement Proposal) for making this happen.
&lt;/p&gt;
&lt;h2 id="TheProblem"&gt;The Problem&lt;/h2&gt;
&lt;p&gt;
The current workflow for introducing major new features into CKAN is
very informal, typically based around one person's great idea, which
they've discussed with one or two other people in the team.  The
originator of the idea is typically the only person with access to all the input they've had through such discussions.  Often, the only location of this information is  in that person's head.
&lt;/p&gt;
&lt;p&gt;
However, there is a lot of experience embodied in the CKAN community
which should be drawn on before making large design decisions.  This
will lead to better software.  Additionally, building consensus in the
community around a proposal before implementation ensures positive
community engagement and buy-in to new features, making them more
likely to be a success.
&lt;/p&gt;
&lt;p&gt;
We aren't great at documenting new features.  Documentation after
coding is complete is an unrewarding experience for most programmers.
Requiring skeleton documentation before code is written is a good
discipline that can form the basis of better documentation in the
future (e.g. by a writer rather than a programmer).
&lt;/p&gt;
&lt;h2 id="Specification"&gt;Specification&lt;/h2&gt;
&lt;p&gt;
Minor features don't require a CREP, and can just be entered in the
issue tracking system as a bug or feature.  As a rule of thumb, a
feature is major if it will take more than a day to implement, or is
likely to involve matters of opinion in its design.
&lt;/p&gt;
&lt;p&gt;
If a feature requires a CREP, the proposer must first find a seconder
for their idea.  This sanity check step happens before a CREP is
written to ensure at least the possibility of consensus on the CREP.
&lt;/p&gt;
&lt;p&gt;
Next the proposer should write a CREP, starting by copying and pasting
the &lt;a class="ext-link" href="http://wiki.ckan.net/CKAN_Revision_and_Enhancement_Proposals"&gt;&lt;span class="icon"&gt;​&lt;/span&gt;template on the wiki&lt;/a&gt; into a new Trac ticket.  This will be with a
CREP status of "draft" and Type of "CREP..  The proposer should notify
the &lt;a class="ext-link" href="http://lists.okfn.org/mailman/listinfo/ckan-dev"&gt;&lt;span class="icon"&gt;​&lt;/span&gt;ckan-dev&lt;/a&gt; mailing
list, and possibly the
&lt;a class="ext-link" href="http://lists.okfn.org/mailman/listinfo/ckan-discuss"&gt;&lt;span class="icon"&gt;​&lt;/span&gt;ckan-discuss&lt;/a&gt;
list for less technical CREPs.
&lt;/p&gt;
&lt;p&gt;
The draft can be discussed via email, verbally, or via the trac
ticket.  In any case, it is the proposer's responsibility to keep the
CREP updated to reflect the current consensus.
&lt;/p&gt;
&lt;p&gt;
Once consensus has been reached, the ticket should be marked as
"accepted" status and assigned to a CKAN release milestone.
&lt;/p&gt;
&lt;p&gt;
When an accepted CREP has been implemented, it should be marked as
"completed".
&lt;/p&gt;
&lt;p&gt;
If no consensus can be reached on a draft CREP, or for some reason an
accepted CREP doesn't get completed, it should be marked as
"rejected".
&lt;/p&gt;
&lt;p&gt;
If a completed CREP becomes obselete, it should be marked as "obselete".
&lt;/p&gt;
&lt;h2 id="Whydoitthisway"&gt;Why do it this way&lt;/h2&gt;
&lt;p&gt;
Given the distributed nature of the core team plus other volunteers,
some kind of written procedure is necessary to ensure a fully
documented and discussed proposal.
&lt;/p&gt;
&lt;p&gt;
The idea of "Enhancement Proposals" which can be semi-formally
proposed and discussed prior to implementation is common in the Open
Source world (&lt;a class="ext-link" href="http://www.python.org/dev/peps/pep-0001/"&gt;&lt;span class="icon"&gt;​&lt;/span&gt;PEPs&lt;/a&gt;,
&lt;a class="ext-link" href="http://dep.debian.net/"&gt;&lt;span class="icon"&gt;​&lt;/span&gt;DEPs&lt;/a&gt;,
&lt;a class="ext-link" href="http://plone.org/documentation/glossary/plip"&gt;&lt;span class="icon"&gt;​&lt;/span&gt;PLIPs&lt;/a&gt;, to name three).
&lt;/p&gt;
&lt;p&gt;
Existing historic proposals exist, called CEPs.  The proposed system
is called CREP (CKAN revision or enhancement proposal) to disambiguate
it from the legacy proposals, and from the delicious fungus &lt;em&gt;Boletus
Edulis&lt;/em&gt;.
&lt;/p&gt;
&lt;p&gt;
Giving a formal structure to the proposal is useful as it gives the
community a means to identify a CREP that's not had sufficient thought
or discussion.  An informal email thread can easily be lost and
important questions (such as backwards compatibility) overlooked.  The
use of the proposed template empowers any community member to ask the
proposer to expand on rationale, deliverables, etc.
&lt;/p&gt;
&lt;p&gt;
The structure chosen is somewhere between Debian's and Plone's.  It
aims to give a structure to the debate, a clear start at
documentation, and also prompt some thinking about implementation and
timescales.
&lt;/p&gt;
&lt;p&gt;
Some projects (e.g. Debian) keep their enhancement proposals in a
versioning repository; others (e.g. Plone) keep them in an issue
tracking system.  Trac is proposed for CKAN because we already use it
for small feature proposals and for team planning.  It seems unlikely
that change tracking on an individual CREP will be useful; a CREP that
changes sufficiently from its original form should probably be marked
"obselete" and a new CREP started.  Using an issue tracking system also
means we can easily track CREPs by state.
&lt;/p&gt;
&lt;h2 id="BackwardsCompatibility"&gt;Backwards Compatibility&lt;/h2&gt;
&lt;p&gt;
Some &lt;a class="ext-link" href="https://bitbucket.org/okfn/ceps/src/76b274888bcf/cep/"&gt;&lt;span class="icon"&gt;​&lt;/span&gt;legacy enhancement proposals&lt;/a&gt;, called CEPs, have previously been started.
&lt;/p&gt;
&lt;p&gt;
They are currently all marked as "active".  Any which require
discussion should be altered by the proposer to match the new CREP
specification and submitted to trac.  The original CEP should be
updated with a banner at the top pointing a reader to the new CREP.
&lt;/p&gt;
&lt;p&gt;
Any that are now obselete should be clearly marked as such in a banner
at the top, pointing a reader to the trac for new CREPs.
&lt;/p&gt;
&lt;h2 id="Implementationplan"&gt;Implementation plan&lt;/h2&gt;
&lt;h3 id="Deliverables"&gt;Deliverables&lt;/h3&gt;
&lt;ul&gt;&lt;li&gt;This CREP, agreed
&lt;/li&gt;&lt;li&gt;Support for proposed statuses in Trac
&lt;/li&gt;&lt;li&gt;Canned reports for listing CREPs in Trac
&lt;/li&gt;&lt;/ul&gt;&lt;h3 id="Risksandmitigations"&gt;Risks and mitigations&lt;/h3&gt;
&lt;ul&gt;&lt;li&gt;That this CREP is agreed, but rarely acted on.  This risk can be
mitigated by nominating a CREP champion in the community or core
team, whose job it is to say "where's the CREP for that?" and
generally own the quality of CREPS
&lt;/li&gt;&lt;/ul&gt;&lt;h3 id="Participants"&gt;Participants&lt;/h3&gt;
&lt;p&gt;
Once agreed, we need a CREP champion -- as yet unassigned
&lt;/p&gt;
&lt;h3 id="Progress"&gt;Progress&lt;/h3&gt;
&lt;p&gt;
This document is the entire proposal.
&lt;/p&gt;
</description>
    <language>en-us</language>
    <image>
      <title>CKAN</title>
      <url>http://assets.okfn.org/p/ckan/img/ckan_logo_shortname.png</url>
      <link>http://localhost/ticket/1127</link>
    </image>
    <generator>Trac 0.12.3</generator>
    <item>
      
        <dc:creator>sebbacon</dc:creator>

      <pubDate>Thu, 05 May 2011 13:15:40 GMT</pubDate>
      <title>summary changed</title>
      <link>http://localhost/ticket/1127#comment:1</link>
      <guid isPermaLink="false">http://localhost/ticket/1127#comment:1</guid>
      <description>
          &lt;ul&gt;
            &lt;li&gt;&lt;strong&gt;summary&lt;/strong&gt;
                changed from &lt;em&gt;Formalise new feature discussion and definition using CREPs&lt;/em&gt; to &lt;em&gt;CREP0001: Formalise new feature discussion and definition using CREPs&lt;/em&gt;
            &lt;/li&gt;
          &lt;/ul&gt;
      </description>
      <category>Ticket</category>
    </item><item>
      
        <dc:creator>wwaites</dc:creator>

      <pubDate>Thu, 05 May 2011 13:28:04 GMT</pubDate>
      <title></title>
      <link>http://localhost/ticket/1127#comment:2</link>
      <guid isPermaLink="false">http://localhost/ticket/1127#comment:2</guid>
      <description>
        &lt;p&gt;
The proposal is not comparable to PEP and DEP because the projects have vastly different requirements. The API stability needs of a programming language or an operating system (e.g. fundamental building blocks that you don't expect to change often or radically) are very different from a web application. The plone one is comparable.
&lt;/p&gt;
&lt;p&gt;
The idea itself is a double-edged sword. It will promote stability which is good but can also tend towards rigidity and stagnation which is bad. Each added bit of bureaucracy and process means fewer people will be willing to collaborate or participate in improving the software.
&lt;/p&gt;
&lt;p&gt;
Overall, -1.
&lt;/p&gt;
      </description>
      <category>Ticket</category>
    </item><item>
      
        <dc:creator>dread</dc:creator>

      <pubDate>Thu, 05 May 2011 14:34:54 GMT</pubDate>
      <title>description changed</title>
      <link>http://localhost/ticket/1127#comment:3</link>
      <guid isPermaLink="false">http://localhost/ticket/1127#comment:3</guid>
      <description>
          &lt;ul&gt;
            &lt;li&gt;&lt;strong&gt;description&lt;/strong&gt;
              modified (&lt;a href="/ticket/1127?action=diff&amp;amp;version=3"&gt;diff&lt;/a&gt;)
            &lt;/li&gt;
          &lt;/ul&gt;
        &lt;p&gt;
Fixed links
&lt;/p&gt;
      </description>
      <category>Ticket</category>
    </item><item>
      
        <dc:creator>thejimmyg</dc:creator>

      <pubDate>Wed, 11 May 2011 15:33:20 GMT</pubDate>
      <title></title>
      <link>http://localhost/ticket/1127#comment:4</link>
      <guid isPermaLink="false">http://localhost/ticket/1127#comment:4</guid>
      <description>
        &lt;p&gt;
This is great idea and it has taken on well. +1 from me. We can update/create new CREP policies as needed.
&lt;/p&gt;
      </description>
      <category>Ticket</category>
    </item><item>
      
        <dc:creator>rgrp</dc:creator>

      <pubDate>Sun, 15 May 2011 11:13:40 GMT</pubDate>
      <title></title>
      <link>http://localhost/ticket/1127#comment:5</link>
      <guid isPermaLink="false">http://localhost/ticket/1127#comment:5</guid>
      <description>
        &lt;p&gt;
I'm obviously a strong +1 but feel we should stick with the CEP name (we have PEP and DEP and CREP really does sound weird compared to CEP).
&lt;/p&gt;
&lt;p&gt;
Also I think we may need to do a bit more to clarify when you just do a good ticket and when one does a CEP (looking at what has occurred already). I think this may be one reason to keep CEPs separate in drafting from trac as will clearly distinguish CEPs from standard tickets.
&lt;/p&gt;
      </description>
      <category>Ticket</category>
    </item><item>
      
        <dc:creator>rgrp</dc:creator>

      <pubDate>Sun, 15 May 2011 11:21:29 GMT</pubDate>
      <title></title>
      <link>http://localhost/ticket/1127#comment:6</link>
      <guid isPermaLink="false">http://localhost/ticket/1127#comment:6</guid>
      <description>
        &lt;p&gt;
one other thing: i think the plan is for CEPs to be in restructured text (for easy transfer to docs). This should be mentioned and the template in the wiki should be in ReST.
&lt;/p&gt;
      </description>
      <category>Ticket</category>
    </item><item>
      
        <dc:creator>sebbacon</dc:creator>

      <pubDate>Tue, 17 May 2011 09:00:50 GMT</pubDate>
      <title>status, description changed; resolution set</title>
      <link>http://localhost/ticket/1127#comment:7</link>
      <guid isPermaLink="false">http://localhost/ticket/1127#comment:7</guid>
      <description>
          &lt;ul&gt;
            &lt;li&gt;&lt;strong&gt;status&lt;/strong&gt;
                changed from &lt;em&gt;new&lt;/em&gt; to &lt;em&gt;closed&lt;/em&gt;
            &lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;resolution&lt;/strong&gt;
                set to &lt;em&gt;fixed&lt;/em&gt;
            &lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;description&lt;/strong&gt;
              modified (&lt;a href="/ticket/1127?action=diff&amp;amp;version=7"&gt;diff&lt;/a&gt;)
            &lt;/li&gt;
          &lt;/ul&gt;
      </description>
      <category>Ticket</category>
    </item>
 </channel>
</rss>