チームのプログラミングの課題点を見つけたら、現状と特徴を考えた対策をしよう

f:id:hrmch-ioii:20190205230504j:plain

フリーランスエンジニアの @nabeemichi です。

アプリケーション開発はチームで行うことがほとんどですが、 メンバーによってプログラミング力が異なるので、品質や実装方法が異なってきます。 違う人が作ってるのだから違ってとうぜんではあります。

この現象を防ぐために、ペアプロやモブプロをしたりして全員のレベルアップを図ったりするのは一般的にはいいことだと思います。 しかし、それって本当に理想の状態へ近づいているのでしょうか?

例として長期的なプロジェクトについて考える

例えば、長期的に開発しなければならない大きなプロジェクトだったとします。

とある機能は作った人も理解不能なくらいぐちゃぐちゃになっているが、なんとか動作する状態になっていたとします。 一方で他の機能は仕様変更にも不具合にも強い状態でつくられていたとします。

ここでKPTのような、問題点の棚卸しをするような機会があったとき、 問題としてでてくるのは、ぐちゃぐちゃになっている機能についてです。 ぐちゃぐちゃの機能は、メンテナンスもし辛いし不具合も多く、修正も困難を極めます。 そして比較対象として出されるのは後者の仕様変更、不具合に強い状態の機能です。 課題点としては、ぐちゃぐちゃの機能を作らない方法はないか?ということになります。

ここで、あなたならどうゆう対策を取るでしょう?

モブプロやペアプロをしてレベルの底上げ

と、流行りごと大好きエンジニアは言うかもしれません。 一般的には新しいことを取り入れてみるのはいいことだと思いますが、 これで課題が解決されるでしょうか?

僕の見解とすると、こいつは何も考えてないで知識だけ使おうとしてるな!って思ってしまいますね。

自分たちの置かれてる状況を把握しているか?

長期プロジェクトということを考えると、人の入れ替わりが発生する可能性が高いです。 なんならどんどん新しい人が入ってくるでしょう。実際にエンジニアは出入りが激しいですし。

ペアプロやモブプロで解決を試みた場合、現在のメンバーに対しては有効ですが、後々参加するであろう未来のメンバーに対しては有効ではありません。

え!?新しいメンバーが入ってきたら、またやればいいじゃないか!だって?

別にそれでもいいですが、その頃には別の問題が話題になっていて、今解決しようとしてる問題は忘れ去られているでしょう。 だから、今解決しようとしてる問題を新規メンバーが繰り返す可能性があります。 ここはをどうにかしないと、同じ問題の繰り返しで生産性もチームとしての進化もありません。 同じ課題を繰り返さない仕組みを考えないと意味がないのです。

ではどうするか?ということなんですけれども、僕だったらアンチパターン集として失敗例集を作成すると思います。なぜ失敗なのか?を解説して。 でも作っただけでは誰も見てくれないので、ソースコードレビュー時にアンチパターンだと気づかせることができる方法を考えます。 簡単にアンチパターンだとわかるチェックリストを作成でしょうかね。このチェックリストからアンチパターン集へリンクしましょう。 なぜ失敗なのかの理由へいつでもたどり着ける経路を用意して、確認できる状況をまずは作ります。 調べて出てかないと、また同じ発明するやつ多発するからな。

もちろん、モブプロやペアプロは個人のレベルアップとかにはすごい役に立つとは思いますよ。何を解決したいかによります。