2021.12.14
ハコベルソリューションチームでのモブプログラミングについて
はじめに
はじめまして!2021年に新卒で入社した横山です!現在はハコベル事業本部 ソリューションチームでハコベルコネクトというサービスの開発を行っています。
ハコベルコネクトは一般貨物の荷主と運送会社との間の配送依頼をWebで行えるようにしたサービスです。車両や依頼先運送会社の管理、請求管理などの配車にまつわる業務をデジタル化することで業務工数を削減することができます。
我々のチームではさらにユーザーの配車工数を削減することをミッションとして日々開発に取り組んでいます。その中で日常的にモブプログラミング(以下モブプロ)やペアプログラミング(以下ペアプロ)を行っているのですが、実際に行っている背景であったり、良かったこと、改善していきたいことなどを紹介します!
> モブプログラミングとは複数人で集まって1つの画面を見ながら書く人と指示を出す人に別れてプログラミングを行> う開発手法です。詳しくは以下の記事が参考になると思います!
モブプログラミングへのいざない | Raksul ENGINEERING
背景
ソリューションチームでモブプロを活用しはじめた背景は大まかに2つあります。
1つ目は僕自身が入社してからのキャッチアップに苦労したことです。入社してのオンボードでドメインモデルや既存機能の説明をしていただいたのですが、長年作り上げてきているので複雑になってきており、古くからある機能はドキュメントも少なかったのでキャッチアップがとても大変でした。最近は新しいメンバーが増えてきて、今度は自分がオンボードしないといけない立場にもなってきているので、オンボードフローを改善できないかと考えました。
2つ目は特定の人しか把握していない仕様があることです。初期のサービス開発に携わったメンバーが少なくなってきており、既存機能の実装の背景やドメインモデルに対するドキュメントがなく、知識が属人化していました。新メンバーが加入する頻度も増えてきて、さらに知識や暗黙知の平準化が必要になってきています。
以上のような背景があり、どうすれば改善できるかチームで話し合った結果、普段の開発やオンボードにモブプロを組み込もうとなりました。
やってること
サーバーサイドエンジニア同士、フロントエンドエンジニア同士はもちろんのこと、サーバーサイドエンジニアとフロントエンドエンジニア、サーバーサイドエンジニアとQAエンジニアでも行います。
また、新メンバーのオンボードにもモブプロを組み込んでいます。
モブプログラミングの様子
サーバーサイドエンジニア同士、フロントエンドエンジニア同士
一番頻度多く行われています。新機能の実装時にはその機能におけるコアの部分を中心にモブプロで実装します。また、新機能でなくても実装が複雑で共有やレビューに時間がかかりそうなものに関してはモブプロで行います。
サーバーサイドエンジニアとフロントエンドエンジニア
フロントエンドとサーバーサイドのエンジニアは基本的にはそれぞれの領域をメインに開発を行いますが、軽微だけどお互いの領域に被って変更しないといけないようなものなどは一緒にペアプロで修正したりします。
サーバーサイドエンジニアとQAエンジニア
RSpec などのテストを対象にモブプロを行っています。古い機能でテストがなくQAエンジニアの手動テストで品質が担保されているような機能を自動でテストできるようにモブプロでテストを追加していっています。
新メンバーオンボード用のモブプロ
新規に入ってきたメンバーにはまずサービス画面を見ながら全体の機能のオンボードと、ドメインモデルに対するオンボードを行います。さらにその後に、オンボード用のタスクをペアプロ・モブプロで行ったり、加入時点でチームで開発している機能のペアプロ・モブプロに参加してもらいコード全体のオンボードを行っています。
良かったこと
新機能のコアとなる部分に対する共通認識ができる
機能のコアとなる部分を議論しながら作るのでこの時点で機能に対する解像度や、実装方針に対する共通認識が生まれます。その結果、後に控えている細々して量の多い作業を同じ認識を持って分担して進めることができるので作業速度も上がりました。また、都度チームでの認識すり合わせを行うので大きな手戻りも少なくなっています。
仕様が複雑な既存機能に対する知見の共有が行えている
仕様が複雑だけど、実装時の背景や実装方針などのドキュメントが残っていない機能に対する機能追加やリファクタリングは読み解くのもつらいですが、得られた知識を他のメンバーに再分配するのも大変です。そのような機能の改修をモブプロで行うことで、互いに理解度を高めながら実装することができ、同時に共有にもなります。
QAエンジニアしか知らなかった仕様などの共有ができた
QAエンジニアの手動テストによって品質が担保されてきたような機能はサーバーサイドエンジニアも把握できていないようなものが多く、テスト追加のモブプロを行うことで仕様の共有になっています。
テストケースの考え方などQAとサーバーサイドの知見が共有できた
「こうゆう場合もテストしておいた方が良いのではないか」とか「この場合のテストはそこまで重要ではない」という議論が、サーバーサイドエンジニアとQAエンジニア両方の視点からの提案で行われるので、テストケースの考え方の知見共有にもなっています。
担当領域を超えた変更も行えるようになった
フロントエンドエンジニアがサーバーサイドのコードを変更したりなど、お互いが書ける、読める範囲が広がることでちょっとした変更などをさくっと実装したりできるようになりました。
新メンバーの立ち上がりが早い
新メンバーのオンボードをモブプロで行うことによって、コード全体の大まかな流れをざっと追うことができたり、分からない事はすぐその場で解決できたりします。また、チームの開発スタイルの共有にもなっており新メンバーの立ち上がりに大きく貢献できていると感じます。
改善していきたいこと
モブプロに参加しなかった人、今後新たに入ってくる人への共有
モブプロに参加した人同士での共通認識や知見の共有は行えています。基本的に共有が必要とされるメンバー全員で行っているので現状では問題はないのですが、得られた情報を永続化はできておらず、その場限りの共有になってしまっています。今後入ってくるメンバーやモブプロに参加してなかった人へも共有する方法などは模索する必要があります。
人によってペースが異なるので深掘りしにくい
特にオンボードにおいてこの問題は発生しました。モブのペースで開発が進むので、途中途中で深ぼってコードを読み込むことができないという意見がありました。モブプロの時間と1人で作業をする時間のバランスやモブプロそのものの進め方を改善していかないといけません。
時間がとられて進捗が遅いように感じる
モブプロを多く行った週は複数人で1つの作業を行うので、リソース効率的には悪くなりベロシティも下がってしまいます。しかし、共有やレビューの時間を短縮できていると考えて許容しています。
まとめ
今回はソリューションチームで行っているペアプログラミング・モブプログラミングの取り組みについて紹介させていただきました。課題に感じていた部分を解決できチーム内の知見共有にはとても役立っています!
ハコベルではエンジニアを絶賛募集中です!
ハコベルソリューションチームでのモブプログラミングについて
Featured posts
in #Methodology