属人化問題と、プロジェクトの「加速時期」/「速度を落とさない時期」
社内の方と雑談する中で、「属人化」に対する一つの考えがまとまったので書きます。「属人化排除のやり方」ではなく、「属人化排除を考える時期」についてです。
「属人化排除」というアプローチで感じたこと
「属人化排除」は大事だと思います。人的SPOFをなくすのは強いチームを作る上で重要です。しかし最近、複数のプロジェクトに関わっていく中で、「プロジェクトの時期によって属人化排除の優先度は変わる」ということを感じました。
あるプロジェクトXがAさんとBさんを中心に回っていました。そこは結構な属人化が起きていて、ほぼAさんとBさんしか仕様がわからず、他の人がコードを触るのは難易度が高くなっていました。当初は「このままで大丈夫かな」と思っていたのですが、よくよく考えると「あぁ、今はそういう時期だ」と感じました。この感覚を今回は言語化しようと思います。
プロジェクトの「加速時期」と「速度を落とさない時期」
属人化の観点でプロジェクトを見た時、大きく2つの時期があると感じました。それは「加速時期」と「速度を落とさない時期」です。
加速時期
プロジェクト発足直後や、優先度が高く短期的なスケジュールで進むプロジェクトがこれに該当すると思います。作ることが最優先であり、他のことの優先度が下がります。「属人化排除」も優先度を下げるべき時期です。この時期に「属人化排除は正義だ!」と極端な考え方を持っていると、必要以上にそちらの作業を行ってしまい、一番優先度の高い「作ること」が遅くなってしまいます。
前述したプロジェクトXは、ちょうどこの時期なんだなと納得しました。まさに最優先で「作ること」が重要であり、AさんとBさんはガリガリとコードを書いています。このあたりがわかってきたおかげで、必要以上に属人化の心配をすることはなくなりました。「次のフェーズで考えればいいや」と思うようになりました。
速度を落とさない時期
「速度を落とさない時期」は、プロジェクトの運用フェーズに入るとやってきます。この時期にさしかかったときに属人化が重いと、チームの速度が極端に落ちてしまいます。
- あのバッチがエラーだ!でも知ってる人はCさんだけだ!どうしよう!
- ○○の修正を行いたいが、よくわからないので手をつけられない
この場合、「加速時期」は既に終わっています。積極的に属人化排除を行うべきフェーズです。これを放置しておくと、気づけば膨大な生産性の損失になることもあります。まさに「速度を落としてはいけない時期」であり、属人化排除の優先度は上がります。言い換えれば、そこにエンジニアリングの価値がある、とも言えます。
とはいえ
とはいえ、極端に「加速時期は属人化排除完全無視!」「運用フェーズは属人化排除最優先!」ということではありません。バランスが大事であり、今はどのくらいのバランスかを考えることが大切です。重要なのは「時期によって変わる」ということを認識することです。
現在は複数のプロジェクトを持っていますが、よくよく考えると「加速時期」のものもあれば「速度を落とさない時期」のものもあります。それぞれに適した開発ができるようにしたいです。
おそらく、スーパーなエンジニアの人は、加速時期でガリガリコードを書きつつも、属人化排除の配慮もできているのだと思います。自分の周りにはスーパーなエンジニアの方がたくさんいるので、まずはその方たちを見習いたいと思います。