Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
現場主導で取り組む継続的な技術的負債の解消
Search
ham
November 21, 2023
4
4.5k
現場主導で取り組む継続的な技術的負債の解消
2023/11/21に開催された「技術的負債に向き合う Online Conference」の登壇資料です。
https://findy.connpass.com/event/297813/
ham
November 21, 2023
Tweet
Share
More Decks by ham
See All by ham
Platform Engineeringのエッセンスを小規模な開発組織に取り入れた事例紹介
ham0215
8
1.4k
開発者の定量・定性データを組み合わせて開発者体験を把握するための取り組み
ham0215
4
540
アジャイルを始めるための基礎を固める
ham0215
1
69
開発者体験を意識した開発チームの生産性向上の取り組み
ham0215
3
800
MySQLのViewを活用した安全なマルチテナントの実現方法
ham0215
2
610
開発パフォーマンスを最大化するための開発体制
ham0215
7
1.5k
今こそ思い出すGraphQLの特徴
ham0215
0
150
DevOpsメトリクスとアウトカムの接続にトライ!開発プロセスを通して計測できるメトリクスの活用方法
ham0215
2
460
CIは5分以内!素早い開発サイクルを支えるCI
ham0215
1
3.8k
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
504
140k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.4k
Faster Mobile Websites
deanohume
304
30k
GraphQLの誤解/rethinking-graphql
sonatard
66
9.9k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
Unsuck your backbone
ammeep
668
57k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
92
16k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Making Projects Easy
brettharned
115
5.9k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
25
1.8k
Transcript
現場主導で取り組む 継続的な技術的負債の解消 技術的負債に向き合うOnline Conference 2023/11/21
【略歴】 新卒でSIerとして就職 その後、Web系企業やスタートアップを経て2022年5月に ファインディに参画 ファインディではFindy Team+を開発しつつ、EMとして 開発チームのマネジメントを担当 浜田 直人 (ham)
ファインディ株式会社 @hamchance0215
Findy Team+(チームプラス)とは? 3 開発生産性の可視化、開発プロセスの伸びしろの発見、継続的な改善をサポート 生産性可視化 生産性向上 事業開発スピード加速 (開発スピードの向上により、仮説検証スピードも加速) 開発プロセス改善 (開発フロー・配置・ツールの伸びしろを可視化・最適化)
文化づくり・自己組織化 (メンバーの自発的な改善促進、改善を称賛する文化作り) 継続的な生産性向上サイクル データ 連携 Biz Engineer Engineer 開発組織ブランディング (エンジニアは、開発生産性が高い組織で働きたい) Recruit
Agenda • Findyが重視している開発⽣産性を測る指標 • Findyの継続的な技術的負債を解消する取り組み
Findyが重視している 開発⽣産性を測る指標
なぜ開発⽣産性指標の話? Findyが重視している開発⽣産性を測る指標 • 技術的負債の解消に取り組む場合、開発生産性の向上を目的とするこ とが多いため • 技術的負債解消前後の開発生産性を比較することで定量的に効果測定 できる ◦ 開発生産性を定量的に示すことで、開発チーム以外にも説明しやす
い ◦ 効果が少ない場合、負債を解消しない理由を明確にできる ◦ 生産性が向上した証跡を残すことで次回以降の負債解消がさらに 進めやすくなる
重視している指標 Findyが重視している開発⽣産性を測る指標 • Four Keys • プルリクエストの作成数とマージまでの時間
Four Keys Findyが重視している開発⽣産性を測る指標 • Four Keys(2023 State of DevOps Report)
https://cloud.google.com/devops/state-of-devops?hl=en
Four Keys Findyが重視している開発⽣産性を測る指標 • チームのデリバリーパフォーマンスが可視化できる ◦ 品質を維持し、顧客へ迅速に価値提供できていることを定量的に確 認できる • 比較的簡単にデータを取得できる
◦ 取得に手間がかかる場合、継続してウォッチするのが困難 • 世界的に認知されておりプラクティスが多数公開されているため、改善 活動に取り組みやすい ◦ DevOpsの能力(DevOps capabilities) ▪ https://cloud.google.com/architecture/devops?hl=ja
プルリクエストの作成数とマージまでの時間 Findyが重視している開発⽣産性を測る指標 • Four Keysだけでは個人のパフォーマンスが見えづらい ◦ Four Keysではチームのパフォーマンスは測れるが、メンバー単位 で深掘りしづらい ◦
プルリクエストの作成数とマージまでの時間の場合、メンバーごとの アウトプット量とスピードがわかる • 作成数を増やしてマージまでの時間を短くするには、1つ1つのパッチサ イズを下げる必要があり、Four Keysの向上にも繋がる • 簡単にデータを取得できる ◦ プルリクエストベースで開発すると自然にデータが取れる
Findyの 継続的な技術的負債を 解消する取り組み
技術的負債解消のサイクル 伸びしろ発見 ディスカッション 改善 測定
技術的負債解消のサイクル 伸びしろ発見 ディスカッション 改善 測定
開発中に気づいた様々な伸びしろを蓄積しておく 伸びしろ発⾒ 14 引数変えたいだけなのに 修正箇所多いな? 影響範囲探すの つらい... テストの書き方が 人に依存してて可
読性が悪い 必要なMockが多 すぎてテスト大変 CI遅すぎて X(Twitter)が捗る デプロイ遅いし 手順多い... そもそもテストな いじゃん...
技術的負債解消のサイクル 伸びしろ発見 ディスカッション 改善 測定
定例で改善⽅針をディスカッションして、イシューを作る ディスカッション
ディスカッションの注意点 ディスカッション • 中長期かかるものは効果を明確にする ◦ ROIが悪いと予想される場合、やらないという選択肢を取る • サクッとできるものは効果は気にせず、定性評価(なんか良さそう)だけで やっちゃう! •
理想論を話しすぎず、少しずつ解消する ◦ 壮大な夢より現実的な第一歩を! ◦ オーバーエンジニアリングしすぎず、最低限の解消できるくらいが ちょうどよい
ディスカッションの注意点 ディスカッション • 「なぜこうなっているのか?」経緯を探しすぎない ◦ 経緯は探しても見つからないことが多い ◦ 今どうなっているべきか?で方針を決める ◦ 何か想像もできないような理由がある場合もあるので、リリース後一定期
間は切り戻せるようにしておくと安心 ▪ 「チェスタトンのフェンス」 • 「このフェンスがなぜ立てられたかを理解する前に、そのフェンス を取り壊してはならない。」 ▪ ソフトウェアの良さはすぐ戻せることなのでとにかくやる! • 想像を超えた理由があった場合、速攻で切り戻して、次からは 守るテストを書いておくことで再発防止
技術的負債解消のサイクル 伸びしろ発見 ディスカッション 改善 測定
開発計画に技術的負債の解消を盛り込む 改善 • ちょろい改善はスキマ時間やGood First Issueとして消化 • 大規模なものは月次で計画している開発計画に盛り込む ◦ 機能開発
70%、改善 30%で計画している ▪ 一人が機能開発と改善を兼務するとうまくいかないことが多い (セルフマネジメントが上手い人は除く) ▪ 改善する人は改善に集中してもらい、チーム全体で割合を担保 すると良い
技術的負債解消のサイクル 伸びしろ発見 ディスカッション 改善 測定
⼤規模な技術的負債の解消は事前に効果を定量的に計画する 測定 • 最近実施した技術的負債の解消 ◦ デプロイフローの改善 ◦ フロントエンドのアーキテクチャー刷新 https://note.com/hamchance/n/n97c551bab985 https://note.com/hamchance/n/n4a074eb0193c
デプロイフローの改善 測定 • 課題 ◦ Four Keysをエリートの水準まで上げられない ▪ バックエンド /
フロントエンド、それぞれ1日1回デプロイ ▪ リードタイム45h ◦ デプロイに時間がかかる ▪ 障害発生時の切り戻しも同等の時間がかかるため、迅速に切り 戻せない ▪ 商談中など障害時のリスクが高い時間帯を避けてデプロイ ◦ 切り戻し手順が煩雑 ▪ デプロイに対する心理的ハードルが高い
デプロイフローの改善 測定 • 解消する技術的負債 ◦ インフラを変更してデプロイ時間を短縮 ◦ デプロイフローの自動化を強化してデプロイの手間を減らす ◦ 切り戻し手順を整備して切り戻しを簡単にできるようにする
デプロイフローの改善 測定 • 課題解決後の目標 ◦ Four Keysの向上 ▪ デプロイ頻度 2倍
▪ リードタイム 1/2 ▪ 変更障害率・平均修復時間 現状維持
デプロイフローの改善 測定 • デプロイ頻度 2倍(2→4件) • リードタイム 1/2 (45h→24h) •
変更障害率・平均修復時間 現状維持 Four Keys ヨシッ!
フロントエンドのアーキテクチャー刷新 測定 • 課題 ◦ 定性的・定量的にフロントエンド開発の体験が悪くなっていた ▪ キャッチアップが他と比べて大変(定性評価) ▪ プルリクエスト作成数が他を開発しているときと比べて少ない
(定量評価) ▪ 影響範囲がわかりづらく、影響範囲が広い
デプロイフローの改善 測定 • 解消する技術的負債 ◦ 「簡単に使える」から「簡単に理解できる」アーキテクチャーへ移行 ▪ ぽんぽん置いていくだけでなんかわからんけど動く ▪ 一手間必要だけどなぜ動くか理解できる
https://speakerdeck.com/ham0215/izikarasinpuruhe-purodakutonocheng-chang-nihe-wasetaakitekutiyanobian-geng
フロントエンドのアーキテクチャー刷新 測定 • 改善後の目標 ◦ プルリクエスト作成数1.5〜2倍 ▪ 他を開発しているときと同等の数値を目指す
フロントエンドのアーキテクチャー刷新 測定 • 改善前と比べて一人当たりのプルリク数が2倍に!! ◦ 実施前1件、実施後2件 => 約2倍!! PR数 ヨシッ!
技術的負債解消のサイクル 伸びしろ発見 ディスカッション 改善 測定
技術的負債解消のサイクル 伸びしろ発見 ディスカッション 改善 測定 開発中に伸びしろに気づく 😇🥺😱🙈🤣🤮🤪
技術的負債解消のサイクル 伸びしろ発見 ディスカッション 改善 測定 前向きな議論 🤔🧐👍💪 開発中に伸びしろに気づく 😇🥺😱🙈🤣🤮🤪
技術的負債解消のサイクル 伸びしろ発見 ディスカッション 改善 測定 前向きな議論 🤔🧐👍💪 改善改善〜 💪😇🤪😮😤💪 開発中に伸びしろに気づく
😇🥺😱🙈🤣🤮🤪
技術的負債解消のサイクル 伸びしろ発見 ディスカッション 改善 測定 前向きな議論 🤔🧐👍💪 改善改善〜 💪😇🤪😮😤💪 開発⽣産性や
開発者体験が向上!! 👏🙌👍💪💯🥰🥳 開発中に伸びしろに気づく 😇🥺😱🙈🤣🤮🤪
開発中に伸びしろに気づく 😇🥺😱🙈🤣🤮🤪 技術的負債解消のサイクル 伸びしろ発見 ディスカッション 改善 測定 前向きな議論 🤔🧐👍💪 改善改善〜
💪😇🤪😮😤💪 開発⽣産性や 開発者体験が向上!! 👏🙌👍💪💯🥰🥳 開発しやすくなったー もっと良くしていくぞー!! 💪💪💪💪💪💪💪💪💪
開発中に伸びしろに気づく 😇🥺😱🙈🤣🤮🤪 技術的負債解消のサイクル 伸びしろ発見 ディスカッション 改善 測定 前向きな議論 🤔🧐👍💪 改善改善〜
💪😇🤪😮😤💪 開発⽣産性や 開発者体験が向上!! 👏🙌👍💪💯🥰🥳 開発しやすくなったー もっと良くしていくぞー!! 💪💪💪💪💪💪💪💪💪 技術的負債の解消の全ての意思決定が 開発チーム内で完結するのでスムーズに進⾏可能!!
技術的負債解消のサイクルの注意点 • 闇雲に改善すれば良いというものではない ◦ 工数と効果のバランスを意識しよう ▪ 頑張ってもあまり効果がないと改善のモチベーション低下 ▪ リソースは無限ではない ▪
一方で、細かいものはえいやーでやる勢いも大事 • 細かいものまで効果は?と言われても難しい • 私やみんなの気分が良くなる!だけで良い!
技術的負債解消のサイクルの注意点 • 細く長くは難しい ◦ 長期間かかる改善をスキマ時間で少しずつ直していくは難しい ▪ 兼務で2番手のタスクを進めるのは難しい ◦ 時間がかかればかかるほど新旧コードの混在期間が延びる ▪
新旧残っているとキャッチアップ難易度が上がる ▪ 改善前のものが残っているとそこから増殖する • 短期であればチーム内で徹底するだけで防げるが、長期に なると徹底することが難しくなる • Copilotが古いコードを学習する ◦ 専属で改善するエンジニアをアサインして改善期間を短縮する
開発中に伸びしろに気づく 😇🥺😱🙈🤣🤮🤪 技術的負債解消のサイクル 伸びしろ発見 ディスカッション 改善 測定 前向きな議論 🤔🧐👍💪 改善改善〜
💪😇🤪😮😤💪 開発⽣産性や 開発者体験が向上!! 👏🙌👍💪💯🥰🥳 開発しやすくなったー もっと良くしていくぞー!! 💪💪💪💪💪💪💪💪💪
技術的負債解消のサイクル 伸びしろ発見 ディスカッション 改善 測定 開発中に伸びしろに気づく 😇🥺😱🙈🤣🤮🤪 前向きな議論 🤔🧐👍💪 改善改善〜
💪😇🤪😮😤💪 開発⽣産性や 開発者体験が向上!! 👏🙌👍💪💯🥰🥳 開発しやすくなったー もっと良くしていくぞー!! 💪💪💪💪💪💪💪💪💪 継続的な改善サイクルを回すことで 開発者体験の良い環境を⾃分たちで作っていきましょう!!
Findy サービス Findy 採⽤ https://findy.co.jp/service/ https://careers.findy.co.jp/