お客さんのエンジニアとスクラムで併走している話1
View Slide
2自己紹介高橋ゆうきクラスメソッド株式会社 CX事業本部Delivery部フロントエンドチーム チームリーダー@hbsnow
3今日話したいこと● 今日自慢したい、2年以上続いているプロジェクトの簡単な説明○ 起こっていた問題とその改善策● 3人のお客さんのエンジニアとリモートのスクラムで併走している話○ 開発をはじめてから1年程度のメンバー○ 全員、それまでプログラミング未経験
4今日自慢したいあるプロジェクトの話● 今日自慢したい、2年以上続いているプロジェクトの簡単な説明○ 起こっていた問題とその改善策● 3人のお客さんのエンジニアとリモートのスクラムで併走している話○ 開発をはじめてから1年程度のメンバー○ 全員、それまでプログラミング未経験
5今日自慢したいプロジェクトの参加履歴2020年9月参加期間1 参加期間22021年1月2021年8月2022年10月現在※要件定義の期間は含めていません
6最初からは参加できず● 最初から参加していなかった(入社していなかった)ので、技術選定や設計にはかかわれていません。参加期間1 参加期間22021年8月2022年10月現在2020年9月2021年1月
7入社後すぐにアサインされた● 入社後プロジェクトに参加。このときは、割り当てられたタスクをもくもくとこなすだけ。参加期間1 参加期間22022年10月現在2020年9月2021年1月2021年8月
8長期の離脱期間● 別プロジェクトに移動。長期の離脱期間が発生し、正式リリースもこの期間に行われました。参加期間1 参加期間2現在2020年9月2021年1月2021年8月2022年10月
9でもどり● 別プロジェクトが終了したため、でもどり。(前回よりも期待されている雰囲気……!)参加期間1 参加期間22020年9月2021年1月2021年8月2022年10月現在
10現在のプロジェクトの規模感● フロントエンドエンジニア○ 私○ プロパー 1名○ パートナー 1名(木金不在)○ お客さんのエンジニア 3名● バックエンドエンジニア 7名● PO 2名・スクラムマスター 1名
11ざっくり特徴として● プロジェクトの息が長いので、エンジニアの入れ替わりが少なくない○ 特にリードする立場のフロントエンジニアに入れ替わりが何度か発生してしまう● Redux Sagaが使われていて、小規模でもシンプルでもないアプリですがジュニアレベルのエンジニアが学習のために参加することもある
12結果、なにが起こったか● 主要ないくつかのページでコードの特徴が異なる○ 一部ページでは主要なロジックが1つのカスタムフックにまとめられ、カスタムフックがネストしていく状態○ ReduxにレスポンスとUIの状態が別ファイルになっていたり、同じだったり● Atomic Designのディレクトリ構成に秩序がない● 散乱するつぎはぎのコピペコード
13そしてバグの修正で新たなバグが誕生
14図解バグ修正PRバグ修正ででたバグ修正のPRバグ修正のバグ修正ででたバグ修正のPR
15リリースは1週間間隔、ときにhotfixバグ修正PRバグ修正ででたバグ修正のPRバグ修正のバグ修正ででたバグ修正のPR1スプリント1スプリント
16ただバグ修正できていなかっただけなのに進捗はでるバグ修正PRバグ修正ででたバグ修正のPRバグ修正のバグ修正ででたバグ修正のPR1スプリント1スプリント1pt1pt1pt
17なにをしたか● 再発防止策の徹底○ テストを必須にする■ 難しいときはIssueに再発防止策検討のタスクを起票する○ バグの原因を必ず記載する○ バグ修正はモブプロで行う
18そもそもバグを減らしたい● やる必要があるカイゼンタスクをもくもくと起票○ 先述の問題の他にも……■ React v18なのに型情報がReact v17■ mswがインストールされてるのに起動しない■ StrictModeが無効○ ただ起票するだけでは後回しになってしまうので、カイゼンタスクを必ずスプリント内に1つ以上含める
19なにをしなかったか(できなかったか)● E2Eテスト○ 過去それなりの工数をかけている形跡があったが、現状どれも動作していない現実■ Cypress/Playwright/Autify○ 簡単な正常系だけを用意しても……○ スクラムイベントでアドホックテストをしている○ 現状は雑にライブラリをアップデートとかも慎重にならざるを得ない状況なので、リソースがあればもちろんやりたい
20併走する● 今日自慢したい、2年以上続いているプロジェクトの簡単な説明○ 起こっていた問題とその改善策● お客さんのエンジニアとリモートのスクラムで併走している話○ 開発をはじめてから1年程度のメンバー○ 全員、これまでプログラミング未経験
21お客さんのエンジニアの参画時期2020年9月2021年1月2021年8月2022年10月現在2022年3月2022年11月2023年2月
22意識してやったこと● 発言をしやすい雰囲気を作る○ 質問をしやすい・意見をいいやすい○ わからないことをわからないと言える● お客さんの目標である、内製化ができるようになることを極力支援できるように考えて行動する○ タスクの割り振り○ 何でも自分でやりすぎない
23質問しやすい雰囲気作り逆の立場になって考えてみると、雰囲気以前の話で、いきなりMeetやSlackのハドルで呼び出して質問なんてそもそもしにくい。
24Gather
25ゲーム感のあるバーチャルオフィス
26過去失敗した実はこの期間でもやっていたのですが、振り返ってみるとあまりうまく運用できていませんでした。参加期間1 参加期間22022年10月現在2020年9月2021年1月2021年8月
27なぜうまくいかなかったのか● Gatherを使っているのにMeetのような運用になっていた○ 用事があるときに、用事がある人だけを呼ぶ○ 用件以外の会話があまり生まれない状況○ 用事のある人しか呼ばないので、仮に雑談が発生してもそれはチームというよりも個人間の会話にしかなっていなかった
28うまくいった運用を経験していた● Gatherがうまく運用できていた案件ではGatherに自然と集まっていた○ そこでは案件の話もするし、それ以外の雑談もする○ よく知るメンバーなので、どんなときでも意見を言いやすい○ なので困っているときには全力で助けたくなる
29このプロジェクトでもそうなりたい!● 最初から自然に集まるというのは無理な話なので集まる時間をつくった(15時-17時、カレンダーに登録)○ ただし任意で、強制はしない○ 誰も来なくても常に広いスペースにいる■ 個々の席にいるだけだとあまり意味がないので■ いつもいる人になる。誰もいないところに人は集まらない○ 積極的に雑談もした○ 誰もこなくても泣かない
30なった● 15時から17時の時間には集まるようになった○ この時間帯以外にも午後には人が集まる状態
31モブプロ
32参加必須にしています● 火曜日の15時から17時はモブプロ○ 基本フロントエンドメンバー全員参加
33目的● 習熟度の向上● 知識の平準化による属人化の解消● レビューコストの低減
34ルール● タイピスト1名(15分時間交代制)とモブからなる● タイピストは基本的にモブから指示されていないことを書き込むことはできない● タイピストはモブの指示が不明瞭な場合は理解できるまで質問する● お互いを信頼すること○ いや、そうじゃなくて・・禁止
35VS CodeのLive Share便利● VS CodeのLive Shareを使っています○ 普段別のエディタを使っている人はつらいかも○ Issue単位でホストの変更をしています● 記録はNotionに残しています○ 途中参加や作業が途中で終わったとき翌週何をしていたか忘れるため
36効果● みんなの反応がとてもよく大好評○ 自分自身もとても楽しめている■ ドメイン知識は圧倒的にお客さんのエンジニアのほうが上なので、気付かされることも多い● POやバックエンドメンバーも見学に来てくれている● バグタスクを多めに消化しているので、ボードに溜まっていたバグタスクが減った
37以上になります。ありがとうございました。
38おまけ
39レビュー会
40カレンダーではレビュー会と書いてた● 最初はみんなでPRレビューをする時間(過去形)○ 時間は16:30からの30分で任意参加○ 自分の作業に集中してしまうメンバーが多く、レビューが滞り気味だったので、全員でレビューをする時間を作った○ 自分の作業も大事だけど、レビューも大事○ レビューがコードの品質よりも、動作確認作業になっていそうなところが気になっていたので、全員で同じPRを同時にみると何か得るものがありそうかなと感じた
41結果、微妙でした● 見て欲しいところを文字通り見てもらうだけの謎の会になった○ レビュー会自体は微妙だったが、こういった時間を設けたことでチームのレビューにたいする意識は向上した気がする○ いまもカレンダーだけは設定されていて、この時間になると「質問ないですか?」と私から声をかける時間になった