Slide 1

Slide 1 text

チーム再編を伴う2年半のプラダ クト開発から学ぶソフトウェア アーキテクチャ運用のコツ 2024.03.24 #ooc_2024

Slide 2

Slide 2 text

(C)PharmaX Inc. 2024 All Rights Reserve 2 自己紹介 尾崎皓一 PharmaX エンジニアリーダ 週末は3歳と5歳の子供に遊ばれてます 今日は兵庫県の姫路から来ました!  @FooOzaki

Slide 3

Slide 3 text

3 (C)PharmaX Inc. 2024 All Rights Reserve 今日のテーマ

Slide 4

Slide 4 text

(C)PharmaX Inc. 2024 All Rights Reserve 4 今日のテーマ ● ソフトウェアアーキテクチャ運用についてお話しします ○ コーディングや設計手法の話はあまりしません ● 教科書でいくら学んで理解しても人はまちがいます(ワタシ) ○ 変化の激しいスタートアップでの2年半の失敗談や経験を元に お話しします ○ 何か一つでも気づきを得たら明日から行動してみてください!

Slide 5

Slide 5 text

(C)PharmaX Inc. 2024 All Rights Reserve 5 「薬局」は医療体験の中でも身近な存在 日用品から処方薬まで。「薬局」は皆さまの日常の近くに存在している ドラックストア 調剤薬局

Slide 6

Slide 6 text

(C)PharmaX Inc. 2024 All Rights Reserve 6 医療体験を横断する2つの事業領域 YOJO事業 未病・予防 治療 薬局DX事業

Slide 7

Slide 7 text

(C)PharmaX Inc. 2024 All Rights Reserve 7 LINE上でのチャットを通じて薬剤師と会話 日々の相談や健康状態に応じて、 漢方・サプリメントを購入 使い慣れたUI上から手軽に細かく体質チェック 薬剤師から漢方・サプリのご提案 そのほか健康相談やオンラインでの処方箋受付 YOJOのオペレーションシステム 1 2 3 患者向けチャットシステム

Slide 8

Slide 8 text

(C)PharmaX Inc. 2024 All Rights Reserve 8 薬剤師と患者をつなぐオペレーションシステム 患者とのスムーズなコミュニケーション 薬剤師向け管理画面 チャット形式での診断・相談・購入 患者向けチャットシステム

Slide 9

Slide 9 text

9 (C)PharmaX Inc. 2024 All Rights Reserve スタートアップの プロダクト変遷から 学ぼう!

Slide 10

Slide 10 text

(C)PharmaX Inc. 2024 All Rights Reserve 10 2019年06月 サービス開始 ソフトウェアリアーキテクチャ着手 序章:リアーキテクチャ完了 Part1-1:新規開発GOGO!? Part1-2:新規開発GOGO! Part2:最小チームで開発(薬局DX事業へ異動) Part3:YOJO事業エンジニアチーム再組成 YOJO事業のグロースとソフトウェアの変遷 2021年01月 2021年09月 2022年09月 2023年09月 ユーザ数の遷移

Slide 11

Slide 11 text

11 (C)PharmaX Inc. 2024 All Rights Reserve 序章 リアーキテクチャ

Slide 12

Slide 12 text

(C)PharmaX Inc. 2024 All Rights Reserve 12 2019年06月 サービス開始 ソフトウェアリアーキテクチャ着手 序章:リアーキテクチャ完了 Part1-1:新規開発GOGO!? Part1-2:新規開発GOGO! Part2:最小チームで開発(薬局DX事業へ異動) Part3:YOJO事業エンジニアチーム再組成 YOJO事業のグロースとソフトウェアの変遷 2021年01月 2021年09月 2022年09月 2023年09月

Slide 13

Slide 13 text

(C)PharmaX Inc. 2024 All Rights Reserve 13 当時の状況 ● モデルやビジネスロジックが肥大化し、クラスの責務も曖昧に ● 開発スピードが低下し、新規要件に耐えれなくなってきた ● Ruby on Rails標準のシンプルなソフトウェアアーキテクチャ構成 ● コーディング規約やフレームワーク運用ルールもしっかりは定まっていな い ● 副業的なエンジニア業務委託も多く人の入れ替わりが激しい

Slide 14

Slide 14 text

(C)PharmaX Inc. 2024 All Rights Reserve 14 レイヤ化アーキテクチャ導入 ● コアドメインのリモデリングをきっか けにドメイン駆動設計(DDD)を導 入 ● DDDと相性の良いレイヤ化アーキ テクチャを導入 ● 制約の厳しいアーキテクチャ導入に よりスキル感のばらつき・人の入れ 替わりを吸収したい

Slide 15

Slide 15 text

(C)PharmaX Inc. 2024 All Rights Reserve 15 祝!?リプレース完了          なんとかリプレース完了 ベースは固めてくれていた&メンバーが必死にキャッチアップ ● エンジニア社員数2名+副業業務委託エンジニアの体制 ○ 私も当時はフリーランスで業務委託で週3稼働 ● 唯一のDDD経験者の方がリアーキテクチャ主導していたが途中で退職 し、経験者不在に、、

Slide 16

Slide 16 text

16 (C)PharmaX Inc. 2024 All Rights Reserve PART 1-1:新規開発GOGO!?

Slide 17

Slide 17 text

(C)PharmaX Inc. 2024 All Rights Reserve 17 2019年06月 サービス開始 ソフトウェアリアーキテクチャ着手 序章:リアーキテクチャ完了 Part1-1:新規開発GOGO!? Part1-2:新規開発GOGO! Part2:最小チームで開発(薬局DX事業へ異動) Part3:YOJO事業エンジニアチーム再組成 YOJO事業のグロースとソフトウェアの変遷 2021年01月 2021年09月 2022年09月 2023年09月

Slide 18

Slide 18 text

(C)PharmaX Inc. 2024 All Rights Reserve 18 新規開発GOGO!?         なんだかスピードが出ない、、 ● オンボーディング大変 ● アーキテクチャの解釈にばらつきがレビュー戻し&議論が多発 ● ルール上は正しいんだけどなんだか臭うんだが、、 (うまく言語化できなくて放置される) ● エンジニア正社員追加+業務委託エンジニアも入れ替わり

Slide 19

Slide 19 text

(C)PharmaX Inc. 2024 All Rights Reserve 19 ソフトウェアアーキテクチャの定義      責務(役割)・制約(ルール)を明確に ● コーディング/ドキュメント/運用

Slide 20

Slide 20 text

(C)PharmaX Inc. 2024 All Rights Reserve 20 今日お伝えしたいこと(これしか言わないです) ソフトウェアアーキテクチャに正解はない 常にアップデートしていくもの 運用 ソフトウェア アーキテクチャ 守って 育てる

Slide 21

Slide 21 text

(C)PharmaX Inc. 2024 All Rights Reserve 21 新規開発GOGO!?         なんだかスピードが出ない、、 ● ルール上は正しいんだけどなんだか臭うんだが、、 (うまく言語化できなくて放置される) ○ →役割(責務)を明確に! ● アーキテクチャの解釈にばらつきが出て議論が多発 ○ →ルール(制約)を明確に! ● オンボーディング大変 ○ →コーディング&ドキュメンテーション ○ →極力シンプルに!

Slide 22

Slide 22 text

22 (C)PharmaX Inc. 2024 All Rights Reserve PART 1-2:新規開発GOGO!

Slide 23

Slide 23 text

(C)PharmaX Inc. 2024 All Rights Reserve 23 2019年06月 サービス開始 ソフトウェアリアーキテクチャ着手 序章:リアーキテクチャ完了 Part1-1:新規開発GOGO!? Part1-2:新規開発GOGO! Part2:最小チームで開発(薬局DX事業へ異動) Part3:YOJO事業エンジニアチーム再組成 YOJO事業のグロースとソフトウェアの変遷 2021年01月 2021年09月 2022年09月 2023年09月

Slide 24

Slide 24 text

(C)PharmaX Inc. 2024 All Rights Reserve 24 新規開発GOGO!         新たな課題がたくさん出てくる ● バックグラウンドジョブの定義・呼び出しはどうするんだっけ? ● 通知系の処理はどこからするんだっけ(メール通知、 LINE通知、Slack通知など) ● xxxのケースを共通利用したいけど規約違反になる? などなど ● ビジネス状況も変化&仮説検証、新規要件追加

Slide 25

Slide 25 text

(C)PharmaX Inc. 2024 All Rights Reserve 25 今日お伝えしたいこと ソフトウェアアーキテクチャに正解はない 常にアップデートしていくもの 運用 ソフトウェア アーキテクチャ 守って 育てる

Slide 26

Slide 26 text

(C)PharmaX Inc. 2024 All Rights Reserve 26 今日お伝えしたいこと そんなことはわかっている!日々アップデート! 運用 ソフトウェア アーキテクチャ 守って 育てる

Slide 27

Slide 27 text

(C)PharmaX Inc. 2024 All Rights Reserve 27         新たな課題がたくさん出てくる →都度議論し、アップデート ソフトウェアアーキテクチャを育てる         育て方を間違えたらだめ! ● Utilディレクトリ爆誕! ● 共通利用可能なレイヤーが生まれる(良いケースもあるけど) ● 似たようなクラスがいて使い分けがよくわからない

Slide 28

Slide 28 text

(C)PharmaX Inc. 2024 All Rights Reserve 28 ソフトウェアアーキテクチャの定義      責務(役割)・制約(ルール)を明確に ● コーディング/ドキュメント/運用

Slide 29

Slide 29 text

(C)PharmaX Inc. 2024 All Rights Reserve 29 シンプルに保つ →極力更新しない(バランス) ソフトウェアアーキテクチャの定義 運用 ソフトウェア アーキテクチャ 守って 育てる

Slide 30

Slide 30 text

(C)PharmaX Inc. 2024 All Rights Reserve 30 組織も育ってくる アーキテクチャが守れない!(負のスパイラルが存在する) ● アーキテクチャの理解度が甘く責務違反 ● ドキュメントの更新ができていない&デッドコード残ってる ● ユニットテストが書かれておらず、直すの勇気いる ● エンジニアが業務委託含めると10名程度の規模に

Slide 31

Slide 31 text

(C)PharmaX Inc. 2024 All Rights Reserve 31 どっちか破綻したら死にます 今日お伝えしたいこと 運用 ソフトウェア アーキテクチャ 守って 育てる

Slide 32

Slide 32 text

(C)PharmaX Inc. 2024 All Rights Reserve 32 ソフトウェアアーキテクチャの定義      責務(役割)・ルール(制約)を明確に ● アーキテクチャドキュメント作成

Slide 33

Slide 33 text

(C)PharmaX Inc. 2024 All Rights Reserve 33 シンプルに保つ →極力更新しない(バランス) ソフトウェアアーキテクチャの定義 運用 ソフトウェア アーキテクチャ 守って 育てる

Slide 34

Slide 34 text

(C)PharmaX Inc. 2024 All Rights Reserve 34 色んな引力に負けて人は血迷います ● リソースが足りない ○ リソースは足りないが、リソースを補うにもエンジニアの採用活動を しなければ ● PMF(プロダクトマーケットフィット)もしてない。出してみないと使われる かもわからない ○ この仮説はいけそう!今すぐにでも出してみたい!

Slide 35

Slide 35 text

(C)PharmaX Inc. 2024 All Rights Reserve 35 出血多量で死ぬ前になんとかしましょう 今日お伝えしたいこと 運用 ソフトウェア アーキテクチャ 守って 育てる

Slide 36

Slide 36 text

(C)PharmaX Inc. 2024 All Rights Reserve 36 新規開発GOGO!のサマリ ● 似たようなクラスがいて使い分けがよくわからない ● アーキテクチャの理解度が甘く責務違反 ● ドキュメントの更新ができていない&デッドコード残ってる ● ユニットテストが書かれておらず、直すの勇気いる ● 共通利用可能なレイヤーが生まれて、Utilityディレクトリ爆誕!

Slide 37

Slide 37 text

37 (C)PharmaX Inc. 2024 All Rights Reserve PART 2:最小チームで開発

Slide 38

Slide 38 text

(C)PharmaX Inc. 2024 All Rights Reserve 38 処方箋薬局(薬局DX)事業爆誕! コロナ禍で処方箋薬局の法緩和が進む ドラックストア 調剤薬局

Slide 39

Slide 39 text

(C)PharmaX Inc. 2024 All Rights Reserve 39 2019年06月 サービス開始 ソフトウェアリアーキテクチャ着手 序章:リアーキテクチャ完了 Part1-1:新規開発GOGO!? Part1-2:新規開発GOGO! Part2:最小チームで開発(薬局DX事業へ異動) Part3:YOJO事業エンジニアチーム再組成 YOJO事業のグロースとソフトウェアの変遷 2021年01月 2021年09月 2022年09月 2023年09月

Slide 40

Slide 40 text

(C)PharmaX Inc. 2024 All Rights Reserve 40 チームを一時的に縮小 しっかりルールは守って開発?ルール守るだけじゃないよ! ● デッドコードが増えていく ● 見直しが必要かも→気づけば歪みは大きくなってなり、ヤバイ! ● マーケの検証は継続し、キャンペーン等色々打つ ● チームは2名体制に

Slide 41

Slide 41 text

(C)PharmaX Inc. 2024 All Rights Reserve 41 何もしないと死にます 今日お伝えしたいこと 運用 ソフトウェア アーキテクチャ 守って 育てる

Slide 42

Slide 42 text

42 (C)PharmaX Inc. 2024 All Rights Reserve PART 3:じゃぁどうやって運用するの? 〜YOJO事業エンジニアチーム再編成〜

Slide 43

Slide 43 text

(C)PharmaX Inc. 2024 All Rights Reserve 43 2019年06月 サービス開始 ソフトウェアリアーキテクチャ着手 序章:リアーキテクチャ完了 Part1-1:新規開発GOGO!? Part1-2:新規開発GOGO! Part2:最小チームで開発(薬局DX事業へ異動) Part3:YOJO事業エンジニアチーム再組成 YOJO事業のグロースとソフトウェアの変遷 2021年01月 2021年09月 2022年09月 2023年09月

Slide 44

Slide 44 text

(C)PharmaX Inc. 2024 All Rights Reserve 44 誰でもわかるアーキテクチャガイド      コードとドキュメントの双方向で 責務(役割)・ルール(制約)を明確に

Slide 45

Slide 45 text

(C)PharmaX Inc. 2024 All Rights Reserve 45 シンプルに保つ アーキテクチャ責任者がレビュー&ルール化 (例)ディレクトリ追加は要注意

Slide 46

Slide 46 text

(C)PharmaX Inc. 2024 All Rights Reserve 46 人の入れ替わりを想定 ● Architecture Decision Recordsの導入 ● 文書で決定経緯を残す ● 守って育てるプラスα効果も ○ 議論が正しいプロセスで行わ れる ○ 議論に透明性が生まれ共有も 楽に

Slide 47

Slide 47 text

(C)PharmaX Inc. 2024 All Rights Reserve 47 チーム再編成     これまでの反省を踏まえた運用立て直し ● まずはテスト書く! ● デッドコード消す! ● 体制・運用の見直し ● 新しいメンバーも加わり、10名程度のチームに

Slide 48

Slide 48 text

(C)PharmaX Inc. 2024 All Rights Reserve 48 テスト書く!コード消す!習慣

Slide 49

Slide 49 text

49 (C)PharmaX Inc. 2024 All Rights Reserve まとめ

Slide 50

Slide 50 text

(C)PharmaX Inc. 2024 All Rights Reserve 50 今日お伝えしたいこと 責務(役割)・ルール(制約)を明確に シンプルに保つ 運用 ソフトウェア アーキテクチャ 守って 育てる

Slide 51

Slide 51 text

(C)PharmaX Inc. 2024 All Rights Reserve 51 今日お伝えしたいこと ソフトウェアアーキテクチャに正解はない 常にアップデートしていくもの 運用 ソフトウェア アーキテクチャ 守って 育てる

Slide 52

Slide 52 text

(C)PharmaX Inc. 2024 All Rights Reserve 52 守って育てるための運用設計 ● 誰でもわかるアーキテクチャを目指して守る ○ アーキテクチャガイド、サンプルリポジトリなど ○ デッドコード消す!テスト書く! ● 守りを意識して育てる ○ 議論と過程と結果を残して属人化を防ぐ(ADRs) ● 責任者を設置するのはおすすめ!

Slide 53

Slide 53 text

(C)PharmaX Inc. 2024 All Rights Reserve 53 最後に なんでも良いから実践・行動してみよう! 運用は日々の改善の積み重ねです! 運用 ソフトウェア アーキテクチャ 守って 育てる