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

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

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

2024/03/24 Object-Oriented Conference(オブジェクト指向カンファレンス2024)の登壇資料です
https://ooc.dev/2024/

本発表では、PharmaXというスタートアップでの2年半にわたるプロダクト開発の実経験を基に、ストーリー仕立てでソフトウェアアーキテクチャの運用についてお話しします。

特にソフトウェアを取り巻く環境や人材の変化に柔軟に対応するための
・ソフトウェアアーキテクチャ定義
・ソフトウェアアーキテクチャ維持・更新機構
・ソフトウェアアーキテクチャ運用指針
の重要性に焦点を当てます。

More Decks by PharmaX(旧YOJO Technologies)開発チーム

Transcript

  1. (C)PharmaX Inc. 2024 All Rights Reserve 2 自己紹介 尾崎皓一 PharmaX

    エンジニアリーダ 週末は3歳と5歳の子供に遊ばれてます 今日は兵庫県の姫路から来ました!  @FooOzaki
  2. (C)PharmaX Inc. 2024 All Rights Reserve 4 今日のテーマ • ソフトウェアアーキテクチャ運用についてお話しします

    ◦ コーディングや設計手法の話はあまりしません • 教科書でいくら学んで理解しても人はまちがいます(ワタシ) ◦ 変化の激しいスタートアップでの2年半の失敗談や経験を元に お話しします ◦ 何か一つでも気づきを得たら明日から行動してみてください!
  3. (C)PharmaX Inc. 2024 All Rights Reserve 7 LINE上でのチャットを通じて薬剤師と会話 日々の相談や健康状態に応じて、 漢方・サプリメントを購入

    使い慣れたUI上から手軽に細かく体質チェック 薬剤師から漢方・サプリのご提案 そのほか健康相談やオンラインでの処方箋受付 YOJOのオペレーションシステム 1 2 3 患者向けチャットシステム
  4. (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月 ユーザ数の遷移
  5. (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月
  6. (C)PharmaX Inc. 2024 All Rights Reserve 13 当時の状況 • モデルやビジネスロジックが肥大化し、クラスの責務も曖昧に

    • 開発スピードが低下し、新規要件に耐えれなくなってきた • Ruby on Rails標準のシンプルなソフトウェアアーキテクチャ構成 • コーディング規約やフレームワーク運用ルールもしっかりは定まっていな い • 副業的なエンジニア業務委託も多く人の入れ替わりが激しい
  7. (C)PharmaX Inc. 2024 All Rights Reserve 14 レイヤ化アーキテクチャ導入 • コアドメインのリモデリングをきっか

    けにドメイン駆動設計(DDD)を導 入 • DDDと相性の良いレイヤ化アーキ テクチャを導入 • 制約の厳しいアーキテクチャ導入に よりスキル感のばらつき・人の入れ 替わりを吸収したい
  8. (C)PharmaX Inc. 2024 All Rights Reserve 15 祝!?リプレース完了          なんとかリプレース完了 ベースは固めてくれていた&メンバーが必死にキャッチアップ

    • エンジニア社員数2名+副業業務委託エンジニアの体制 ◦ 私も当時はフリーランスで業務委託で週3稼働 • 唯一のDDD経験者の方がリアーキテクチャ主導していたが途中で退職 し、経験者不在に、、
  9. (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月
  10. (C)PharmaX Inc. 2024 All Rights Reserve 18 新規開発GOGO!?         なんだかスピードが出ない、、

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

    • ルール上は正しいんだけどなんだか臭うんだが、、 (うまく言語化できなくて放置される) ◦ →役割(責務)を明確に! • アーキテクチャの解釈にばらつきが出て議論が多発 ◦ →ルール(制約)を明確に! • オンボーディング大変 ◦ →コーディング&ドキュメンテーション ◦ →極力シンプルに!
  12. (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月
  13. (C)PharmaX Inc. 2024 All Rights Reserve 24 新規開発GOGO!         新たな課題がたくさん出てくる

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

    ソフトウェアアーキテクチャを育てる         育て方を間違えたらだめ! • Utilディレクトリ爆誕! • 共通利用可能なレイヤーが生まれる(良いケースもあるけど) • 似たようなクラスがいて使い分けがよくわからない
  15. (C)PharmaX Inc. 2024 All Rights Reserve 30 組織も育ってくる アーキテクチャが守れない!(負のスパイラルが存在する) •

    アーキテクチャの理解度が甘く責務違反 • ドキュメントの更新ができていない&デッドコード残ってる • ユニットテストが書かれておらず、直すの勇気いる • エンジニアが業務委託含めると10名程度の規模に
  16. (C)PharmaX Inc. 2024 All Rights Reserve 34 色んな引力に負けて人は血迷います • リソースが足りない

    ◦ リソースは足りないが、リソースを補うにもエンジニアの採用活動を しなければ • PMF(プロダクトマーケットフィット)もしてない。出してみないと使われる かもわからない ◦ この仮説はいけそう!今すぐにでも出してみたい!
  17. (C)PharmaX Inc. 2024 All Rights Reserve 36 新規開発GOGO!のサマリ • 似たようなクラスがいて使い分けがよくわからない

    • アーキテクチャの理解度が甘く責務違反 • ドキュメントの更新ができていない&デッドコード残ってる • ユニットテストが書かれておらず、直すの勇気いる • 共通利用可能なレイヤーが生まれて、Utilityディレクトリ爆誕!
  18. (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月
  19. (C)PharmaX Inc. 2024 All Rights Reserve 40 チームを一時的に縮小 しっかりルールは守って開発?ルール守るだけじゃないよ! •

    デッドコードが増えていく • 見直しが必要かも→気づけば歪みは大きくなってなり、ヤバイ! • マーケの検証は継続し、キャンペーン等色々打つ • チームは2名体制に
  20. (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月
  21. (C)PharmaX Inc. 2024 All Rights Reserve 46 人の入れ替わりを想定 • Architecture

    Decision Recordsの導入 • 文書で決定経緯を残す • 守って育てるプラスα効果も ◦ 議論が正しいプロセスで行わ れる ◦ 議論に透明性が生まれ共有も 楽に
  22. (C)PharmaX Inc. 2024 All Rights Reserve 47 チーム再編成     これまでの反省を踏まえた運用立て直し •

    まずはテスト書く! • デッドコード消す! • 体制・運用の見直し • 新しいメンバーも加わり、10名程度のチームに
  23. (C)PharmaX Inc. 2024 All Rights Reserve 52 守って育てるための運用設計 • 誰でもわかるアーキテクチャを目指して守る

    ◦ アーキテクチャガイド、サンプルリポジトリなど ◦ デッドコード消す!テスト書く! • 守りを意識して育てる ◦ 議論と過程と結果を残して属人化を防ぐ(ADRs) • 責任者を設置するのはおすすめ!