Slide 1

Slide 1 text

巨⼤なプロダクトにおける技術 負債と戦った成功と失敗の軌跡 (途中経過) 2021/10/28 ⽊内 啓輔 Yahoo! JAPAN

Slide 2

Slide 2 text

注意事項 娘(4歳)が突撃してくる可能性があります。 衝撃に備えてください

Slide 3

Slide 3 text

Keisuke Kiuchi • 職業?:Androidエンジニア兼サーバサイドKotlinエンジニア 兼iOSエンジニア兼チームの技術責任者兼4歳児のパパ=何でも屋 • お仕事: 「Yahoo!ファイナンス」アプリの開発 • 趣味で作ったアレコレ • ASのテンプレート:「Clean Architecture Template for kotlin」 • 技術同⼈誌:「ラノベ⾵?にClean Architectureを学ぶ本」 • ゲーム(Noita)のMOD:「More shop」,「Long life Gold」,etc.. • 最近の悩み:最近めっきり勉強する時間が取れない • SNS • Twitter: @fei_kome • Github: @kiuchikeisuke • Qiita: @k_keisuke

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

今回のお話とオチ

Slide 6

Slide 6 text

今回のお話とオチ •チームビルドに近いお話 •4年前の夏(私JOIN)〜今に⾄るまでの 技術負債返済の軌跡のお話 •⼤体は失敗ばっかしてたよってお話 •でも今はいい感じになったよってお話

Slide 7

Slide 7 text

今回のお話とオチ •まずは信頼を勝ち取れ •負債返済だけ!開発だけ!ってやると (多分)失敗するぞ •チーム全員で同じ⽅向を向けるように しよう

Slide 8

Slide 8 text

時系列 •転職前 •今のチームにJOIN~JOINから1年くらい •JOINから1年後~2年後 •JOIN2年後~今

Slide 9

Slide 9 text

転職前の私… •Android 完 全 に 理 解 し た 状態 •改善・負債返済 ⼀⼈でもやっていくぞ!!! •他チームの改善にも どんどん⼝を出すぞ!!! こう⾒えてこいつ、 チームジョインして 半年未満である

Slide 10

Slide 10 text

何が起きたか

Slide 11

Slide 11 text

総スカンを喰らう… •チームメンバー •「まずは普通の開発してね?」 •「今はまだその時ではないんだよ…」 •別チームメンバー •「いや君、誰よ…」 •「うちのやり⽅があるんで…」

Slide 12

Slide 12 text

学び •⼀⼈で突っ⾛って返済しようとしてもダメ •「こいつなら任せてもいいな」 と思われるようにまずは信頼を得る

Slide 13

Slide 13 text

時系列 •転職前 •今のチームにJOIN~JOINから1年くらい •JOINから1年後~2年後 •JOIN2年後~今

Slide 14

Slide 14 text

JOIN〜JOIN1年くらい •急がば回れ、まずは 普段の開発をしっかりやった •同時に徐々に改善案を出して (根回しして)いった

Slide 15

Slide 15 text

何が起きたか

Slide 16

Slide 16 text

改善DAYを勝ち取る •毎週⾦曜⽇は改善DAY •技術負債返済や改善活動専⽤の⽇ •上司も説得し、堂々と技術負債 に向き合う時間を獲得

Slide 17

Slide 17 text

勝ったな、⾵呂⼊ってk(ry

Slide 18

Slide 18 text

時系列 •転職前 •今のチームにJOIN~JOINから1年くらい •JOINから1年後~2年後 •JOIN2年後~今

Slide 19

Slide 19 text

調⼦に乗って過去の学びを忘れる •⼀気に技術負債を返済しようと ⼀⼈で実装する •マルチモジュール化対応 •Clean Architecture化対応 •BuildSrc対応 •LiveData対応 •Etc.. こう⾒えてこいつ、 過去の学びを忘れている

Slide 20

Slide 20 text

何が起きたか

Slide 21

Slide 21 text

チームメンバー置いてきぼり… •「現⾏の開発との兼ね合いどうするの?」 •「どう実装すればいいかよくわからない…」

Slide 22

Slide 22 text

学び •⼀⼈で突っ⾛って返済しようとしてもダメ •改善DAYで⼀気にやるパワープレイもNG •チームメンバーの同意も必要

Slide 23

Slide 23 text

時系列 •転職前 •今のチームにJOIN~JOINから1年くらい •JOINから1年後~2年後 •JOIN2年後~今

Slide 24

Slide 24 text

学びを得た私、やり⽅を変える •ペアプロでリファクタリングをする •メンバー3⼈のうち⾃分ともう⼀⼈でペアプロ •現⾏のコードとの兼ね合いを考え 無理ない範囲でリファクタリング •Clean Architecture化 -> OK •マルチモジュール化 -> ⾒送り •LiveData対応 -> ⾒送り etc..

Slide 25

Slide 25 text

何が起きたか

Slide 26

Slide 26 text

1画⾯を理想系に置き換えられた •共通部&1画⾯のクラスをClean Architecture化! •BuildSrc導⼊! •Gradle.kts対応!

Slide 27

Slide 27 text

1画⾯で半年かかったけどな…

Slide 28

Slide 28 text

新たな問題が浮上してくる •週1の作業だと遅々として進まない •1画⾯で半年なら、アプリ全体(約100画⾯) だったら…50年..? •チームメンバー全員でゴールを共有 できてない •ここはどう実装どうする? •設計⽅針どうなってるの?

Slide 29

Slide 29 text

時系列 •転職前 •今のチームにJOIN~JOINから1年くらい •JOINから1年後~2年後 •JOIN2年後~今

Slide 30

Slide 30 text

学びを得た私、再びやり⽅を変える •普段の開発と負債返済を並⾏させる •幸運?なことにリプレース系の開発が多く発⽣ •ゴールとなる設計の⼀枚絵をみんなで作る •実装時のルールや⽅針、歴史的背景を ドキュメントとしてまとめる •アプリの構成図を作る •↑を実現するための IFクラスやツールを整備する

Slide 31

Slide 31 text

ゴールとなる設計の⼀枚絵 ※:社外秘情報が含まれるため⼀部ぼかしを⼊れてます

Slide 32

Slide 32 text

何が起きたか

Slide 33

Slide 33 text

何も(問題が)起きなくなった •細かい相談事はあるけど、ちゃぶ台返しの ような問題は発⽣しなくなった •新メンバーの参画が激早になった •JOIN2⽇⽬で開発開始 •メンバー個々⼈が、設計や 負債返済を考える⽂化ができた •問題が起きても即仕組みで改善 する⽂化ができた

Slide 34

Slide 34 text

まとめ

Slide 35

Slide 35 text

まとめ •まずは信頼を勝ち取れ •負債返済だけ!開発だけ!ってやると (多分)失敗するぞ •チーム全員で同じ⽅向を向けるように しよう •ドキュメント、構成図、クラス設計、etc.. •みんなフッ軽であれ