2023/07/19 技術的負債、どうやって解消した?リアーキテクチャ・リファクタ事例から学ぶLunch LT
今日からできる! 技術的負債返済への最初の一歩 https://findy.connpass.com/event/288877/
ソフトウェアエンジニア 鈴木 健太郎
株式会社カミナシ今日からできる!技術的負債返済への最初の一歩2023.07.19発表資料技術的負債、どうやって解消した?リアーキテクチャ・リファクタ事例から学ぶLunch LT
View Slide
自己紹介鈴木 健太郎 / Kentaro SUZUKI@szk3すずけん | Cloud Architect, Software Engineer株式会社カミナシ エンジニアリング本部 Harami Engineering 第2ユニット ソフトウェアエンジニア
現場DXプラットフォーム カミナシ
アジェンダ
51.技術的負債になりかけていた機能を リアーキテクティングしたら めちゃくちゃ改善した話 (ダイジェスト版)2.リアーキテクティングPJで学んだこと3.まとめアジェンダ
技術負債になりかけていた機能をリアーキテクティングしたらめちゃくちゃ改善した話(ダイジェスト版)
古くから存在する1つの機能をリアーキテクティングしたら...目に見える成果を出すことができました 🙌● 処理時間は、4分の1以下 に● AWSリソースの利用コストは、90%程度削減
お客様が記録した帳票データを、Excel形式のファイルに変換し、出力するバッチ処理をリアーキテクティングリアーキテクティングの対象となった機能xlsx形式DBxlsx形式xlsx形式ファイル
Read / WriteAWS Cloud旧システムアーキテクチャの構成図Amazon EventBridge AWS CodeBuildAmazon Elastic ContainerRegistry (Amazon ECR) Amazon AuroraAmazon Simple StorageService (Amazon S3)1234TrigerImage pullDocker runCreate xlsx filegoroutine(1..n)Putxlsx
利用者の増加とともに、設計当初のシステムアーキテクチャが技術的負債(当時の最適が今の最適ではなくなった)になっていた抱えていた課題1.バッチ処理のスループットをあげにくい2.AWSリソースの利用コストが無駄にかかる3.バッチ処理が失敗するとスクラムに影響が大きい旧システムアーキテクチャが抱えていた課題
AWS CloudAmazon Fargate新システムアーキテクチャの構成図xlsxAmazon EventBridgeJob Submit1234TrigerFind conversion targetsAmazon AuroraCreate xlsx fileContainerAWS BatchAmazon FargateAmazon S3Job Scheduling56xlsxxlsxFind export data
AWS CloudAmazon Fargate新システムアーキテクチャのポイント - 1. AWS Batchを中心に非同期処理を実現xlsxAmazon EventBridgeJob Submit1234TrigerFind conversion targetsAmazon AuroraCreate xlsx fileContainerAWS BatchAmazon FargateAmazon S3Job Scheduling56xlsxxlsxFind export data4AWS BatchJob Scheduling1. AWS Batchを中心に非同期処理を実現
AWS Cloud新システムアーキテクチャのポイント - 2. バッチ処理を責務で分離xlsxAmazon EventBridge124TrigerFind conversion targetsAmazon AuroraContainerAWS Batch Amazon S3Job SchedulingxlsxxlsxAmazon FargateJob Submit35 Find export dataAmazon FargateCreate xlsx file62. バッチ処理を責務で分離
AWS CloudAmazon Fargate新システムアーキテクチャのポイント - 3. スケールアウトの実現と、自動リトライの導入xlsxAmazon EventBridgeJob Submit123TrigerFind conversion targetsAmazon AuroraCreate xlsx fileContainerAmazon S356xlsxxlsxFind export data4AWS BatchAmazon FargateJob Scheduling3. スケールアウトの実現と、自動リトライの導入
抱えていた課題を、きれいに解消 👍1.バッチ処理のスループットをあげにくい → スケールアウトできる仕組みを実現2.AWSリソースの利用コストが無駄にかかる → AWS リソースの利用コストを約90%削減3.バッチ処理が失敗するとスクラムに影響が大きい → リトライ処理および監視の効率化新システムアーキテクチャで解消した課題
変換処理が集中する月初でのバッチ処理時間 (※移行時の計測データ) 先月との比較で、処理時間は 4分の1に 👏 \ 2時間7分(127分) → 29分 /リアーキテクティングの成果
LTで収まらないので、もっと詳しく!スライドを公開しています 👀(※ AWS Dev Day 2023 Tokyo のオンデマンド配信で動画もご覧いただけます)https://speakerdeck.com/kaminashi/a-story-that-improved-a-lot-when-re-architecting-a-function-that-was-about-to-become-technical-debt
リアーキテクティングPJからの学び
リアーキテクティングPJが、一定の成果を出せた要因として考えられるものリアーキテクティングPJを振り返り、何がよかったのかを再考 👀成果に繋がった要因と考えられること1. 技術的負債に対する、組織的な理解がある2. Design Doc を通じてチームメンバー間の認識齟齬を減らす3. 新システムアーキテクチャの不確実性を可能な限り減らす
1.技術的負債に対する、組織的な理解組織やPJの生成に決裁権を持つ人のPJに対する理解● ワーキンググループではなく、業務としてPJ化https://speakerdeck.com/toricls/the-debt?slide=33 https://speakerdeck.com/toricls/the-debt?slide=34
1.技術的負債に対する、組織的な理解システムが要求を満たせなくなる前に、最適を再評価・反映https://speakerdeck.com/toricls/the-debt?slide=18 https://speakerdeck.com/toricls/the-debt?slide=17
1.技術的負債に対する、組織的な理解現場の人は、ステークホルダーに説明する責任があり、意思決定者は、合意形成と認識共有に責任があるhttps://speakerdeck.com/toricls/the-debt?slide=36 https://speakerdeck.com/toricls/the-dbt?slide=37
2.Design Doc を通じて、チームメンバー間の認識齟齬を減らす認識齟齬・情報格差をなくす為に Design Doc が機能した● PJの遂行は新しいチームで担当● 入社間もないメンバーもいた
2.Design Doc を通じて、チームメンバー間の認識齟齬を減らすDesign Doc を書くと、何がもたらされるのか?● 現状、課題、目標・アウトカムの目線が揃えやすくなる(※)● 対象とする範囲が明確になる(ノンゴールの明示)● チームとしてトレードオフを考慮した意思決定ができる(※) 例えば、前述のPJにおけるアウトカムは以下のように定義 「変換処理が集中する月初の目標処理時間を1時間以内にする」
2.Design Doc を通じて、チームメンバー間の認識齟齬を減らすDesign Doc 記述の工夫● スクラムタスクとして、妥当な工数を確保● チームで共通のフォーマットを使う● レビューはチーム全員で行う
3.新システムアーキテクチャの不確実性を可能な限り減らす新システムアーキテクチャが安定している保証はない● 大きな変更ほど、ビッグバンリリースは避ける● ロールバックのしやすさを重視● Feature Flagsなどを用い、段階的ロールアウトを計画する
3.新システムアーキテクチャの不確実性を可能な限り減らすエンジニア以外のチームにも、協力を依頼する前提で調整● カスタマーサポート(CS) チームがサポートしやすい移行計画● PJは新しいチームで担当したのでチームの力を過信しすぎない
まとめ
リアーキテクティングPJからの学びを踏まえ...今日からできる!技術的負債返済への最初の一歩 を提案1. 技術的負債について対話を増やそう2. 技術的負債について課題となりたい状態を言語化しよう
共通認識を作るため、チームや組織で対話を増やそう● 最適は、時間や環境で変化しうるものだから● 当事者は、自分(とそのチーム)なのだから● あなたとわたしの技術的負債の捉え方は違うかも知れないからまとめ - 1.技術的負債について対話を増やそう
まとめ - 2.技術的負債について、課題となりたい状態を言語化しようDesign Doc で現状を整理し、課題となりたい状態を言語化しよう● 人は、忘れる生き物だから● 課題の整理とゴール設定が、推進力を産むから● なりたい状態が、設計の精度を上げるから
まとめ - 今日からできる!技術的負債返済への最初の一歩新しく何かを作るより、既存のシステムを運用しながら改善するほうが難易度が高い (※ことが多い)なので、地に足をつけてPJを前に進めるには、対話やゴール設定など、普通のことを普通にやりきるための仕組みやチームのマインドが大切
タノシイヨ-!マッテルヨ-!We’re Hiring !!We're Hiring !!CTO at Kaminashi, Inc. Tori Hara @toricls
ご静聴ありがとうございました
https://kaminashi.jp株式会社カミナシ