あるプロダクト開発において計画やTODOリストをつくるとき、
開発を完了する
とか
実装を完了する
などのような文言でタスクを定義することはよくあるかと思います。
「開発が完了する」とは?
しかし「開発が完了する」と書くと、のちにチーム内の認識ズレによるトラブルが起きることがあります。
たとえば「開発が完了する」というタスクが完了しました。そこでプロダクトオーナーが
よし、じゃあリリースしましょう!
と言ってもエンジニアからは、
「いや、開発が終わっただけです。テストはまだだし、リファクタリングもしたいです」
みたいなやりとりは、オーナーもエンジニアも人生で一度はかならず経験があるでしょう。
つまり「開発」および「開発が完了する」という言葉に対してさまざまな解釈できてしまう、という問題があります。
どう定義すべきだったのか
これを解消するためには「開発」という言葉を使わずに表現するのが良さそうです。
経験則では、とくに下記を意識して定義しなおすと上手くいきやすいと感じています。
- 解釈の余地がない「状態」や「条件」を定義する
- 「次のステップ」が存在する場合は「(ステップが)開始できる」状態を完了条件とする
たとえば次のような例はどうでしょうか。
具体例
リリースが完了している
書けるならこれがもっとも適切な表現でしょうか。
開発のタスクのすべてのみならず、リリースに関するタスクも含んでいることがよくわかります。成果物としても完成してることが明確ですね。
同じような表現として「ユーザが〜を利用している」みたいなのも良いでしょうか。
マージの準備が完了している
「リリースが完了する」までが難しそうな場合、次に書けそうなのはこれでしょうか。
この書き方だと、テストやドキュメントをふくむ様々なタスクの完了が期待されていることがよくわかります。
「開発が完了する」の定義をこれにしてしまうのはどうでしょう? 組織やチームが同じ認識で動けるなら、それもアリに見えますね。
〜をローカルで動かせるようになる
この書き方は、あいまいな部分こそ残りますが、まだ「完成」ではないことは伝わるでしょう。テストやリファクタリングの完了有無はスコープに入っていません。
またリリースまでを見通していないこともわかるため、この計画の完了目処をリリース日にしてしまうようなトラブルはなくなるはずです。
まとめ
DDDの文脈では「ユビキタス言語」が重要視されていますが、これはプロダクトにかぎらずコミュニケーションにおいても同様だと感じています。
ただコミュニケーションにおいてはわざわざ言葉の定義をするよりは、よりわかりやすい、解釈の余地が小さい言葉をつかってするべきだと思いました。
「うちはこんな表現で計画している!」などあれば、ぜひコメントで教えてください!