チーム開発について
7/21 〜 7/23 に2泊3日で合宿を行った。
これまで、チーム開発をしておらず、1サービス1開発担当者で開発を行ってきた会社さんと合同で、弊社で行っているチーム開発を共有することが目的の合宿だ。
弊社からは4名が参加、合計7名で日光で行ってきた。
その合宿で、チーム開発のメリット・デメリットについて改めてみんなで考え、議論したのでまとめてみる。
チーム開発のメリット
まずはメリットについて。
技術的な幅が広がる
自分が知らなかった設計方針、コーディング方法など、メンバー間でノウハウが共有できるので、エンジニアとして技術的な幅が広がる。
使ったことがないライブラリやサービスなどの情報も共有したりするため、知見が広がる。
障害対応が迅速にできる
チーム開発をすることで、複数人でサービスの障害になりそうなポイントを把握できるため、障害発生時も調査や対応が速くできる。
複数人で障害復旧作業対応ができるため、サービス復旧も速い。
コードレビューによって品質向上が見込める
テストしやすい実装方法だったり、メンテナンスしやすい書き方などチームで「どうあるべきか」ということを議論しながら進められるため、一人で開発をしているより技術的に成長できる。
また、チームでチェックするため、実装漏れやテスト漏れが少なくなる。
リリース前にバグが発見できる可能性が高まる。
必然的に、品質の向上が見込める。
ビジネスの継続性
チームで開発することで、属人化の撤廃が可能。
仮に開発担当者が怪我や病気で入院してしまって長期で離脱してしまったり、退職してしまっても、その人以外の人が保守・継続開発が行える。
ビジネスの継続性においても、チーム開発はメリットが大きい。
得意な分野、苦手な分野を補完し合える
自分が苦手な技術や分野について、得意な人に任せることができる。
逆に、自分が得意な分野で他の人の苦手な分野を担当することで、チームに貢献できる。
なにより楽しい!
一人で開発を行っていると、なかなかうまく行かなかったり、煮詰まってしまうこともあるが、チームで開発を行っているとハマったときに相談できる。
みんなで一丸となって1つのサービスを作り上げていっている一体感のようなものがあり、楽しい!
チーム開発のデメリット
チーム開発のデメリットは特にないような気もするが、あえて挙げてみる。
チームメンバーが多くなった時に、情報共有のコストがかかる
新しいメンバーが入ってくると、前提として共有している知識・背景に偏りができてしまうため、その前提の情報共有に時間がかかってしまうかもしれない。
そういった暗黙知をなくすためにも、社内の情報共有を頻繁に行う仕組みや雰囲気作りが必要。
コードレビューのコスト(レビュー待ち、レビューしないといけない)
原則としてチームメンバー全員でのコードレビューが終わっていないと、master ブランチにマージしないという運用をしているため、メンバーが増えてくると他の人のレビュー待ちの状況が発生することもあるかもしれない。
プルリクエストの説明文のところに、 レビュー優先度 (例えば、「最速でお願いしたい」「なるべく早く」「お時間あるときでOK」など)を設けて、メンバー間で共有したり、「◯◯さん、コードレビューお願いします!」などメンバー間で密なコミュニケーションを取ることが必要。
メンバーの構成によっては、他メンバーに引きずられて作業待ちなどが発生する恐れがある
メンバーによって、スキルの差があったり、作業効率の差があったりして、他のメンバーの作業待ちが発生することもあるかもしれない。
その際は、コミュニケーションを取って、ハマっている箇所はないか、設計等で悩んでいるところはないかを随時確認することが必要。
また、スキルトランスファーを行い、メンバー同士でスキルを向上させることで改善できるかもしれない。
以上、簡単ではあるがチーム開発のメリット・デメリットについて議論したことをまとめてみた。
チーム開発には、上記のようにメリットが多いので、こういったことを認識、頭に常に入れた上で、チームメンバーが チームとしてどうあるべきか を考えながら開発を行うことが非常に重要なのではないだろうか。
余談。
業務終了後に会社メンバーでやった 大富豪 で、メンバーの普段業務中には見ることができない一面を見ることができて、なかなか面白い合宿だった。
また、合宿やりたい。