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

技術的負債に向き合い続ける姿勢はスキル幅の広がりにも繋がる話

 技術的負債に向き合い続ける姿勢はスキル幅の広がりにも繋がる話

コドモン開発チーム

February 01, 2023
Tweet

More Decks by コドモン開発チーム

Transcript

  1. 2 経歴 PGとしてSESの会社で開発現場を数社経験し、事業に寄り 添ったエンジニアとして働きたいと思い、コドモンに入社。 自己紹介 西銘 承太郎 にしめ じょうたろう 2019.10

    コドモンに開発エンジニアとして入社 2020.04 保守改善チームのリーダーとして、 技術的負債に向き合い始める 2021.04 リリース運用改善を始める 2021.10 SREチームに異動。 インフラ周りにも手を伸ばし始める
  2. 受託開発期 2009年 創業 導入数 11,000 5 これまでの沿革 2009年に創業し、受託開発事業を経て2015年に保育・教育施設向け業務支援サービス「コドモン」をリリース。 保育・教育業界に根付いたバーティカル領域でシェアを伸ばしつつ、着実に成長戦略を実現しています。 全国200自治体

    で採用 BizDev 始動 ベネッセHD社と 資本業務提携 ㈱コドモンを 新設分割にて設立 コドモン正式版 リリース 導入数 5,000 導入数 1,500 導入数 100 スクール向け 連絡ツール 開発 コドモンβ版 リリース
  3. 7 開発・保守の難易度が 高いプロダクト状況 2020年まで「早くたくさん機能をつ くる」ことを最優先に開発してきた ため、アーキテクチャ面に課題があ ります。 技術的負債の課題 開発・保守しやすい ソースコードへ

    だからこうしていきます 機能単位でのリプレイス • 2021年2月、シフト機能をリリース • 2022年8月、資料室機能をリリース →今後は複線同時進行しリプレイスを加速予定 機能や処理単位でのリファクタリング • ドメイン駆動開発 x クリーンアーキテクチャ   ベースへのリファクタリングが進行中 →今後も各チームで優先度を判断しながら進行予定 7
  4. 21 CONFIDENTIAL - © 2022 CoDMON Inc. 21 1. エンジニアとは

    エンジニアリング ↓ 工学 (実現するための科学)
  5. 22 CONFIDENTIAL - © 2022 CoDMON Inc. 22 1. エンジニアとは

    ソフトウェアにおける エンジニアリング ↓ ?
  6. 23 CONFIDENTIAL - © 2022 CoDMON Inc. 23 1. エンジニアとは

    ソフトウェアにおける エンジニアリング ↓ 不確実性を効率よく削減すること
  7. 24 CONFIDENTIAL - © 2022 CoDMON Inc. 24 1. エンジニアとは

    ソフトウェアにおける エンジニアリング ↓ 不確実性を効率よく削減すること (=「曖昧さ」を減らし、「具体性・明確さ」を増やす行為)
  8. 26 CONFIDENTIAL - © 2022 CoDMON Inc. 26 1. エンジニアとは

    出典: 広木 大地 (著)『エンジニアリング組織論への招待 ~不確実性に向き合う思考と組織のリファクタリング』技術評論社、2018年、P12
  9. 27 CONFIDENTIAL - © 2022 CoDMON Inc. 27 1. エンジニアとは

    エンジニアとは ↓ 不確実性を効率よく削減する人
  10. 30 CONFIDENTIAL - © 2022 CoDMON Inc. 30 2. なぜ負債に向き合ってきたのか

    負債を返済する ↓ 目の前の開発ストレスを 取り除くこと?
  11. 31 CONFIDENTIAL - © 2022 CoDMON Inc. 31 負債を返済する ↓

    目の前の開発ストレスを 取り除くこと? 2. なぜ負債に向き合ってきたのか
  12. 33 CONFIDENTIAL - © 2022 CoDMON Inc. 33 2. なぜ負債に向き合ってきたのか

    負債を返済する ↓ 長期的にプロダクトを 良くすること
  13. 37 CONFIDENTIAL - © 2022 CoDMON Inc. 37 2. なぜ負債に向き合ってきたのか

    良いプロダクトをつくる ↓ 良い設計?流行りの技術使う?
  14. 38 CONFIDENTIAL - © 2022 CoDMON Inc. 38 2. なぜ負債に向き合ってきたのか

    良いプロダクトをつくる ↓ 「ユーザーにとっての本当の価値」 を仮説検証して積み重ねる
  15. 40 CONFIDENTIAL - © 2022 CoDMON Inc. 40 案件:ダッシュボード画面のデザイン変更(一般的な仮説検証の流れ) 前提:コードの改修は表示関数を修正すればOK!

      ↓ 仮説:ユーザーが喜ぶデザインはA?B? • 〇〇だからデザインAだろう • △△だからデザインBかも 2. なぜ負債に向き合ってきたのか
  16. 41 CONFIDENTIAL - © 2022 CoDMON Inc. 41 案件:ダッシュボード画面のデザイン変更(一般的な仮説検証の流れ) 前提:コードの改修は表示関数を修正すればOK!

      ↓ 仮説:ユーザーが喜ぶデザインはA?B? • 〇〇だからデザインAだろう • △△だからデザインBかも   ↓ 仮説検証結果をプロダクトに反映する 2. なぜ負債に向き合ってきたのか
  17. 43 CONFIDENTIAL - © 2022 CoDMON Inc. 43 案件:ダッシュボード画面のデザイン変更 (コドモンでの仮説検証の流れ)

    前提:コードの改修は表示関数を修正すればOK!    2. なぜ負債に向き合ってきたのか ✖ ✖ ✖ ✖ ✖
  18. 44 CONFIDENTIAL - © 2022 CoDMON Inc. 44 案件:ダッシュボード画面のデザイン変更 (コドモンでの仮説検証の流れ)

    前提:コードの改修は表示関数を修正すればOK!   ↓ テストで不具合を検知! 表示関数を修正すると特定のデータを持った ユーザーで画面崩れが発生!   2. なぜ負債に向き合ってきたのか ✖ ✖ ✖ ✖ ✖
  19. 45 CONFIDENTIAL - © 2022 CoDMON Inc. 45 案件:ダッシュボード画面のデザイン変更 (コドモンでの仮説検証の流れ)

    前提:コードの改修は表示関数を修正すればOK!   ↓ テストで不具合を検知! 表示関数を修正すると特定のデータを持った ユーザーで画面崩れが発生!   ↓ 仮説検証の前に前提の再確認が必要! 2. なぜ負債に向き合ってきたのか ✖ ✖ ✖ ✖ ✖
  20. 46 CONFIDENTIAL - © 2022 CoDMON Inc. 46 案件:ダッシュボード画面のデザイン変更 (コドモンでの仮説検証の流れ)

    前提(じゃなかった):コードの改修は表示関数を修正すればOK!   ↓  本当の前提:コードの改修は表示関数とデータ取得関数を修正すればOK! 2. なぜ負債に向き合ってきたのか 前提が違うのか...確かめなきゃ...
  21. 47 CONFIDENTIAL - © 2022 CoDMON Inc. 47 案件:ダッシュボード画面のデザイン変更 (コドモンでの仮説検証の流れ)

    前提(じゃなかった):コードの改修は表示関数を修正すればOK!   ↓  本当の前提:コードの改修は表示関数とデータ取得関数を修正すればOK!   ↓  仮説:ユーザーが喜ぶデザインはA?B?   ↓ 仮説検証結果をプロダクトに反映する 2. なぜ負債に向き合ってきたのか 前提が違うのか...確かめなきゃ... 前提がわかった...!やっと本題の仮説検証するぞ...
  22. 49 CONFIDENTIAL - © 2022 CoDMON Inc. 49 2. なぜ負債に向き合ってきたのか

    一般的に向き合いたい課題 コドモンが向き合っている課題
  23. 50 CONFIDENTIAL - © 2022 CoDMON Inc. 50 2. なぜ負債に向き合ってきたのか

    → 「ユーザーにとっての本当の価値」(不確実性) + 前提の確認 一般的に向き合いたい課題 コドモンが向き合っている課題
  24. 51 CONFIDENTIAL - © 2022 CoDMON Inc. 51 2. なぜ負債に向き合ってきたのか

    →「じゃなかった前提(技術的負債)」の確認(不確実性)   +「ユーザーにとっての本当の価値」(不確実性) → 「ユーザーにとっての本当の価値」(不確実性) + 前提の確認 一般的に向き合いたい課題 コドモンが向き合っている課題
  25. 52 CONFIDENTIAL - © 2022 CoDMON Inc. 52 2. なぜ負債に向き合ってきたのか

    ユーザーにとっての本当の価値に向き合いたい人 技術的負債に向き合いたい人
  26. 53 CONFIDENTIAL - © 2022 CoDMON Inc. 53 2. なぜ負債に向き合ってきたのか

    • 社長、CS、営業、PdM、デザイナー、エンジニアなどなど • サービスに共感してくれる社外の人 → たくさんいる 技術的負債に向き合いたい人 ユーザーにとっての本当の価値に向き合いたい人
  27. 54 CONFIDENTIAL - © 2022 CoDMON Inc. 54 2. なぜ負債に向き合ってきたのか

    • リファクタ大好きなエンジニア → あまりいない • 社長、CS、営業、PdM、デザイナー、エンジニアなどなど • サービスに共感してくれる社外の人 → たくさんいる ユーザーにとっての本当の価値に向き合いたい人 技術的負債に向き合いたい人
  28. 56 CONFIDENTIAL - © 2022 CoDMON Inc. 56 2. なぜ負債に向き合ってきたのか

    自分はエンジニアとして コドモンでどう働くべきか? ↓
  29. 57 CONFIDENTIAL - © 2022 CoDMON Inc. 57 2. なぜ負債に向き合ってきたのか

    自分はエンジニアとして コドモンでどう働くべきか? ↓ 技術的負債に向き合うこと
  30. 58 CONFIDENTIAL - © 2022 CoDMON Inc. 58 2. なぜ負債に向き合ってきたのか

    負債を返済する ↓ 長期的にプロダクトを 良くすること
  31. 61 CONFIDENTIAL - © 2022 CoDMON Inc. 61 3. 負債に向き合ってなにを得たのか

    負債に向き合って得たもの それは 「仕事」でした
  32. 62 CONFIDENTIAL - © 2022 CoDMON Inc. 62 「仕事の報酬は仕事」 by

    ソニー創業者 井深 大 3. 負債に向き合ってなにを得たのか
  33. 63 CONFIDENTIAL - © 2022 CoDMON Inc. 63 3. 負債に向き合ってなにを得たのか

    • コード修正によるリスク低減 • コードの複雑さを下げる 重視していたこと レガシーコード改善
  34. 64 CONFIDENTIAL - © 2022 CoDMON Inc. 64 3. 負債に向き合ってなにを得たのか

    • コード修正によるリスク低減 • コードの複雑さを下げる • アプリの野良コードのGit管理化 • 神ファイルの解体 重視していたこと やったこと レガシーコード改善
  35. 65 CONFIDENTIAL - © 2022 CoDMON Inc. 65 3. 負債に向き合ってなにを得たのか

    • コード修正によるリスク低減 • コードの複雑さを下げる • アプリの野良コードのGit管理化 • 神ファイルの解体 重視していたこと やったこと レガシーコード改善 • 可読性と変更容易性の向上による  開発者体験UP 結果
  36. 66 CONFIDENTIAL - © 2022 CoDMON Inc. 66 3. 負債に向き合ってなにを得たのか

    • コード修正によるリスク低減 • コードの複雑さを下げる • アプリの野良コードのGit管理化 • 神ファイルの解体 重視していたこと やったこと • 可読性と変更容易性の向上による  開発者体験UP Mgr) 「DX改善とかやる?」 ※DX (Developer Experience) = 開発者体験 結果 得た仕事 レガシーコード改善
  37. 67 CONFIDENTIAL - © 2022 CoDMON Inc. 67 3. 負債に向き合ってなにを得たのか

    • リリース作業によるリスク低減 • トイル(手作業)の削減 重視していたこと DX(開発者体験)改善
  38. 68 CONFIDENTIAL - © 2022 CoDMON Inc. 68 3. 負債に向き合ってなにを得たのか

    • リリース作業によるリスク低減 • トイル(手作業)の削減 • 3つに分かれたリポジトリの統合 • ビルド、デプロイ運用の整備 • リリースフローの自動化 重視していたこと やったこと DX(開発者体験)改善
  39. 69 CONFIDENTIAL - © 2022 CoDMON Inc. 69 3. 負債に向き合ってなにを得たのか

    • リリース作業によるリスク低減 • トイル(手作業)の削減 • 3つに分かれたリポジトリの統合 • ビルド、デプロイ運用の整備 • リリースフローの自動化 重視していたこと やったこと • リリース作業の均一化/工数の削減 • GitOpsの定着 結果 DX(開発者体験)改善
  40. 70 CONFIDENTIAL - © 2022 CoDMON Inc. 70 3. 負債に向き合ってなにを得たのか

    • リリース作業によるリスク低減 • トイル(手作業)の削減 • 3つに分かれたリポジトリの統合 • ビルド、デプロイ運用の整備 • リリースフローの自動化 重視していたこと やったこと • リリース作業の均一化/工数の削減 • GitOpsの定着 SRE) 「DevOpsやってるし、 アプリ触れるし、SREチームで プッシュ通知基盤の改善とかどう?」 結果 得た仕事 DX(開発者体験)改善
  41. 71 CONFIDENTIAL - © 2022 CoDMON Inc. 71 3. 負債に向き合ってなにを得たのか

    • 負荷によるリスク低減 • サービスの疎結合化 重視していること プッシュ通知基盤 / インフラ改善
  42. 72 CONFIDENTIAL - © 2022 CoDMON Inc. 72 3. 負債に向き合ってなにを得たのか

    • 負荷によるリスク低減 • サービスの疎結合化 • プッシュ通知基盤の改善 • 既存サービスの負荷調査 重視していること やっていること プッシュ通知基盤 / インフラ改善
  43. 73 CONFIDENTIAL - © 2022 CoDMON Inc. 73 • レガシーコード改善

    3. 負債に向き合ってなにを得たのか やってきた仕事 • プロダクトの深い知見 得たスキル、知見
  44. 74 CONFIDENTIAL - © 2022 CoDMON Inc. 74 • レガシーコード改善

    ↓ • DX(開発者体験)改善 3. 負債に向き合ってなにを得たのか やってきた仕事 • プロダクトの深い知見 • CI/CDツール(GitHub Actions) 得たスキル、知見
  45. 75 CONFIDENTIAL - © 2022 CoDMON Inc. 75 • プロダクトの深い知見

    • CI/CDツール(GitHub Actions) • コンテナ設計(Docker,ECS) • Terraformによるインフラ構築 • レガシーコード改善 ↓ • DX(開発者体験)改善 ↓ • プッシュ通知基盤改善 3. 負債に向き合ってなにを得たのか やってきた仕事 得たスキル、知見
  46. 76 CONFIDENTIAL - © 2022 CoDMON Inc. 76 • レガシーコード改善

    ↓ • DX(開発者体験)改善 ↓ • プッシュ通知基盤改善 • インフラ改善 • プロダクトの深い知見 • CI/CDツール(GitHub Actions) • コンテナ設計(Docker,ECS) • Terraformによるインフラ構築 • 監視ツール(Datadog) • データ分析ツール(Jupyter) • 負荷テストツール(k6) 3. 負債に向き合ってなにを得たのか やってきた仕事 得たスキル、知見
  47. 77 CONFIDENTIAL - © 2022 CoDMON Inc. 77 • レガシーコード改善

    ↓ • DX(開発者体験)改善 ↓ • プッシュ通知基盤改善 • インフラ改善 3. 負債に向き合ってなにを得たのか やってきた仕事 • プロダクトの深い知見 • CI/CDツール(GitHub Actions) • コンテナ設計(Docker,ECS) • Terraformによるインフラ構築 • 監視ツール(Datadog) • データ分析ツール(Jupyter) • 負荷テストツール(k6) 得たスキル、知見
  48. 78 CONFIDENTIAL - © 2022 CoDMON Inc. 78 負債を返済すると プロダクトの

    次の理想像が見えてくる 3. 負債に向き合ってなにを得たのか
  49. 79 CONFIDENTIAL - © 2022 CoDMON Inc. 79 プロダクトの 次の理想像への障壁が

    また負債として見えてくる 3. 負債に向き合ってなにを得たのか
  50. 81 CONFIDENTIAL - © 2022 CoDMON Inc. 81 プロダクトが成長すると 自分が挑戦できる

    機会も増えていく 3. 負債に向き合ってなにを得たのか
  51. 82 CONFIDENTIAL - © 2022 CoDMON Inc. 82 その結果こそが! 3.

    負債に向き合ってなにを得たのか
  52. 85 CONFIDENTIAL - © 2022 CoDMON Inc. 85 4. 振り返り

    負債に向き合ってきて 実際どうだったのか?
  53. 87 CONFIDENTIAL - © 2022 CoDMON Inc. 87 4. 振り返り

    最初はめちゃくちゃ大変でした...
  54. 88 CONFIDENTIAL - © 2022 CoDMON Inc. 88 4. 振り返り

    神ファイル(controllers.js)の解体
  55. 89 CONFIDENTIAL - © 2022 CoDMON Inc. 89 神ファイル(controllers.js)とは •

    可読性がとにかく低い! ファイル内検索で同じ名前の関数や変数が大量に... 4. 振り返り
  56. 90 CONFIDENTIAL - © 2022 CoDMON Inc. 90 神ファイル(controllers.js)とは •

    可読性がとにかく低い! ファイル内検索で同じ名前の関数や変数が大量に... • 影響範囲がとにかく大きい! 触るたびに他の機能に影響が出ないか不安になる... 4. 振り返り
  57. 91 CONFIDENTIAL - © 2022 CoDMON Inc. 91 4. 振り返り

    controllers.jsに悩まない状況にしたい!
  58. 92 CONFIDENTIAL - © 2022 CoDMON Inc. 92 神ファイル(controllers.js)解体の大変さ •

    リリースまでの慎重な影響調査 担当チームと古株メンバーへの影響確認と可読性の低さ 4. 振り返り
  59. 93 CONFIDENTIAL - © 2022 CoDMON Inc. 93 神ファイル(controllers.js)解体の大変さ •

    リリースまでの慎重な影響調査 担当チームと古株メンバーへの影響確認と可読性の低さ • 影響範囲を抑えるための分割リリース 画面ごとに20回以上に分けてのリリース作業 4. 振り返り
  60. 94 CONFIDENTIAL - © 2022 CoDMON Inc. 94 4. 振り返り

    神ファイル(controllers.js)を解体すると
  61. 95 CONFIDENTIAL - © 2022 CoDMON Inc. 95 神ファイル(controllers.js)を解体すると •

    返済した時に、開発部が盛り上がる! みんなその負債に苦しんでたので、とても感謝してくれるし、自分も嬉しい! 4. 振り返り
  62. 96 CONFIDENTIAL - © 2022 CoDMON Inc. 96 神ファイル(controllers.js)を解体すると •

    返済した時に、開発部が盛り上がる! みんなその負債に苦しんでたので、とても感謝してくれるし、自分も嬉しい! • 負債の名前が、返済以降は会話に出なくなる! 組織とプロダクトのたしかな進歩を感じる! (最近入社した方は、controllers.js なんて知らない) 4. 振り返り
  63. 97 CONFIDENTIAL - © 2022 CoDMON Inc. 97 4. 振り返り

    この最初の取り組みで得た 反省があります
  64. 98 CONFIDENTIAL - © 2022 CoDMON Inc. 98 → ユーザーの価値に直接繋がらないため、何のためにやってるか見失いやすい

     その結果、トラブルが起きた時にモチベーションを保つのが難しかった 4. 振り返り 反省 一人でやってて、辛くなった時があった
  65. 99 CONFIDENTIAL - © 2022 CoDMON Inc. 99 → ユーザーの価値に直接繋がらないため、何のためにやってるか見失いやすい

      その結果、トラブルが起きた時にモチベーションを保つのが難しかった 4. 振り返り 反省 一人でやってて、辛くなった時があった → なるべく会社やチームと合意しながら進めて、一人でやらない  周りの理解を得られなければ課題の数値化、言語化から始めるのも良いかも 学び 周りを巻き込んでいこう
  66. 100 CONFIDENTIAL - © 2022 CoDMON Inc. 100 4. 振り返り

    チームで対応すると 自分には無いスキルや知見を持った人と働くため お互いにスキル、知見を深めやすい
  67. 101 CONFIDENTIAL - © 2022 CoDMON Inc. 101 4. 振り返り

    スキル、知見が増えると プロダクトや組織に還元出来ることも増えるので チームワークは大事にしていきましょう
  68. 102 CONFIDENTIAL - © 2022 CoDMON Inc. 102 4. 振り返り

    プロダクトや組織も大事ですが
  69. 103 CONFIDENTIAL - © 2022 CoDMON Inc. 103 4. 振り返り

    プロダクトや組織のためにも
  70. 104 CONFIDENTIAL - © 2022 CoDMON Inc. 104 4. 振り返り

    負債返済で自分が 辛くならない ようにしましょう!
  71. LT会 毎月第三水曜日の午後に1時間、 LT会を開催しています。 トピックを技術に限定しておらず 多様な発表があり、トピックに よってはGoogle Meetのチャット コメントがお祭りのようになるこ ともあります。 育休や時短勤務

    男女関係なく、育休や時短勤務を しているメンバーも多いです。 「子どもを取り巻く環境をテクノ ロジーの力でよりよいものに」と いう会社のミッションは、自分た ちの働き方にもつながっていま す。 リノベマンションでコロナ禍を乗 り越えた一家の話 現代エディタ界の帝王 あなたの知らないリリース基盤の 世界 MySQLでテーブルロックが掛かっ た話 クリーンアーキテクチャで絶対ク リーンにならない部分の話 こんなこともあります 輪読会や勉強会の開催 コドモンには週半日の学習投資の 制度があります。制度を使って個 人的な学習だけではなく、チーム や有志での勉強会・輪読会などが 頻繁に開催されています。また外 部の方や有識者主催でハンズオン が開催されることもあります。 117 毎日の開発や調査にペアプログラミ ングを取り入れてます。ドライバー のコーディング・進め方・ふるまい についてナビゲーターがその場です ぐにフィードバックし、小さいタイ ムラグでフィードバックサイクルを 回します。 ペアプロ/モブプロ