サービス開発を前に進めるために 新米リードエンジニアが 取り組んだこと / Steps Taken by a Novice Lead Engineer to Advance Service Development
by
Logy
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
サービス開発を前に進めるために 新⽶リードエンジニアが 取り組んだこと 2024.7.20 ⼩売流通ソリューション部 太⽥拓也
Slide 2
Slide 2 text
Xへの投稿の際は、 ハッシュタグ #devio2024 でお願いいたします。 2 お願い
Slide 3
Slide 3 text
⾃⼰紹介 ● 名前:太⽥拓也 ● 経歴:SIer ー> バックオフィス向けSaaS開発 ー> クラスメソッド ● 役割:SaaS開発チームのテックリード ○ 開発プロセス改善 ○ 技術的な意思決定 ● プログラミングというよりもエンジニアリングが好き 3
Slide 4
Slide 4 text
セッション対象者 ● リーダーになりたての⽅ ● リーダーとしての振る舞い⽅に悩みがある⽅ ● リーダーを⽬指している⽅ 4
Slide 5
Slide 5 text
本⽇お話しすること リーダーだって怖い だからこそ エンジニアリングを駆使して 前に進もう 5
Slide 6
Slide 6 text
アジェンダ ● 私とテックリードの役割 ● チームを学ぶ ● エンジニアリングしよう ● チームで学ぶ ● プロダクトチームへ 6
Slide 7
Slide 7 text
私とテックリードの役割 7
Slide 8
Slide 8 text
リーダー経験 ● SIer時代 ○ リーダーというよりは連絡係 ○ 数名規模のチームで社員が私だけだったので ● バックオフィス向けSaaS開発時代 ○ 3名ほどのサブチームのリーダーを1年ほど ○ 所謂リーダー業務(スケジュール管理、仕様調整 技術検証、レビュー) 8
Slide 9
Slide 9 text
ところで
Slide 10
Slide 10 text
Q. テックリードの⽅? ✋
Slide 11
Slide 11 text
Q. テックリードが⾝近にいる⽅?✋
Slide 12
Slide 12 text
● わりと幅の広い肩書きだと思っています ● 各社でテックリードの定義もかなり違うはず テックリード? 12
Slide 13
Slide 13 text
テックリードとは 「 スタッフエンジニアとし て最も⼀般的なアーキタイ プであり、タスク(課題) の着⼿と遂⾏において1つの チームまたは複数のチーム を率いる。」 13 スタッフエンジニア マネジメントを超えるリーダーシップ Will Larson(著)、増井 雄一郎(解説)、長谷川 圭 (訳) https://bookplus.nikkei.com/atcl/catalog/23/04/07/00760/
Slide 14
Slide 14 text
私の役割 14 ピープル テクノロジー プロジェクト プロダクト この辺り エンジニアリングマネージャ /プロダクトマネージャのための知識体系 と読書ガイド(@hirokidaichi) https://qiita.com/hirokidaichi/items/95678bb1cef32629c317 プロジェクトマネジメントにも高めに 比重を置いている
Slide 15
Slide 15 text
● おそらくみなさんがイメージするテックリードとは少し 違うかもしれません ○ ややプロジェクトマネージャー寄り? ○ 技術で勝負というわけでもない ● タイトルにある通り、リードエンジニアをイメージして いただけるほうが、この後の話がしっくりくるかなと 思います テックリードという名前 15
Slide 16
Slide 16 text
チームを学ぶ 16
Slide 17
Slide 17 text
● フロントエンド、バックエンドチームの2チーム体制 ● 前任のリーダー1名と⼊れ替わる形で 私とPO(PdM)が加⼊ 当時の状況 17 私 フロントエンド P O バックエンド
Slide 18
Slide 18 text
● しかし、私は⼊社したばかりで、まずは会社に慣れ ようとしているフェーズ ● POは異動直後で、前のチームの引き継ぎ中 当時の状況 18 私 フロントエンド P O バックエンド
Slide 19
Slide 19 text
● とりあえず簡単そうなタスクをこなしつつ ⽐較的慣れているバックエンド領域担当チームのリー ダーと全体のリーダーを兼務することに 当時の状況 19 フロントエンド P O バックエンド 私
Slide 20
Slide 20 text
半⽉ほど過ごした結果 いくつか違和感を覚えた
Slide 21
Slide 21 text
違和感その1 ● 各⾃が週次で進捗を報告しているが、進捗がわからない ● 遅れた結果何に影響があるのか、それは何か対策が必要 なのかが伝わってこなかった 21 思ったより時間かかってます。次 週で挽回します! (※あくまで極端な例です)
Slide 22
Slide 22 text
違和感その1 ● 各⾃が週次で進捗を報告しているが、進捗がわからない ● 遅れた結果何に影響があるのか、それは何か対策が必要 なのかが伝わってこなかった ○ チームのスケジュールを誰も管理していない 22
Slide 23
Slide 23 text
違和感その2 ● 直感的でない仕様についてメンバーに聞くと 23 あーそれはAPIがこうなってるので、 それに合わせるとこうなっちゃうんで すよ そういう仕様だと聞い たのでこう作りました
Slide 24
Slide 24 text
違和感その2 ● 直感的でない仕様についてメンバーに聞くと ○ フィードバックが機能していない ○ ⾔われたものをそのまま作ってしまう 24
Slide 25
Slide 25 text
違和感の正体 25
Slide 26
Slide 26 text
違和感の正体 ● 強⼒なリーダーを失ったチームは ⽅向性を⾒失っていた ● 決して⼿を抜いたりしているわけではないが 各⾃が⾊々な⽅向に進もうとしていた結果 チームの成果につながっていなかった 26
Slide 27
Slide 27 text
⽅向性を⽰す⼈が必要 ● それが⾃分に求められていることもわかっている ○ 10⼈近くのメンバーのリーダーなんて イメージ沸かない ● どこに向かって進めば良いのか全く⾒当が付かない 27
Slide 28
Slide 28 text
どうしよう
Slide 29
Slide 29 text
エンジニアリングしよう 29
Slide 30
Slide 30 text
エンジニアリングしよう ● エンジニアリングは不確実性と 上⼿く付き合うためのアプローチ ● サービス開発の不確実性は⼤きい ○ 何を作る(⽬的不確実性) ○ どうやって作る(⽅法不確実性) ○ チームで作る(通信不確実性) 30 エンジニアリング組織論への招待 〜不確実性に向き合う思考と組織のリファクタリング 広⽊⼤地 著 https://gihyo.jp/book/2018/978-4-7741-9605-3
Slide 31
Slide 31 text
エンジニアリングしよう ● 真実から⽬を背けない ○ 要求は無限に膨張する ○ ⾒積もりは外れる ○ システムは何もしていないのに壊れる 31
Slide 32
Slide 32 text
エンジニアリングしよう ● 真実から⽬を背けない ○ 要求は無限に膨張する ○ ⾒積もりは外れる ○ システムは何もしていないのに壊れる ● これから向かう⽅向が正しいかどうかは誰もわからない ○ ⾃分にはできないという理由にはならない 32
Slide 33
Slide 33 text
不確実であるという前提で 前に進む
Slide 34
Slide 34 text
もう少し具体的に ● 経験主義で進める ○ わからないことを確かめる ○ その結果をもって次の計画をする ○ これらのサイクルを効率よく回す仕組みを考えて 改善する 34
Slide 35
Slide 35 text
チームで学ぶ 35
Slide 36
Slide 36 text
まずは現状を知ろう どの程度の規模の機能を、どの程度の期間で 開発できているのかを知るために、チーム横断で ⾒積もり会を実施 36
Slide 37
Slide 37 text
失敗 37
Slide 38
Slide 38 text
何が良くなかったか ● 技術横断で⾒積もれるメンバーがいなかった ● 分業していた期間が⻑く、他⽅のチームのことが ほとんどわからなかった 38
Slide 39
Slide 39 text
しかし、学びは得た ● 技術横断で⾒積もれるメンバーがいなかった ● 分業していた期間が⻑く、他⽅のチームのことが ほとんどわからなかった ● 当初の⽬的は果たせなかったが、上記の学びを得た 39
Slide 40
Slide 40 text
結果 ● 技術横断で⾒積もれるメンバーがいなかった ● 分業していた期間が⻑く、他⽅のチームのことが ほとんどわからなかった ● 当初の⽬的は果たせなかったが、上記の学びを得た ● 他の⼈がやってることを知れる仕組みを作りつつ まずは私が勘と経験と度胸で⾒積もることに 40
Slide 41
Slide 41 text
学びを活かす仕組みづくり
Slide 42
Slide 42 text
開発のリズムを作る ● スプリント制&かんばんによるタスク可視化を開始 ● まずは他の⼈がやってることを知る ● 振り返りをする ○ 改善に時間を使う習慣をつける 42 Sprint Sprint Sprint
Slide 43
Slide 43 text
リファインメントの導⼊ ● POがチーム専任になったこともありリファインメントを 導⼊ ○ 荒い要望から会話を重ねて具体化していく 43
Slide 44
Slide 44 text
リファインメントの導⼊ ● 定期的なコミュニケーションの機会 ○ 「ここは実装がこうなってるからこっちの仕様のほう が良い」 ○ 「これは顧客にとって嬉しくない仕様じゃないか」 ○ 「ここはチーム間で連携して進めないといけない」 ○ 「この⾒積もりで⼤丈夫?」 ● POと価値観を揃える 44
Slide 45
Slide 45 text
状況を観察する
Slide 46
Slide 46 text
状況を観察する ● チームのスケジュールを誰も管理していない ○ Good: 勘と経験と度胸から開始した⾒積もりだが リファインメントを通じてメンバーにも徐々にやって もらえるようになってきた ○ Bad: 精度はまだそれほど⾼くない 46
Slide 47
Slide 47 text
状況を観察する ● フィードバックが機能していない ○ Good: 振り返りで上がった課題を他⽅のチームに共有 して解決できることも増えてきた ○ Bad: まだ私がHubになっている状態を抜け出せていな い 47
Slide 48
Slide 48 text
状況を観察する ● ⾔われたものをそのまま作ってしまう ○ Good: リファインメントで事前の議論ができるように なった ○ Bad: チーム全体的に誰でも議論できるレベルにはま だ達していない 48
Slide 49
Slide 49 text
学びを計画に反映する
Slide 50
Slide 50 text
学びを整理する ● これまでの開発で得られたドメイン知識を改めて整理した ● ドメイン理解が深まるにつれて、サービス特性や変更率の⾼ いモジュールなど、アーキテクチャ要件がわかってきた 50
Slide 51
Slide 51 text
バックログ作り ● 時間軸に合わせた詳細度を意識する ○ マーケットの状況で要望は常に変わりうる ○ 中⻑期のアイテムを詳細に検討しても無駄が多い ● アウトプットではなくアウトカムを常に意識する ○ 価値とコストとのバランスを考える ○ ビルドトラップ、フィーチャーファクトリーを避ける 51
Slide 52
Slide 52 text
アウトカムに集中する ● あったら嬉しい機能は⼤体使われない ● 無いと困る機能を作る ● あったら嬉しい機能の仕様が、無いと困る機能の邪魔をするこ ともある 52 この前⼊れたこの仕様と ⽭盾しますがどうしま しょう? この機能を作りたいで す そうなの!?(こっちの価 値のほうが⾼いのに)
Slide 53
Slide 53 text
アウトカムに集中する ● リリースして確かめよう ● ものによっては別に実装する必要すらない ○ 紙芝居だけで確かめられることもたくさんある 53
Slide 54
Slide 54 text
もっとチームに任せる ● オーナーシップが⾼まれば、仕様策定にも積極的になり ⾃律性も向上すると考えた ○ より粒度の荒いタスクからチームに取り組んでもらう ○ 必要なやり取りもチーム同⼠で済ませてしまったほう がやりやすいはず 54
Slide 55
Slide 55 text
少し寄り道
Slide 56
Slide 56 text
施策を考えるポイント ● 100%を⽬指さない ○ パレートの法則(80:20の法則) ○ 80 -> 100にするためのコストは それまでと⽐較して跳ね上がることが多い 56
Slide 57
Slide 57 text
閑話休題
Slide 58
Slide 58 text
ここまでのまとめ ● 経験主義に基づいたプロセスを整備した ● 得られた学びを計画に反映した 58
Slide 59
Slide 59 text
しかし、あまり⼿応えが なかった 59
Slide 60
Slide 60 text
マイルストーンが達成できない ● 常にジワジワと遅れていく ○ ひたすらリスケとスコープアウト ○ 遅れた分の時間をただ消費するだけのサイクル 60
Slide 61
Slide 61 text
原因についての仮説 ● チームが分かれていることで、コード結合がスプリント を跨ぐ ○ バグの発⾒遅れ ○ 作業待ちを埋めるための並列作業がさらに別の仕掛 り作業を⽣み出す 61
Slide 62
Slide 62 text
原因についての仮説 62 フロントエンド バックエンド スプリント まだAPIできてないから モックで作ろう 結合待ちの間は別のタス クをやろう APIできたよー スプリント 思ったようなデータが ⼊ってないんだけ ど。。。 このスプリントは間に合 わないので次のスプリン トで直します 別の作業やるか。。。 あっ、こっちも結合待ちだ スプリント
Slide 63
Slide 63 text
原因についての仮説 ● リードタイムの増⼤が遅れにつながっていると考えた ● しかし、チーム再編は⼤変、その前にできることは ないか? 63
Slide 64
Slide 64 text
終わらせることをはじめる
Slide 65
Slide 65 text
● 基本的にはスプリントレビューで成果物のデモが できることをタスクの完了条件とした ○ 成果物は全部終わったものだけ ○ 9割終わってますは終わってない ● むやみに仕掛り作業を増やさない スプリントレビューの導⼊ 65
Slide 66
Slide 66 text
そして迎えた初めての スプリントレビュー
Slide 67
Slide 67 text
⾮常に盛り上がった 67
Slide 68
Slide 68 text
スプリントレビュー ● メンバーから⾊々な意⾒が出てくる ● オーナーシップが無かったのではなく 発揮する場を失っていたのでは? 68
Slide 69
Slide 69 text
⾏動が⽂化を作る ● 思い返すと、せっかく作った機能を披露す る場は今までなかった ● 改善提案は発⽣ベースで個別に共有しても らっていたが、フィードバックできていな かった ● 意⾒を出す場を設定できていなかった 69
Slide 70
Slide 70 text
プロダクトチームへ 70
Slide 71
Slide 71 text
成果物の副産物 ● 技術スライスによるチーム分割の⽋点が⽬⽴ち始めた ○ 機能が完成しましたと⾔ってAPIだけ⾒せても仕⽅ がない ○ 相変わらず結合は開発後期に⾏われるためバグが レビュー直前に発⾒されてしまう ● チームに課題感が伝わった状態でプロセスを改善する 71
Slide 72
Slide 72 text
チーム再編
Slide 73
Slide 73 text
チーム再編 ● チームで機能開発が完結できるようにチームを再 編した ● ここはかなり慎重に進めた ● チーム改変は破壊的な施策 中⻑期で⾒ればもちろん後戻りできるが 相⼿は⼈間、少なくとも短期的には⼤きなリスク がある(実質後戻りできない) 73
Slide 74
Slide 74 text
チーム再編で気をつけた点 ● 現状のスキルセットや将来の興味の確認 ● 本⼈のキャラクター 74
Slide 75
Slide 75 text
チーム再編で気をつけた点 ● 担当ドメインの割当 ○ 依存関係 ○ 変更頻度 ○ 複雑性 ■ 複雑系、煩雑系、単純系に分類し 偏らないように割り当てた ○ ここで以前にやったドメイン整理が役に⽴った 75
Slide 76
Slide 76 text
チーム再編 ● なるべく⾃チームでタスクを 完結できるように再編成 76 FeatureA FeatureB 私 P O フロントエンド バックエンド
Slide 77
Slide 77 text
結果 ● 遅延が徐々に減ってきた ○ タスクの受け渡しや調整が減った ○ リードタイムの短縮 ● 分割後も意外と⼤きな混乱は無かった ○ ドメインを綺麗に分割できていた? ○ キャラクター性の考慮が功を奏した? 77
Slide 78
Slide 78 text
結果 ● 分割後、メンバーにヒアリングした印象も概ね肯定的 ○ タスク調整が減ってやりやすくなったという意⾒ ● ⼀⽅で別チームが何をやっているのか わかりにくくなったという意⾒も ○ 元々⾃分が担当していた領域を⼿放す不安 ○ スプリントレビューでの情報共有や ドキュメントの整備で対処 78
Slide 79
Slide 79 text
結果 ● スキルセット的にチームで完結できないタスクが どうしても発⽣する ○ チームを跨いだレビューやスキル移転を兼ねた 共有会などで対処 79
Slide 80
Slide 80 text
こうして、バラバラの⽅向を 向いていたチームが少しずつ 同じ⽅向を向いて進み始めた
Slide 81
Slide 81 text
まだまだ課題は⼭積み ● POの負荷軽減 ● ビジネスKPIへの貢献 ● 運⽤経験の乏しさ ● QAプロセス整備 ● 不⾜しているスキルの獲得 ● などなど 81
Slide 82
Slide 82 text
でも私達には エンジニアリングがある
Slide 83
Slide 83 text
まとめ ● リーダーの仕事には不確実性がいっぱい ● エンジニアリングは不確実性とうまく付き 合うためのアプローチ ● 経験主義に則って⼀つずつ対処していこう 83
Slide 84
Slide 84 text
No content
Slide 85
Slide 85 text
85