Slide 1

Slide 1 text

asken リアーキテクチャを行う背景と DDD導入戦略 2023.9.14 村上 英誉 @株式会社asken

Slide 2

Slide 2 text

社外秘 © asken.inc 自己紹介 経歴 2005 - SIerでキャリアスタート 2013 - 某ISPでアジャイル、DDDと出会って感銘を受ける 2023 - askenジョイン 最近のお仕事 ・プロダクト型組織への変換 ・DDDでのリアーキテクチャ、チームの立ち上げ その中でたくさんの失敗学習をしてきました 村上 英誉(ヒデタカ) 株式会社 asken 副部長/EM フルリモート@宮城県仙台市在住

Slide 3

Slide 3 text

社外秘 © asken.inc 今日の概要 - なぜリアーキテクチャをやるのかといった背景 - リアーキテクチャの進め方について紹介 - 涙なしでは語れない過去の学習話も

Slide 4

Slide 4 text

社外秘 © asken.inc 背景

Slide 5

Slide 5 text

社外秘 © asken.inc あすけんの今

Slide 6

Slide 6 text

社外秘 © asken.inc もっと多くの人を健康に

Slide 7

Slide 7 text

社外秘 © asken.inc サービスを届ける上で問題が・・・ 我々の期待する3〜6倍の期間がかかってしまっている

Slide 8

Slide 8 text

社外秘 © asken.inc 色々な問題はあるが システムに関連する 問題も大きい

Slide 9

Slide 9 text

社外秘 © asken.inc やること

Slide 10

Slide 10 text

社外秘 © asken.inc システムの問題と原因 影響箇所の特定に時間がかかる - サービス仕様からシステムの修正箇所を推測するのが難しい <原因> ①サービスの構造とシステムの構造が不一致 ②サービス仕様がまとまっていない

Slide 11

Slide 11 text

社外秘 © asken.inc 現行システムの問題① P:サービスの構造とシステムの構造が不一致 サービスの構造 システムの構造 A B C AとC-1 B-1 B-2 C-2 変換 サービス、システム、変換ルールと 3つ理解する必要がある

Slide 12

Slide 12 text

社外秘 © asken.inc DDDで解決する T:サービスの構造とシステムの構造を一致させる = DDD サービスの構造 システムの構造 A B C 業務が分かればシステムもわかる A B C 🟰

Slide 13

Slide 13 text

社外秘 © asken.inc リアーキテクチャを行う DB サブシステムA (コアドメイン) サブシステムB モバイルアプリ iOS/Android サブシステムC サブシステム・・ バックエンドシステムが対象

Slide 14

Slide 14 text

社外秘 © asken.inc リアーキテクチャを行う 色々変えます ○ 設計思想にDDDを採用 ○ 言語・フレームワーク変更 ○ アーキテクチャ変更 ○ CI/CDの仕組み変更 ○ サーバ構成も変更 ○ などなど

Slide 15

Slide 15 text

社外秘 © asken.inc 言語・フレームワーク変更 DDDを実践するにあたり技術スタックを見直し PHP/CakePHP → Kotlin/Spring Boot ※詳細は弊社テックブログをご覧ください https://tech.asken.inc/entry/2023/08/10/170000

Slide 16

Slide 16 text

社外秘 © asken.inc 現行システムの問題② P:サービス仕様がまとまっていない サービスの構造 A B C サービスの仕様 ・ドキュメントがあったりなかった ・機能毎に記載内容に一貫性がない

Slide 17

Slide 17 text

社外秘 © asken.inc RDRA/ICONIXで解決 T:ドメインモデルと繋げやすいRDRA/ICONIXで仕様を整理 サービスの構造 A B C サービスの仕様 情報 モデル バリエー ション UC 記述 BUC SUC ドメイン モデル

Slide 18

Slide 18 text

社外秘 © asken.inc 進め方

Slide 19

Slide 19 text

社外秘 © asken.inc いいシステムにしたい でも できるだけ早く終わらせたい

Slide 20

Slide 20 text

社外秘 © asken.inc 戦略 ドメインに集中 ドメイン分析/実装/検証により多くの時間を使う  → プロセスなどやり方を決めるところを効率よくやりたい 早めに検証 リリース後に致命的な後戻りを発生させない  →本格的な開発の前に業務分析、モデリングの妥当性を確認する シンプル化 サービス仕様をシンプルにして作るものを減らす  →サービス仕様を再整理 or 実はもう使われてない機能などは削除 段階的リリース フィードバックを早く受けられる、成果を早く享受できる  →全部できてからリリースするのではなく、少しずつリリースしていく

Slide 21

Slide 21 text

社外秘 © asken.inc 戦略1.ドメインに集中 達成したいこと ドメインの分析/設計/実装/検証に多くの時間を使いたい  → プロセスなどやり方を決めるところを効率よくやりたい やること 知見のあるメンバーをアサインし既存メンバーと共に実践する - 組織としてゼロから知見を蓄えるところをショートカットする - ハマりどころを事前に回避できる

Slide 22

Slide 22 text

社外秘 © asken.inc 戦略1.ドメインに集中 問題 知見のあるメンバーが社内にいなかった・・・ 対策 社外からでもアサインする - 採用:EM1名、エンジニア1名採用、継続して採用中 - 業務委託:株式会社ミライトデザイン - DDDの実践経験あり - コンサルだけではなく開発チームに入って協業できる

Slide 23

Slide 23 text

社外秘 © asken.inc 戦略2.早めに検証 かつての失敗談 1ユースケースリリース後、2ユースケース目の開発中に致命的 なモデルの間違いが発覚、作り直しが必要になった 4ヶ月分の開発がやり直しに!!!!

Slide 24

Slide 24 text

社外秘 © asken.inc 戦略2.早めに検証 達成したいこと リリース後に致命的な後戻りを発生させない  →本格的な開発の前に業務分析、モデリングの妥当性を確認する やること 本格的に作り始める前に、PoCを3回作る - コアドメインの概要をモデリング、Domain、Applicationレイヤーの実 装をして、妥当性を確認する - 結果としてaskenメンバーがプロセスを習得できる、開発ツールの検証 にもつながる

Slide 25

Slide 25 text

社外秘 © asken.inc 戦略3.シンプル化 ドメインエキスパートと会話せず、仕様書から現行の仕様を トレースし既存の仕様を踏襲することにした。一番複雑で 後々まで開発の重荷になった機能が、実は不要だったことが 発覚。 苦労して負債を作り込んでしまった!!!!

Slide 26

Slide 26 text

社外秘 © asken.inc 戦略3.シンプル化 達成したいこと サービス仕様をシンプルにして作るものを減らす  →サービス仕様を再整理 or 実はもう使われてない機能などは削除 やること 定期的にドメインエキスパートと対話する機会を設ける - サービス仕様の整理も一緒にやれると理想 - 成果物レビュー会を設け、ユースケース、ユースケース記述、ドメイ ンモデルなどレビューをする

Slide 27

Slide 27 text

社外秘 © asken.inc 戦略4.段階的リリース 達成したいこと フィードバックを早く受けられる、成果を早く享受できる  →全部できてからリリースするのではなく、少しずつリリースしていく やること 優先順位を決めて少しずつリリースしていく - サブシステムは一つずつ選択 - 今回はDBはお預け - サブシステム内も1機能ずつ

Slide 28

Slide 28 text

社外秘 © asken.inc 一度にやらずに順番に対応 DB サブシステムA (コアドメイン) サブシステムB サブドメイン モバイルアプリ iOS/Android サブシステムC サブドメイン サブシステム・・ まずはここから DBは後回し コアドメインが終わってから

Slide 29

Slide 29 text

社外秘 © asken.inc 一度にやらずに順番に対応 ② ① ③ ④ ⑤ ⑥

Slide 30

Slide 30 text

社外秘 © asken.inc マイルストン 技術選定 事前準備/検証 計画 本開発 本開発に向けて以下を実施中 - 優先順位などの移行戦略 - 体制強化 - 育成方法の確立   ここがすごい大事 - ドメインに集中:DDDのやり 方を確立  - 早めに検証:コアドメインの モデルの分析/検証 これから ・人数を増やしながら実践 ・既存システムとの連携 ・既存メンバーの育成(暖簾分け) イマココ ドメインに集中 早めに検証 シンプル化 段階的リリース

Slide 31

Slide 31 text

社外秘 © asken.inc まとめ

Slide 32

Slide 32 text

社外秘 © asken.inc DDDで解決する T:サービスの構造とシステムの構造を一致させる = DDD サービスの構造 システムの構造 A B C 業務が分かればシステムもわかる A B C 🟰

Slide 33

Slide 33 text

社外秘 © asken.inc 戦略 ドメインに集中 ドメイン分析/実装/検証により多くの時間を使う  → プロセスなどのやり方は早めに固めてしまう 早めに検証 リリース後に致命的な後戻りを発生させない  →本格的な開発の前に業務分析、モデリングの妥当性を確認する シンプル化 サービス仕様をシンプルにして作るものを減らす  →サービス仕様を再整理 or 実はもう使われてない機能などは削除 段階的リリース フィードバックを早く受けられる、成果を早く享受できる  →全部できてからリリースするのではなく、少しずつリリースしていく

Slide 34

Slide 34 text

社外秘 © asken.inc 何をするか 本格的な開発を始める前の準備が大事 - ドメインに集中するためプロセスは一旦早めに固めてしまう - 経験者はどうにかしてアサインする - ドメインの分析/設計/実装をして検証 フィードバックを得る - サービスをシンプルにするためドメインエキスパートと対話 - 早く得るため段階的にリリース

Slide 35

Slide 35 text

社外秘 © asken.inc いいシステムを作る かつ できるだけ早く終わらせる

Slide 36

Slide 36 text

社外秘 © asken.inc お知らせ askenは一緒働く仲間を募集しています 一緒に多くの人を健康にするサービスを作りましょう!!

Slide 37

Slide 37 text

社外秘 © asken.inc ご清聴ありがとうございました