問題追跡システムに何を記録するか

問題追跡システム(Redmine)によるチケット駆動開発(もどき)を行っています.
機能追加やバグ修正を解決するためには,どのように問題を定義し,システムに記録すればよいのでしょうか.
また,モチベーションがあがるような記述内容はあるのでしょうか.

この問いに対して私は現在,問題をGTDのプロジェクトとして扱うことを試しています.

考え方

ストレスフリーの仕事術―仕事と人生をコントロールする52の法則 を参考に,問題に対して

  • 目的
  • 判断基準
  • 成功条件(望ましい結果)
  • 次の行動

を記録します.

問題(チケット)を2,3日で解決できる粒度で記述しています.

目的

なぜこれを解決しなければならないか

判断基準

この問題解決を行うにあたり,意思決定したり行動したりする際の判断基準

成功条件

成功したと言える状態の定義
成功した状態がイメージできる粒度で記述

次の行動

次の起こすアクション
終了条件が明確にイメージできるように記述
脳が冴える15の習慣 記憶・集中・思考力を高める (生活人新書) を参考に,この行動にかける時間を記録する.時間に制約をかけること(それを死守する姿勢)によって,重要な部分から手をつけるようになる.
決めた時間以上に時間がかかりそうな際は,次の行動を分割して次の行動を記述する.
明確にイメージできる終了条件と時間制約によって,モチベーションが高まる.
ソフトウェア開発を行っているので,この次の行動の粒度でSCM(subverison)にコミットを行っています.
成果物があればそれを記述したり,ファイルを添付したりします.

Redmineへの適用

上記の項目を,Redmineのチケット作成時,チケット更新時に自動的に挿入する(やっつけ)パッチです.

Redmine-0.7.3

app/views/issues/_form.rhtml

変更前

<%= f.text_area :description, :required => true,
                   :cols => 60,
                   :rows => (@issue.description.blank? ? 10 : [[10, @issue.description.length / 50].max, 100].min),
                   :accesskey => accesskey(:edit),
                   :class => 'wiki-edit' %></p>

変更後

<% if @issue.new_record? %>
<%= f.text_area :description, :required => true,
                   :cols => 60,
                   :rows => (@issue.description.blank? ? 10 : [[10, @issue.description.length / 50].max, 100].min),
                   :accesskey => accesskey(:edit),
                   :value => "* 目的
* 判断基準
* 成功条件
",
                   :class => 'wiki-edit' %></p>
<% else %>
<%= f.text_area :description, :required => true,
                   :cols => 60,
                   :rows => (@issue.description.blank? ? 10 : [[10, @issue.description.length / 50].max, 100].min),
                   :accesskey => accesskey(:edit),
                   :class => 'wiki-edit' %></p>
<% end %>
app/views/issues/_edit.rhtml

変更前

    <fieldset><legend><%= l(:field_notes) %></legend>
    <%= text_area_tag 'notes', @notes, :cols => 60, :rows => 10, :class => 'wiki-edit' %>
    <%= wikitoolbar_for 'notes' %>

変更後

    <fieldset><legend><%= l(:field_notes) %></legend>
    <% @notes="* 次の行動/制限時間\n" if @notes == nil || @notes == "" %>
    <%= text_area_tag 'notes', @notes, :cols => 60, :rows => 10, :class => 'wiki-edit' %>
    <%= wikitoolbar_for 'notes' %>