Tbpgr Blog

Ruby プログラマ tbpgr(てぃーびー) のブログ

ฅ(・ω・ฅ)/{ Make it simgle ( typo ではない ) }

概要

Make it simgle ( typo ではない ) という考え方について 

Make it simgle って何?

Make it simgle とは

Make it simpleMake it single

を合わせたタスク管理の指針を表す造語です。
(私が作りました ※経緯は後程)

複雑なタスクは、

  • シンプルな単位 ( Simple ) に分割する
  • 1 つのことだけ行う( Single ) タスクになるまで分割する

という指針です。
このエントリで伝えたい結論はこの指針であり、以降は経緯や細部に関する内容です。

経緯

この記事を書くに至ったきっかけです。

そう。この記事のタイトルの由来です。
誤字だけど誤字じゃない( 草壁メイちゃん談 )

閃きがもたらすタスクの複雑化

経験値と閃き

  • 経験値が増えると、一つの対象に対して様々な改善方法を閃くようになる
  • 閃いた改善方法に対して調査をしていると、その改善方法を改善するための方法を閃く
  • 以下、延々と続く閃き

閃きの特性

※主観です。反対意見は大いに認めますし、人それぞれでしょう。

  • 閃いてから時間が経たないうちに、最低限の深堀りをする
    • 個人的に、閃いたあとに寝かせると閃きを形にできないことが多い
      • 反対に、そろそろ閃きがでそうな時は寝かせたほうが成功しやすい
    • 広がりを見せそうな閃きがあった場合、実現性に関する下調べを後に回すと、継続調査するモチベーションも下がる
    • 「鉄は熱いうちに打て」
  • 閃きを深堀りすると連鎖的な閃きがある
    • 閃きがさえている時に継続して深堀りする利点がある
    • 閃きハイ・閃き確変

タスクの状態

  • スタート時点のタスクからどんどんネストしていく
  • 頭の中に保存しきれない情報量
  • ヤクの毛刈り状態に。(ヤクの毛刈りについては、別途説明)
main_task
  ┣ sub_task1: main_task を改善する手法1
  ┃  ┣ sub_sub_task1_1 sub_task1 を改善する手法1
  ┃  ┗ sub_sub_task1_2 sub_task1 を改善する手法2
  ┗ sub_task2: main_task を改善する手法1
     ┣ sub_sub_task2_1 sub_task2 を改善する手法1
     ┗ sub_sub_task2_2 sub_task2 を改善する手法2

Simplify !!

Images

Before

After



Context

例えば、 かんばん方式のタスク管理ツール Trello で、
特定ボードのラベルを全て削除する というタスクを割り振られたとする。

実現方法を検討している最中に、

  • 手動で行うよりも Trello の API Wrapper を利用してスクリプト化すべきことに気づく
  • 個別にスクリプト化するよりも、繰り返し実施できるように汎化して gem のライブラリにした方が良いことに気づく
  • 「個別のスクリプトを作成するよりも汎化して gem のライブラリにした方良い」というアイデアが以前行った他の対象に適用することに気づく
  • API wapper を利用して繰り返し行う処理を自動化するノウハウについて esa.io などで共有する
  • 繰り返し行う処理を gem のライブラリとして自動化するノウハウにうちて esa.io などで共有する
  • 繰り返し行う処理を単発の Script にするか、 gem にするか判断基準を決めて esa.io などで共有する
  • esa.io にノウハウを残す際に template を作成する方が良いことに気づく
  • template の存在を知らせるために esa.io にノウハウ共有のガイドラインを作成した方が良いことに気づく

などのように閃きが連鎖した場合を考えます。

Division

  

閃いたアイデア群を個別のタスクに分割します。

粒度については、 上記の Context の箇条書きの 1 項目ずつをタスク化する。
これを Trello の Card に割り当てる。
各個人に割り振る最小単位のタスク。

一般的な TODO 管理や かんばん系のツールはこの粒度までを扱うケースが多いでしょう。

Sole

  

一つだけの役割を持つ最小のタスクになるまで分割します。

先の例なら、 Division のフェーズで分割して作成した Card を一つ選びます。
例えば、

  • Trello の API Wrapper を利用してラベルを削除するライブラリを作成する

このタスクをさらに分割すると、

  • ライブラリの設計(構成)を行う
    • 仮に構成設計で決めた各要素を部品と呼ぶ。
  • 各部品の, 細部設計・実装・テスト をそれぞれタスクに分割する

このタスクは各個人が自分で管理する最小限のタスクです。
仮に 原子タスク( Atomic Task ) と呼びます。

個人的に、この粒度のタスクを管理するために tudu という gem を作成しています。
自分のためのツールなので、作りが粗いですが、1つのタスクを多くのタスクに分類できる場合は
この gem を利用しています。
( tudu gem については、別途説明)

Timing

閃き群をタスクに分割するタイミングを得るにはポモドーロテクニックが有効です。

ポモドーロテクニックは時間を区切って集中力を保つ手法だが、
区切られたタスクの合間で、振り返りを行う。

この振り返りのタイミングで閃きの内容の

  • タスク化
  • 優先度付け
  • 取捨選択
    • 即着手しないが、 Icebox としてアイデアを残しておく
    • タスクが増えすぎないように破棄する

を行うことができる。

Workflow

  1. 閃きで作業が複雑になり始める
  2. 鉄が熱いうちに最小限の調査をして、メモを残す
  3. ポモドーロの合間にタスクを Division の粒度で分割, 優先度付け, 取捨選択
    1. 整理するタスクが多い場合は, タスクの整理自体を 1 つのタスクにする
  4. 次のタスクを選択する
  5. 選択したタスクを 原子タスク に分割する
  6. 原子タスク が多ければ、 tudu gem を利用して進捗管理をする
  7. ひとつひとつの 原子タスク を消化する
  8. ひとつのタスクが完了
  9. Trello のカードを Done に移動

※以下、おまけ要素なので読まなくても良い

ヤクの毛刈り( yak shaving

ヤクの毛刈りとは?

本題を解決するために新たな問題が発生。
その連鎖を表します。

ヤクさん | Wikipedia

tudu gem

tudu gem とは?

tudu gem | GitHub tudu gem | RubyGems

原子タスク( Atomic ) を管理するための Ruby gem の CLI ツール
ググラビリティを考えて、妙な綴りにしています。

以下、どんな gem なのか少し例示。

初期化

Tudufile は拡張のために作ったけど今のところ拡張してない。
YAGNI の産物。

% tudu init
% tree
.
└── tudu
    ├── doings
    ├── dones
    ├── todos
    └── Tudufile
%

タスクの追加

% tudu add hoge hige hage
hoge
hige
hage
complete add todo 'hoge' to tudu/todos
complete add todo 'hige' to tudu/todos
complete add todo 'hage' to tudu/todos

タスクの確認

% tudu tasks -c
========TODOS========
hoge
hige
hage
========DOINGS========
========DONES========

% tudu progress
0/3|>          |0%

TODO から DOING へ

% tudu choose
hoge not exists
complete remove todo 'hoge' from ./tudu/todos
complete add doings 'hoge'
% tudu tasks -c
========TODOS========
hige
hage
========DOINGS========
hoge
========DONES========

DOING を DONE へ

% tudu done -p
1/3|===>       |33%
% tudu tasks -c
========TODOS========
hage
========DOINGS========
hige
========DONES========
hoge

タスクをカラー表示

f:id:tbpg:20150207003809p:plain

すべてのタスクを実施

% tudu done -p
2/3|======>    |67%
% tudu done -p
All Tasks Finish!!
3/3|==========>|100%

備考

  • TODO / DOING / DONE の中身はただのテキストファイルなので、 編集が不自由な時はテキストファイルを直接編集してもいい

  • tudu gem は gem を作り始めたばかりの頃のものなので中身は黒歴史

  • tudu gem / Trello / Toggl を連携してローカル環境とクラウドのタスク管理をつなげないかな、と妄想中