圧倒亭グランパのブログ

30年後の自分にもわかるように書くブログ

属人化問題と、プロジェクトの「加速時期」/「速度を落とさない時期」

社内の方と雑談する中で、「属人化」に対する一つの考えがまとまったので書きます。「属人化排除のやり方」ではなく、「属人化排除を考える時期」についてです。

 

「属人化排除」というアプローチで感じたこと

「属人化排除」は大事だと思います。人的SPOFをなくすのは強いチームを作る上で重要です。しかし最近、複数のプロジェクトに関わっていく中で、「プロジェクトの時期によって属人化排除の優先度は変わる」ということを感じました。

あるプロジェクトXがAさんとBさんを中心に回っていました。そこは結構な属人化が起きていて、ほぼAさんとBさんしか仕様がわからず、他の人がコードを触るのは難易度が高くなっていました。当初は「このままで大丈夫かな」と思っていたのですが、よくよく考えると「あぁ、今はそういう時期だ」と感じました。この感覚を今回は言語化しようと思います。

 

プロジェクトの「加速時期」と「速度を落とさない時期」

属人化の観点でプロジェクトを見た時、大きく2つの時期があると感じました。それは「加速時期」と「速度を落とさない時期」です。

加速時期

プロジェクト発足直後や、優先度が高く短期的なスケジュールで進むプロジェクトがこれに該当すると思います。作ることが最優先であり、他のことの優先度が下がります。「属人化排除」も優先度を下げるべき時期です。この時期に「属人化排除は正義だ!」と極端な考え方を持っていると、必要以上にそちらの作業を行ってしまい、一番優先度の高い「作ること」が遅くなってしまいます。

前述したプロジェクトXは、ちょうどこの時期なんだなと納得しました。まさに最優先で「作ること」が重要であり、AさんとBさんはガリガリとコードを書いています。このあたりがわかってきたおかげで、必要以上に属人化の心配をすることはなくなりました。「次のフェーズで考えればいいや」と思うようになりました。

速度を落とさない時期

「速度を落とさない時期」は、プロジェクトの運用フェーズに入るとやってきます。この時期にさしかかったときに属人化が重いと、チームの速度が極端に落ちてしまいます。

  • あのバッチがエラーだ!でも知ってる人はCさんだけだ!どうしよう!
  • ○○の修正を行いたいが、よくわからないので手をつけられない

この場合、「加速時期」は既に終わっています。積極的に属人化排除を行うべきフェーズです。これを放置しておくと、気づけば膨大な生産性の損失になることもあります。まさに「速度を落としてはいけない時期」であり、属人化排除の優先度は上がります。言い換えれば、そこにエンジニアリングの価値がある、とも言えます。

 

とはいえ

とはいえ、極端に「加速時期は属人化排除完全無視!」「運用フェーズは属人化排除最優先!」ということではありません。バランスが大事であり、今はどのくらいのバランスかを考えることが大切です。重要なのは「時期によって変わる」ということを認識することです。

現在は複数のプロジェクトを持っていますが、よくよく考えると「加速時期」のものもあれば「速度を落とさない時期」のものもあります。それぞれに適した開発ができるようにしたいです。

おそらく、スーパーなエンジニアの人は、加速時期でガリガリコードを書きつつも、属人化排除の配慮もできているのだと思います。自分の周りにはスーパーなエンジニアの方がたくさんいるので、まずはその方たちを見習いたいと思います。