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
株式会社カミナシ
September 01, 2022
Technology
3.3k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
カミナシでの技術的負債返済プロジェクトとその決断
(で、具体的に何をやっているのか)
アジェンダ
▶カミナシという会社
▶そもそも「技術的負債」とはなんだったか
▶カミナシの技術的負債返済プロジェクト
▶まとめ
株式会社カミナシ
September 01, 2022
More Decks by 株式会社カミナシ
See All by 株式会社カミナシ
運用を犠牲にせずコストを制御し事業成長を支える B2B SaaS ID管理基盤におけるS3 Tableのログストレージ活用
kaminashi
1
390
AI時代こそ、スケールしないことをしよう -「作る人」から「なぜ作るか」を考える人へ / Do Things That Don't Scale in the AI Era — From How to Why
kaminashi
1
240
関数型の考えを TypeScript に持ち込んで、テストしやすい純粋関数を増やす / Pure at the Core, Effects at the Edge: Bringing Functional Thinking into TypeScript
kaminashi
2
270
AWS Summit Japan 2026の振り返りと2027へ向けて / AWS Summit Japan 2026 Recap and Prospects for 2027
kaminashi
1
490
Amazon Redshift zero-ETL 統合を活用した軽量なマルチプロダクトデータ可視化基盤 / Lightweight Multi-Product Data Visualization with Amazon Redshift Zero-ETL
kaminashi
0
340
実践 TanStack Start ― 新規プロダクトを開発して確立した、サーバーとクライアント境界の設計パターン / Practical TanStack Start Server-Client Boundary Patterns
kaminashi
3
910
AIのための特別なアーキテクチャはいらない 0→1開発で実践した設計原則とガードレール
kaminashi
0
750
スクラムの中で AI-DLC workflow を 使い始めて3ヶ月の振り返り
kaminashi
0
980
The essence of decision-making lies in primary data
kaminashi
0
1.3k
Other Decks in Technology
See All in Technology
現場で使える AWS DevOps Agent 活用ノウハウ - Release Management 機能の検証結果を添えて / AWS DevOps Agent Release Management and Know-How
kinunori
5
930
オートロックマンションなのに、各部屋は施錠なし!? 攻撃者が組織内ネットワークで大暴れする理由 / The Front Door Is Locked, but the Rooms Are Wide Open: Why Attackers Move Freely Inside Enterprise Networks
nttcom
0
1.5k
PLaMoを毎日の開発で使い育てていく
pfn
PRO
0
180
サイバー捜査員研修(前半)
nomizone
1
1.5k
plamo-3-translateの開発
pfn
PRO
0
270
ウォーターフォール開発案件のPMとしてAI活用を模索している話
hatahata021
3
300
Digitization部 紹介資料
sansan33
PRO
2
7.7k
『モンスターストライク』 の運営に伴走する! データ民主化への 解析グループの3つのアプローチ
mixi_engineers
PRO
0
230
ラジオの科学
frievea
0
120
[ChatGPT Work LT]事務作業が苦手な人のための バックオフィスの「半」自動化
chimaki_iot
0
160
タクシーアプリ『GO』の実践的データ活用〜位置情報データの収集とStreamlitでの可視化〜
mot_techtalk
2
200
名古屋の市バスGTFS-JPデータ×スガキヤ 最寄りバス停検索をAmazon ElastiCache Serverless for Valkeyで最適化する
usanchuu
1
220
Featured
See All Featured
Producing Creativity
orderedlist
PRO
348
40k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
460
We Are The Robots
honzajavorek
0
290
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
610
Speed Design
sergeychernyshev
33
2k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
30 Presentation Tips
portentint
PRO
1
360
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
430
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
760
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
The browser strikes back
jonoalderson
0
1.4k
Transcript
Twitter.com/Toricls カミナシでの 技術的負債返済プロジェクトと その決断 Tori Sep. 1, 2022 めぇ (で、具体的に何をやっているのか)
twitter.com/toricls Tori Hara / CTO at Kaminashi ❤ Come build
with us! ❤ toricls • Meety - https://meety.net/matches/wlbIxlejLKXn • ࠾༻ใ - https://careers.kaminashi.jp/
Twitter.com/Toricls Agenda ▶︎ カミナシという会社 ▶︎ そもそも「技術的負債」とはなんだったか ▶︎ カミナシの技術的負債返済プロジェクト ▶︎ まとめ
twitter.com/toricls カミナシ
Twitter.com/Toricls
Twitter.com/Toricls 現場 DX プラットフォーム『カミナシ』 https://note.com/toricls/n/nf3d205c1777c https://kaminashi.jp/
twitter.com/toricls そもそも「技術的負債」とはなんだったか
Twitter.com/Toricls 「技術的負債」とはなにか?の共通認識 https://speakerdeck.com/toricls/the-debt
Twitter.com/Toricls 「技術的負債」とはなにか?の共通認識 https://speakerdeck.com/toricls/the-debt
Twitter.com/Toricls 「技術的負債」とはなにか?の共通認識 - まとめ 1 ▶︎ 主にエンジニアリングの⽣産性を低下させ、システムの継続的改善を前提としたビジネスモデルを リスクに晒している技術的要因 ▶︎ ⼈間、技術、ビジネス環境、ビジネスそのもの、すべてが時間の経過とともに変化する
▶︎ その変化の結果と最適の差分が技術的負債 ▶︎ 継続的改善前提でシステムを作る限り、優秀な⼈材を集めても(程度の差はあれど)必ず技術的負債は発⽣する ▶︎ なぜならシステムの周りが変化していくから ▶︎ ドメイン知識やスキル、市場理解が不⾜したままプロダクトや機能を作る必要性 ▶︎ 逆説的だが、だからこそ「継続的改善」が前提になる
Twitter.com/Toricls 「技術的負債」とはなにか?の共通認識 - まとめ 2 ▶︎ 技術的負債を⽣み出しているのはエンジニアリングだけではない ▶︎ 技術的負債は、不確実性をシステム側に押し付けた結果でもある ▶︎
ビジネスモデルそのもの、プロダクトのバリュープロポジション、⼀つ⼀つの機能要件、仕様… ▶︎ いたるところに不確実性が潜んでいる / SWE ⼭⽥さん(仮名)「最初から分かってたら?そりゃこうは作らないですよ〜」 ▶︎ 不確実性を他で飲み込めないとき、実⾏フェーズにあるエンジニアリングが未来の⾃分たちから「技術的 借⾦」をしてビジネスを前に進めている ▶︎ 顧客に価値を届けることに真剣なエンジニアリングであればあるほど、こうなりがち ▶︎ 当時は借⾦でビジネスを加速できたが、その利息が複利で今の⽣産性に悪影響を与えている ▶︎ 「技術的負債」は⼿抜きの結果ではない ▶︎ (そもそも過去時点でのドメイン知識不⾜やスキル不⾜を⼿抜きと評するのはあまりフェアではないですよね?)
Twitter.com/Toricls なぜ技術的負債を返済するのか https://speakerdeck.com/toricls/the-debt
Twitter.com/Toricls カミナシの技術的負債返済プロジェクトの話に進む前に… 技術的負債は(本来は)通常の開発プロセスの中で 継続的に返済し続けなければならない プロジェクト化が必要になってしまうような タイミングまで放置すること⾃体が誤り
twitter.com/toricls 技術的負債返済プロジェクト の
Twitter.com/Toricls カミナシの技術的負債返済プロジェクト - タイムライン Jun Aug Sep May Apr 検討開始
2022.04 下旬 負債返済プロジェクト 第1弾 2022.05.23 - 2022.06.30 負債返済プロジェクト 第2弾 2022.07.01 - 2022.12.31 経営意思決定・全社説明 2022.05 中旬 Oct Nov Jul 👆 イマココ 何を意思決定したの? 何を説明したの? 具体的な中⾝は? 具体的なn(ry 何を検討したの? この辺は何を?
Twitter.com/Toricls カミナシの技術的負債返済プロジェクト - 検討開始 ▶︎ SWE ⼭⽥さん(仮名)「コードを触るのが怖い😱」 ▶︎ 僕のカミナシ⼊社(4⽉)よりも前に EM
と会話した時点で技術的負債っぽい話は出ていた ▶︎ 当時は「データベースやばい」「モノリスが(ry」のようなフワッとした課題認識だった (実際にはもうちょっと具体的) ▶︎ 技術的負債と認識しているものをアクションに繋げられる粒度でチームメンバーにリスト化してもらった ▶︎ 各アイテムを放置した際の技術・ビジネス両⾯での想定リスクや返済で期待される効果について⾔語化 ▶︎ 返済によって New Hire 戦⼒化までの期間短縮に貢献するかもざっくりと5段階評価で書いてもらった ▶︎ リストの中の「退職リスク度」というユニークなカラムが⾯⽩かった (⾯⽩かった) ▶︎ 各アイテムのヤバさや⼼の⾟さ、対応コストなど複合的な要素をもとにまずはざっくり優先順位を決めた ▶︎ リストをもとに4⽉末から技術的負債の返済プランを検討開始 ▶︎ 何を、どういう順番で、どう⽚付けていくか ▶︎ 優先順位だけではなく、アイテム間には当然依存関係が ▶︎ 通常業務と並⾏して⽚付けられるか? ≒ プロジェクト化の必要があるか? ≒ 機能開発を⽌める必要があるか? ▶︎ 5⽉下旬から6⽉末までの5週間、機能開発を⽌めてビジネスロジックを触らないリファクタリングを⼀気に⾏うことで決定 (僕の中で) ▶︎ 経営、投資家、社内のステークホルダにどう説明するか? Apr 検討開始 2022.04 下旬
Twitter.com/Toricls カミナシの技術的負債返済プロジェクト - 経営意思決定 ▶︎ 「過去数ヶ⽉間で純粋な機能開発に使った時間」というファクトをもとに説明 ▶︎ エンジニアリングのほとんどの時間が顧客問合せに基づく調査や不具合修正などの対応に使われていたという事実 ▶︎ 「ここのところ⼤きな新機能出せてないね」という認識は当然経営メンバーも持っていた
▶︎ メンバーへの開発プロセスについてのヒアリング結果やシステム状況を根拠として「中⻑期的な視点での要件定義や設計 という観点が⾜りていない」「よりサステナブルなシステムとエンジニアリング組織にならなくてはいけない」というイ ンプットを経営の中で継続的に⾏っていたことも効果的だったのかもしれない ▶︎ 6⽉末までの5週間、機能開発と不具合修正をすべて⽌めて、負債返済プロジェクトにリソースを充てることで経営で合意 ▶︎ 顧客業務を⽌めてしまうクリティカルな不具合の修正と、障害発⽣時の対応は例外 ▶︎ システムやエンジニアリングは苦しかったが、ビジネスそのものはちゃんと伸びてきていたことが CEO/COO/CTO の三者で 合意・意思決定できた最⼤の理由かもしれない ▶︎ 他にも残キャッシュや次の調達を⾒据えた話など、いろんな要素が複合的に(いい感じに)絡み合って意思決定まで持って いけた ▶︎ ラッキー✌ May 経営意思決定 2022.05 中旬 検討開始 2022.04 下旬
Twitter.com/Toricls カミナシの技術的負債返済プロジェクト - 全社向けの説明 May 検討開始 経営意思決定 全社説明 2022.04 下旬
2022.05 中旬 ▶︎ 全社集会で概要、必要性、返済後の未来について説明したスライドから⼀部抜粋 (権利関係と社内都合で残念ながら⼀部モザイクをかけています) ▶︎ いきなり全社向けに説明したわけではなく、特に影響が⼤きい Customer Success チームには事前に説明を実施 ▶︎ 想定される影響についての説明や、どうしてもお客様との関係性の都合から対応してほしい改修が⽣まれたときにどうするか の例外的プロセスについての定義などなど ▶︎ PM や CS といった距離の近いステークホルダが理解を⽰してくれたことも、意思決定できた⼤きな理由の⼀つ
Twitter.com/Toricls 経営意思決定 全社説明 カミナシの技術的負債返済プロジェクト - 負債返済 PRJ 第1弾 ▶︎ やること
▶︎ アプリケーション(フロントエンド & バックエンド)コードの必要以上の複雑さを取り除き、負債返済 PRJ 第2弾以降でよりディープな技術的負債の返済に取り組むためのリファクタリング ▶︎ やらないこと ▶︎ ビジネスロジックは今は触らない ▶︎ インフラも今は触らない ▶︎ システム運⽤も今は特に変えない ▶︎ 結果、いくつかの⼩さな例外を除き、機能開発や不具合修正を完全に⽌めて負債返済にフォーカスできた ▶︎ コード全体の認知負荷が⼀定程度下がり、触るのがちょっと怖くなくなった ▶︎ New Hire のオンボーディングコストも下がりそう ▶︎ エンジニアリングメンバーの精神衛⽣がよろしくなった ▶︎ (フロントエンド側の負債はより重みがあることもクリアになった) 負債返済プロジェクト 第1弾 2022.05.23 - 2022.06.30 2022.05 中旬
Twitter.com/Toricls 負債返済プロジェクト 第1弾 カミナシの技術的負債返済プロジェクト - 負債返済 PRJ 第2弾(イマココ) ▶︎ 第1弾との違い
▶︎ 機能開発のような通常業務と並⾏して負債返済を実施する ▶︎ 通常業務(機能開発、不具合修正、問い合わせ対応、システム運⽤など)と、負債返済(incl. 運⽤改善)の時間の⽐率は 5:5 というルール ▶︎ 事前に定めた「優先度の⾼い重要な技術的負債群」が⽚付き次第、通常業務の時間を増やしていく(というルール) ▶︎ 第2弾期間のエンジニアリング組織としてのゴール ▶︎ 『中⻑期的な価値を犠牲にせずに業務の6割の時間を純粋な機能開発に充てられるチームへ』 ▶︎ 7⽉からやってきた(やっている)こと ▶︎ アプリケーション側 ▶︎ フロントエンド側はビジネスロジックまで含めた(重厚な)リファクタリングを実施中 ▶︎ バックエンド側では機能・⾮機能要件の想定不⾜を補う負債返済に取り組み中。パフォーマンスイシューとかも。 ▶︎ 駆動していない OpenAPI を駆動させたい ▶︎ 9⽉以降新たに着⼿すること ▶︎ インフラや運⽤やあれやこれや ▶︎ AWS 上のインフラやそのデリバリプロセスを整え、加えて「運⽤」を適切に定義して信頼性が⾼い運⽤モデルを⽬指す ▶︎ これに着⼿するために、AWS アクセス権限を適切に従業員に渡す仕組みは整備済み (AWS SSO, Control Tower, Organizations … ) 負債返済プロジェクト 第2弾 2022.07.01 - 2022.12.31 - 2022.06.30
twitter.com/toricls まとめ
Twitter.com/Toricls 本⽇のまとめ ▶︎ 技術的負債は継続的改善を前提としたシステムでは時間の経過とともに必ず⽣まれる ▶︎ 当時は全⼒を尽くしたが、時間の経過とともに最適ではなくなってしまったものが技術的負債 ▶︎ SWE ⼭⽥さん(仮名)「最初から分かってたら?そりゃこうは作らないですよ〜」 ▶︎
⼿抜きの結果ではない ▶︎ ビジネスやプロダクトマネジメントのフェーズで存在した不確実性を、実⾏フェーズであるエンジニアリングでカバーした 結果でもある ▶︎ ステークホルダ全員が真剣に向き合い、⾃分ごと化して取り組むことが必須。エンジニアリングだけの話にしない。 ▶︎ だからこそ、技術的負債も機能開発などと同じリストのバックログアイテムとして管理し、その着⼿の優先順位をフェアに 決めなければならない ▶︎ アクション可能なレベルで技術的負債の詳細と対応案をバックログアイテムに落とし込み、放置による影響や、対応で期待される 効果、そして可能な限りその測定⽅法を⾔語化し切ることが、エンジニアリングの責任として⾮常に重要 👋