Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ユーザー数100万人規模の事業成長を止めずに、レガシーコードと戦う / JJUG CCC 2022 Fall

ユーザー数100万人規模の事業成長を止めずに、レガシーコードと戦う / JJUG CCC 2022 Fall

2022年11月27日に開催された「JJUG CCC 2022 Fall」の登壇資料です。
https://ccc2022fall.java-users.jp/

-----
Visionalのエンジニアリングに関する最新情報はTwitter、ブログで発信しています!📣

▼Visional Engineering Blog
https://engineering.visional.inc/blog/

▼VISIONAL ENGINEERING Twitter
https://twitter.com/VISIONAL_ENG

More Decks by Visional Engineering & Design

Other Decks in Technology

Transcript

  1. 3 グループ概要 (2022年7月末日時点) 6,226百万円 資本金 (2022年7月末日時点) 1,821名 従業員数 東京・大阪・名古屋・福岡 静岡・広島

    拠点 2009年4月 創業 (株式会社ビズリーチ創業) 2020年2月 設立 (ビジョナル株式会社設立)
  2. 16 事業を成長させるため、短期戦略が重視されてきた 短期戦略 利益 リスク/品質 短期 長期 組織戦略 デザイン戦略 プロダクトロードマップ

    セキュリティ戦略  イノベーション SRE戦略 DevOps QA戦略 プロセス改善 業績コミットの施策が中心で、 中長期視点での開発は計画的に進められていなかった。
  3. デリバリに過度なプレッシャー • 事業が急成長していると、技術的負債を生んでしまう意思決定が起こりやすい • QCDSのうちコスト、納期、スコープが固定されると品質が下がる 密結合で凝集度が低いプログラム構造が原因でテストが書きづらい • プレゼンテーションロジックとドメインロジックがちゃんと分離されていない • API呼び出しやDBアクセスなど副作用がドメインロジックと同じ場所にあった

    • 度重なる変更でスパゲッティ化したコードは何をやってるのかを読み解くのも一苦労 大規模プロジェクトを計画し、実行しきる組織力が不足 • 過去これまでに何度か技術的負債解消プロジェクトは立ち上がってはいた • 短期間の課題解決能力は高いが、プロジェクトマネジメントの経験が浅い傾向があった 18 レガシーコードの生まれた原因分析
  4. 21 CTOによる緊急事態宣言で半年間新規開発をストップ 重要度(高) 重要度(低) 緊急度(低) 緊急度(高) セキュリ ティ対応 経営や事業部へプロダクトの状況を説明し、新規開発を完全にストップ。 緊急かつ重要な課題にフォーカスして対応。

    モニタリン グできてな い スロークエ リが頻発 プロセスが開 発規模に追い ついてない 緊急リリー スが多い エラーログ が多い 大規模プロ ジェクトの計 画・実行がう まくできない ジュニア比 率が多い アーキテク チャが古い テストがな く、変更し づらい 会計監査/ 内部統制監 査対策
  5. 根本的な改善には至っていないものの、いったん止血はできた • モニタリングを強化することによって、システムの健康状態を把握できるようになった • データ量が伸び続ける中で、パフォーマンス問題が一定解消した • エラーログが減ったので監視しやすくなった • E2EテストとQAテストによる品質担保がされるようになった •

    少しずつ開発チームが品質を意識するようになっていった 同じ過ちを繰り返さないために • 変更容易性を失うと後手に回るので、早い段階でレガシーコードを生む構造はなくす • プロダクト開発のあらゆる活動をモニタリングすることで現状を把握し続けることが大事 25 緊急事態宣言とリスク対応の振り返り
  6. 解消すべき運用課題をリストアップ • 機能追加及び変更のしやすさ • テスタビリティ • オーナーシップ • デプロイメント •

    監視 • スケーラビリティ • オンボーディング • etc… 27 運用課題の解消に向けて作戦を練る
  7. • 変更とテストがしやすいように、凝集度を高める • 変更とテストがしやすいように、疎結合にする • 変更とテストがしやすいように、テストピラミッドを形成する • 変更とテストがしやすいように、関心事を分ける • 変更とテストがしやすいように、ドメインモデルを作る

    • 変更とテストがしやすいように、単体テストを書く • 各チームが変更とテストがしやすいように、アーキテクチャを考える • 各チームが変更とテストがしやすいように、組織を考える • 各チームが変更とテストがしやすいように、プロセスを考える • ・・・ 30 特に変更容易性とテスト容易性にフォーカス
  8. Explicitly define the context within which a model applies. Explicitly

    set boundaries in terms of team organization, usage within specific parts of the application, and physical manifestations such as code bases and database schemas. Keep the model strictly consistent within these bounds, but don't be distracted or confused by issues outside. ― 『Domain-Driven Design: Tackling Complexity in the Heart of Software』 モデルが適用されるコンテキストを明示的に定義する。チーム組織、アプリケーションの特定の部 分における使用、コードベースやデータベーススキーマのような物理的な表現など、境界を明示的 に設定します。これらの境界内ではモデルの一貫性を厳密に保ちますが、境界外の問題に惑わされ たり混乱したりしないようにします。 40 境界づけられたコンテキストでシステムを分離する https://martinfowler.com/bliki/BoundedContext.html
  9. マッキンゼーの7Sを用いて整理する 47 戦略を実現するためのチェンジマネジメント Strategy (戦略) Structure (組織構造) Systems (経営システム) Shared

    Value (共通の価値観) Staff (人材) Skills (組織のスキル) Style (組織文化) ハードの3S (戦略・構造・システム) →着手しやすい ソフトの4S (共通の価値観・文化・スキル・人材) →変更に時間がかかる
  10. Strategy(戦略) • 「キャリアインフラ」はどうあるべきか、どのように達成するか言語化 • ロードマップを作り、適宜更新しながら必要なリソースを再配置 Structure(組織構造) • ミッションに基づいた各組織ユニットの再設計 • 縦・横の兼務を解消し、ラインマネジメントをあるべき形へ

    Systems(システム) • 予算管理、目標管理、採用管理の予実を可視化 • 経営指標をモニタリングするために必要な仕組みづくり • 組織変更に合わせた会議体の再設計 49 まずはハードの3Sから改善を着手
  11. 50 • 月次でロードマップを見直す • 週次で施策の提案、共有、相談を実施 • リスクの早期発見と対処、優先順位付け 反復的、継続的な意思決定で計画と実行のリズムを作る 各プロダクトオーナー +

    経営メンバー 中長期ロード マップ 短期ロード マップ 月次報告 トピックス確 認 優先順位をつける 評価 振り返り 実施計画 ROIの責任を負う 提案、共有、相談持 ち込み
  12. 51 開発チームも計画と実行のリズムを作って改善し続ける プロダクトオーナー プロダクト バックログ スプリント計 画 スプリントレ ビュー レトロスペク

    ティブ スプリント カンバンボー ド 開発チーム 優先順位をつける 実施計画 評価 振り返り 生産性を向上させる ROIの責任を負う デイリー スクラム
  13. Shared Value(共通の価値観) • 創業以来続けている通り、採用で見極め、 Mission / Value を日々体現 Style(組織文化) •

    良いエンジニアリング文化の形成(QCDS意識 / ドキュメンテーション / DevOpsなど) Skills(組織のスキル) • ミドルマネジメントの強化 • 個々のプロジェクトマネジメント力向上 Staff(人材) • あるべきアーキテクチャ、組織構造に足りない人材の採用 • 適所適材の実現 52 ソフトの4Sは継続して改善中
  14. 61 基本方針は変わらず、やるべきことをやる 変更容易性とテスト容易性の改善 • 変更とテストがしやすいように実装されていればなんとでもなる • オブジェクト指向プログラミングおよびDDDの考え方をベースに作り変える あるべきアーキテクチャ・組織構造への変革 • 事業戦略と課題分析をもとに、あるべきアーキテクチャ・組織構造を描く

    • 段階的に新システムへ移行していくことで、戦略を実現できるプロダクトへ変える 組織・プロセスの改善 • 採用、育成、マネジメント強化によって、戦略実現に必要なケイパビリティを獲得する • DevOps、QA、セキュリティ戦略を実現できるプロセスへ変える
  15. 65