このエントリーは KLab Advent Calendar 2015 の12/23 の記事です。
VoQn です。KLab で現行は主に内製のUnityライブラリ開発をやってます。
今回は特にソフトウェアな話というより、ピープルウェアの話をします。
サービスでもツールでも、当然 「必要がある」 から、あるいは 「価値がある」 から開発に着手するわけですけれど、
その意義を信じきれるかどうかは個人の心象に依ります。
または、当初は意義のあるミッションを担っていると思っていたとしても、開発が難航したりある程度の目処がついたタイミングで、
と、余計な雑念に囚われて生産性が下がったり、完了が遠のいたりしてしまう事があります。
これは最初にどれだけ意欲が高かろうと出会う問題で、当人の意思の問題であろうと、結果的には成果そのものに影響しますし、
「君たち、最近モチベーションが低いぞ。もっと熱意を持って!」 と叱咤激励して解決するものではありません。
この記事は、過去に自身が経験した 「やっていく」 プラクティスを紹介しつつ、自戒として、「来年も一年頑張るぞい…」と奮起するような内容です。
無論、無理な締め切りを設けても良くないのですが、全ての課題で正確な作業量が見積もれる事は稀で、プロジェクトの進捗を大きく狂わせないように 「ピボットするための期日」 を予め明確に設けた方が結果的にマシな成果に落ち着きます。
最初は「どんなに軽くても1スプリント(2週間=10日)を最短として提示する」のがコツです。10人日という工数でなく、2週間後に成果物をチェックする、という約束がポイントになります
1営業日は1人日ではない
こう返しましょう。 「リリースできないと困る時はいつまで?」
「欲を挙げたら一ヶ月も二ヶ月もかかるぞ」 としか思えないトピックに対しては 「2週間待ってくれ、プロトタイプをでっちあげてみせるから」 と一旦そこで合意をとって、その約束は守った上で計画の修正を約束してもらうようにします。
プランニングポーカーなどで、長期計画のタスクの優先度や難易度をチームで重み付けするにあたって、 『だるさ』(億劫度) は必ず事前に予測するようにします。
実際の業務でも 「技術的な難しさ自体は簡単な方だけれど… とにかく、着手するのは億劫だ」 と感じるモノゴトはあります
スプレッドシートなどに課題をまとめる時、こんな風にします
みっしょん | 優先度 | 難易度 | 億劫度 | 備考 |
---|---|---|---|---|
複数の端末解像度に対応したUIレイアウトの仕組みを作る | 4 | 2 | 5 | 実機テスト必須(iOS 3機種、Android 3機種) |
多言語対応でUIアセット切り替えする仕組みを作る | 3 | 3 | 5 | 検証用素材を日中韓英ぶん用意せな… |
重要なのは、この「煩わしさ」は、「そのタスクを完了した際に、どれだけ体力と意欲を使い果たすか」 の指標であることです。
「技術的には難しくないから、経験の浅い人にまとめてやってもらおう」と、そうした「だるいタスク」を集中させてしまうと、あっという間に人員が疲弊して 最悪離職します
恥ずかしながらこういう経験があります。
やろう!『だるさ』見積り!本当に大事だよ!
具体的には Github の issue サマリを記載していく事柄で実践します
また、自分がPullRequestで書く際に意識しているフォーマットは以下の通りです
意識の高い時はこういうシートをコレクト社の 情報カード セクション 5×3 に書いてから退社していました
- [ ] 開発タスクA (8)
- [ ] モジュールa のテスト追加 (ワークフローHoge と Huga の異常系が不足) (2)
- [ ] モジュールa のHoge Huga Fooの実装改修 (2)
- [ ] モジュールb のリファクタリング (2)
- [ ] モジュールc のインターフェースのDocコメント (2)
- [ ] 頼まれてたPR #XX のコードレビュー (2)
- [ ] 定例の報告書く (1)
- [ ] 休む日の勤怠連絡出す (1)
- [ ] 勉強会資料の草稿書く (2)
丸括弧の中の数字は「そのタスクに今日かけるポモドーロ単位(25分)」を見積りで出します
ポイントは 仕事始めでなく、仕事の終わり に書く癖をつけることで、次の日に出社した時に始めるべき事をちゃんと積み残せる分、ダラダラ深夜まで会社に残るのを防げました
(逆に言えば、こういう習慣を辞めた途端にgdgdになって勤怠が大いに狂ったままになった)
その時に着手しているコトに対して、一番モチベーションを高く保ちつつも、開発そのものを楽しめるのに一番効果があるやり方でした。
プロトタイプやデモアプリケーションや、あるいはスクリーンショットでもいいので、 「今しがた、こんなのが出来た!」 と見せびらかすのは大きな意味がありました。
躍起になって開発している最中は自身が抱えてる技術的課題も、それに関する知識も新鮮に記憶していますが、喉元すぎれば熱さ忘れるもので。
開発に関して調べた記事のURLや、読んだ本、キーワードは出来るだけ書き残して、次に同種の悩みにブチ当たった同僚にさっと助け舟が出せるようにしておきます
明確に振り返ることが出来ていたプロジェクトでは以下のようなコミットログを意識していました
#${issue_id} ${コミットサマリ}
-- ${何を削ったか}
++ ${何を追加したか、変えたか}
* ${レビューなどでツッコミ入れて欲しいこととか、判断に迷ってる事柄}
-> ${↑ に対して、自分なりに「〜とかでいいのでは」と思っている解決方法}
コードレビュワーに「この件を念頭においてレビューしてほしいんだ」と伝えるための備忘録として使います。
あと、こういう風にコミットログを書けるような程度にコミット粒度を細かくするというのも意識していけます。特に Unity プロジェクトはうっかりすると土石流のようなdiffを産んでしまいがちなので。
報告の仕方にもよりますが、定例のミーティングの報告が書面で共有されるのなら、報告は細やかにした方が振り返り時に価値のある資料になります
# とあるタスクについての進捗報告
## Done: 完了させたコト
- (ざっとした報告の概要)
- (グッダグダした言い訳)
## Doing: 未完了&着手中
- (甘い現状認識)
- (ダラッダラした言い訳)
## ToDo: 積みタスク
- (雑な課題意識)
− (意識の低さの言い訳)
グダグダした報告を慎んで、寡黙に「結果を優先してさっさと出そう」としたところ、そっちの方が却って進捗が遅れました。
プロジェクトオーナーからしたら、計画のズレに対し「なぜ?」「どうして?」 が材料として多く持てなければ、 「えっと… 急いで?」と圧(あつ)をかけていく しかなくなるわけで。
「沈黙は金、雄弁は銀」とは言いますが、チームワークにおいて黙ったまま進捗遅れてたら世話ないですし、何より技術的問題を共有しなければ協力し合えないので、手持ちの情報は洗いざらい出しきるつもりでいった方がいいです。
ポモドーロ・テクニックで作業量を記録してあると楽ですし、実態も正確に測れます。
これは、タスクが終わった直後にする方がいいです。
次回に同種の開発項目にあたる際の見積りの精度をより高められれば、未来の自分が苦労しなくて済みます。
数週間すぎてからだと、数字も曖昧になりますし、総括も対策も的確なものでなくなってしまいます。
成果物以外に 「この開発を経て、何を得たか」 を人に語るのはモチベーションを維持するのにも、自身の成長にも効果があります。
リリースノート以外に、社内のメーリングリストに 「こういうものを作ったよ!こういう風に使えるよ」 と宣伝もかけて流したりしましたが、
それらの技術的なノウハウは(しなかったトピックよりも)忘れずにいられています。
振り返り時に報告するのもいいし、勉強会で発表したり、ブログに書くとかでもいいでしょう。
この記事自体も、そういうことをこまめにやらずに、ひどい下半期を過ごしたことへの反省の意味も込めて書いています。
これらは実際にやってみて、確実に効果を実感するものばかりでしたが、その意義を共感させる間もなくチームメイトに啓蒙するのは悪手であるとも感じています。
なぜそうした習慣をはじめるに至ったのか? を省みることもなく、闇雲に強制してしまっては、それが果たしたい目的から逸脱し、ただ漫然と日々の作業を面倒な儀礼として潰してしまうだけです。
これらの習慣は、あくまで 「自分は〜において失態やらかして、そこで導入してみたら効いた」 こととして紹介するに留めています。
むしろ、もっとより簡素で手軽な方法を各自で編み出していいわけですし、そうした小さな事柄でもノウハウとして交換しあえる環境と文化が耕されることが大事かなと思います。
各自やっていきましょう
本題には関係ないのですが、最近リリースされた パズルワンダーランド をどうか何卒よろしく応援お願いします!!!
KLabのゲーム開発・運用で培われた技術や挑戦とそのノウハウを発信します。
合わせて読みたい
KLabのゲーム開発・運用で培われた技術や挑戦とそのノウハウを発信します。