Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
難しいから面白い!医薬品×在庫管理ドメインの複雑性と向き合い、プロダクトの成長を支えるた...
Search
kakehashi
September 05, 2024
Technology
3
300
難しいから面白い!医薬品×在庫管理ドメインの複雑性と向き合い、プロダクトの成長を支えるための取り組み / Initiatives to Support Product Growth
プロダクトエンジニアが語る!医療、決済、物流、不動産ドメイン
https://openlogi.connpass.com/event/326081/
での登壇資料です
kakehashi
September 05, 2024
Tweet
Share
More Decks by kakehashi
See All by kakehashi
適材適所の技術選定 〜GraphQL・REST API・tRPC〜 / Optimal Technology Selection
kakehashi
1
160
誰も全体を知らない ~ ロールの垣根を超えて引き上げる開発生産性 / Boosting Development Productivity Across Roles
kakehashi
1
220
スプリントゴールにチームの状態も設定する背景とその効果 / Team state in sprint goals why and impact
kakehashi
2
150
プロダクト成長に対応するプラットフォーム戦略:Authleteによる共通認証基盤の移行事例 / Building an authentication platform using Authlete and AWS
kakehashi
1
220
見えづらい活動の成果の伝え方は日頃からめちゃくちゃ悩んでるけど、実際こんな取り組みをしな がら温度感を合わせにいってるよ / Conveying Hard-to-See Results
kakehashi
4
2.3k
Evolving DevOps Teams and Flexible Organizational Culture
kakehashi
1
1.3k
日本の医療システムの再構築を目指すスタートアップ「カケハシ」のフロントエンド領域でのチャレンジ / Challenges in the frontend domain at “Kakehashi”
kakehashi
3
2.3k
そのデータ連携、ホントにそれでいいの? 〜データモデル分析の重要性を説く〜 / How to analyse data integration
kakehashi
2
770
プロポーザル出しまくり芸人が教える、プロポーザルを採択してもらう技術 / Techniques for Getting Proposal Accepted
kakehashi
7
11k
Other Decks in Technology
See All in Technology
Amazon Personalizeのレコメンドシステム構築、実際何するの?〜大体10分で具体的なイメージをつかむ〜
kniino
1
100
テストコード品質を高めるためにMutation Testingライブラリ・Strykerを実戦導入してみた話
ysknsid25
7
2.6k
社内で最大の技術的負債のリファクタリングに取り組んだお話し
kidooonn
1
550
ノーコードデータ分析ツールで体験する時系列データ分析超入門
negi111111
0
410
開発生産性を上げながらビジネスも30倍成長させてきたチームの姿
kamina_zzz
2
1.7k
iOS/Androidで同じUI体験をネ イティブで作成する際に気をつ けたい落とし穴
fumiyasac0921
1
110
TypeScript、上達の瞬間
sadnessojisan
46
13k
なぜ今 AI Agent なのか _近藤憲児
kenjikondobai
4
1.3k
AIチャットボット開発への生成AI活用
ryomrt
0
170
OCI Vault 概要
oracle4engineer
PRO
0
9.7k
サイバーセキュリティと認知バイアス:対策の隙を埋める心理学的アプローチ
shumei_ito
0
380
スクラムチームを立ち上げる〜チーム開発で得られたもの・得られなかったもの〜
ohnoeight
2
350
Featured
See All Featured
A Modern Web Designer's Workflow
chriscoyier
693
190k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.5k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
126
18k
Visualization
eitanlees
145
15k
Optimizing for Happiness
mojombo
376
70k
Making the Leap to Tech Lead
cromwellryan
133
8.9k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
506
140k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.8k
Teambox: Starting and Learning
jrom
133
8.8k
Transcript
日本の医療体験を、しなやかに。 © KAKEHASHI Inc. 2024/09/05 プロダクトエンジニアが語る!医療、決済、物流、不動産ドメイン 株式会社 カケハシ 松本 明紘
難しいから面白い! 医薬品×在庫管理ドメインの複雑性と向き合い、 プロダクトの成長を支えるための取り組み
自己紹介 もっち(@mottyzzz) 松本 明紘 株式会社 カケハシ(2023年2月〜) • AI在庫管理、新規事業 • バックエンドに軸足を置くテックリード
最近 • 仕事中も歩くようにしたことで 運動の習慣ができてきた
日本の医療体験を、 しなやかに。 カケハシは、調剤薬局DXを入り口に 日本の医療システムの再構築を目指す ヘルステックスタートアップ
患者 薬局 医薬品 サプライチェーン Vision 4 明日の医療の基盤となる、エコシステムの実現。
日本スタートアップ大賞2024 厚生労働大臣賞受賞 日本スタートアップ大賞は、次世代のロールモデル となるような、インパクトのある新事業を創出した 起業家やスタートアップを表彰し称える制度です。 カケハシのプロダクトはすでに薬局の20%でご利 用いただいており、医療・福祉分野におけるイノ ベーションの創出や発展に対する寄与を評価いただ きました。
カケハシの5つのプロダクト 今月リリース三周年 🎉🎉🎉
医薬品×在庫管理
薬局の在庫管理の業務 在庫管理 薬局 在庫が 増える 発注 発注(電子・FAX) 納品 医薬品卸 •
卸への発注(購入)によって在庫が増える 在庫が 減る 処方箋 処方 医薬品 患者さん • 患者さんへの処方(販売)によって在庫が減る
処方と発注の医薬品の特徴(調剤方法の違い) • 処方の医薬品と発注の医薬品が一致しない セルベックスカプセル 50mg 処方の粒度 処方する種類が多くてたくさ んの薬を飲まなきゃいけない ので1回飲む単位に小分けして お渡ししよう!
PTP 10カプセルシート 10枚入り PTP 10カプセルシート 100枚入り PTP 21カプセルシート 10枚入り PTP 21カプセルシート 50枚入り バラ 500カプセル入り 1瓶 バラ 3000カプセル入り 1瓶 PTP 10カプセルシート 300枚入り PTP 21カプセルシート 150枚入り 発注の粒度 処方された薬は1種類だし PTPシートをそのままお渡し しよう! • 処方箋の内容によって薬剤師さんの判断が入り、選択する調剤方法が異なる
処方と発注の医薬品の特徴(患者さんの好み) • 処方の医薬品と発注の医薬品が一致しない • 処方では効能のみ気にするが、患者さんにとっては味なども重要な要素 エンシュア・H 処方の粒度 バニラ味 24缶入り 発注の粒度
今回はどの味になさいます か? コーヒー味 24缶入り バナナ味 24缶入り 黒糖味 24缶入り メロン味 24缶入り ストロベリー味 24缶入り 抹茶味 24缶入り 画像の出典: https://www.abbott.co.jp/our-product s/ensure-h.html
在庫管理と発注の医薬品の単位 • 発注の医薬品の単位は細かすぎて、在庫管理には向かない セルベックスカプセル 50mg PTP 10カプセルシート 10枚入り PTP 10カプセルシート
100枚入り PTP 21カプセルシート 10枚入り PTP 21カプセルシート 50枚入り バラ 500カプセル入り 1瓶 バラ 3000カプセル入り 1瓶 PTP 10カプセルシート 300枚入り PTP 21カプセルシート 150枚入り 処方の粒度 発注の粒度 結局、 PTP 10カプセルシートは何枚 残ってるの? どれを何個持っていても 違いはない PTP 10カプセルシート PTP 21カプセルシート バラ 在庫管理に適切な粒度で モデル化 • AI在庫管理では在庫管理に適切な粒度で管理できるようにモデル化をしている
医薬品の単位の違いに対するAI在庫管理の対応 • 処方箋のデータからは、どの医薬品の在庫を実際に減らし たかというのが分からない ◦ 塗り薬をミックスしたり、錠剤を粉砕機で粉にすることもある ◦ 正確な単位で在庫を減らすというのは難しい AI在庫管理ではその薬局が取り扱っている医薬品や 過去の発注履歴などから予測している
プロダクトのフェーズも変化してきた
プロダクトのフェーズの変化 • これまではSMBへの導入が中心 • 徐々に導入いただく薬局さまも増え、その規模も大きく なってきている • エンタープライズ特有の機能を注力して開発している最中
これまでと異なる医薬品の単位の重要性 • エンタープライズへの導入で在庫管理の正確性がより重要になってきた セルベックスカプセル 50mg PTP 10カプセルシート 10枚入り PTP 10カプセルシート
100枚入り PTP 21カプセルシート 10枚入り PTP 21カプセルシート 50枚入り バラ 500カプセル入り 1瓶 バラ 3000カプセル入り 1瓶 PTP 10カプセルシート 300枚入り PTP 21カプセルシート 150枚入り 処方の粒度 発注の粒度 PTP 10カプセルシート PTP 21カプセルシート バラ 在庫管理したい単位 実際のモノの粒度 ロット番号:XXX001 有効期限:2024/12/16 購入時原価:1280円 置き場所:棚001 ロット番号:XXX002 有効期限:2025/02/04 購入時原価:1340円 置き場所:棚002 ロット番号:XXX003 有効期限:2025/03/09 購入時原価:1140円 置き場所:棚001 在庫量の最適化だけではな く、資産管理としての在庫管 理が重要になってきた • これまではあまり重要視していなかった医薬品の単位も重要になった 処方や発注で 意識したい単位 在庫管理(資産管理) したい単位
医薬品×在庫管理ドメインのプロダクトの難しさ • 医薬品自体の複雑さ • 同じ業務でも薬局ごとに異なる業務フローがあり、 どれが一般的なものか判断が難しく抽象化もしづらい • 複雑な医薬品や業務をとりまく課題にDeep Diveすると、 どうしても解決策も複雑になりがち
• フェーズの変化による新たな発見
AI在庫管理の開発における課題
プロダクトの課題 • 機能間やデータ間の結合度が高くなってきている • 機能追加の影響範囲が広くなり、調査や動作確認などにコスト がかかっている • 考慮漏れによってリリース前に慌てたり、ヒヤリハットの件数 が増えてきた 品質を高めながら長期的に保守するために、
複雑になったプロダクトをシンプルに再構築していく必要性が出てきた 大きなリアーキテクチャが必要
カケハシはスタートアップ カケハシはスクラムの会社
まだまだ状況も組織も変化していく 大きな課題だからこそ小さく進めたい
変化を味方につけてその循環の中で小さく進める • 機能開発は止めない 開発プロセスの中で自然とよくしていきたい • 短期的な効果を自分たちも実感しながら、 取り組み方自体もより良くしながら進めたい • そのときのベストなアーキテクチャよりも 今後も変化できる常にベターなアーキテクチャ
そういうふうにプロダクトを成長させたい
複雑さの中で プロダクトを成長を支えるための 3つの取り組みと小さく進める方法
3つの取り組み 1. 外部仕様の複雑性を可視化しシンプルにする 2. すでに複雑になってしまったコンポーネントに対する リファクタリング 3. 自動テストの分かりやすさの向上 考慮すべきことを減らし てアウトプットの質をス
ピードを維持 ねらい① 考慮漏れが原因によるイ ンシデント発生を減らす ねらい② (自分たちを含む)将来の 開発者が自信をもって コードを変更できる ねらい③
外部仕様の複雑性を可視化して シンプルにする
デシジョンテーブルで既存仕様の共通認識を作る • お客様にも説明しづらい仕様になってきている • そこに機能を追加するとさらに複雑にしてしまう可能性がある • 機能開発のタイミングでデシジョンテーブルで既存仕様の複雑さを可視化 • ここにこの仕様を追加したらもう頭で理解できないよね、とか、先にUIを改善して から取り組もうとか、そんな会話をロールを超えてできる
デシジョンテーブル プロダクトマネージャー エンジニア 外部仕様の複雑性を可視化しシンプルにする
実際に作成しているデシジョンテーブル 外部仕様の複雑性を可視化しシンプルにする
• 抽象データモデルや物理データモデルなどで プロダクトマネージャーとエンジニアとの共通認識を作る活動 をしたことはあった ◦ 既存の複雑性を表現できずに課題感の認識合わせが難しかった ◦ 理想を描いたり業務理解にはよかったが、 既存実装とのギャップが大きくなりすぎて進めなくなった なぜデシジョンテーブルなのか
デシジョンテーブルで既存の仕様を正確に認識して会話。 価値の低い既存仕様を削除していくなどの 大胆なアプローチにもつながる! 外部仕様の複雑性を可視化しシンプルにする
• デシジョンテーブルを網羅的に作成するのは既存仕様をすべて理解し て記載する必要があり重いプロセスになりがち • ルールにはせず、ガイドラインとしてプロセスに組み込む 無理なくデシジョンテーブルを作成していく コミュニケーションガイド 説明 変更のしやすさ、変更の頻度 ルール
原則として守るべきもの 低 ガイドライン 理由があれば守らなくていい 守った方が多くの場合で良い効 果がある 中 Best Current Practice(BCP) ガイドラインほどではないけど 今一番良いプラクティス 高 外部仕様の複雑性を可視化しシンプルにする
すでに複雑になってしまった コンポーネントに対する リファクタリング
既存のモジュール構成 すでに複雑になってしまったコンポーネントに対するリファクタリング ユース ケース 共通処理 ユース ケース ユース ケース ユース
ケース ユース ケース データ 医薬品 データ データ データ データ 在庫管理 発注 処方 その他機能 ユース ケース ユース ケース データ データ • トランザクションスクリプトの構成 • 一つ一つのユースケースの開発は分かりやすく最速 シンプルな時期は良かったが、それぞれの責務の範囲を超えて複雑化
将来のモジュール構成 • 業務領域ごとにモジュール化、責務で適切にレイヤー化 • 業務ロジックを抽象データモデルとして表現 ユース ケース ユース ケース ユース
ケース ユース ケース ユース ケース データ 在庫品目とし ての医薬品 データ 購入対象とし ての医薬品 データ 処方対象とし ての医薬品 データ データ 抽象 データ 抽象 データ 抽象 データ 抽象 データ サービ ス サービ ス 在庫管理 発注 処方 その他機能 データ データ 抽象 データ その他医薬品 データ ユース ケース データ ユース ケース 抽象 データ 抽象 データ すでに複雑になってしまったコンポーネントに対するリファクタリング
効果の大きいリファクタリングから小さく始める • 静的解析ツール+αで メトリクスを取得し可視化 • 取得したメトリクスの例 ◦ インポートの数 ◦ クラス数、メソッド数、関数の数
◦ 変更回数(効果の大きさ) ◦ 循環的複雑度(テスト容易性) ◦ 認知的複雑度(理解容易性) ◦ 保守容易性指数 ◦ データの参照数(データの結合度) すでに複雑になってしまったコンポーネントに対するリファクタリング
自動テストの分かりやすさを 向上させていく
自動テストを分かりやすくするってどういうこと • 開発が特定のメンバーに偏り 属人性が高くなっているコンポーネントが存在 • 理解できているメンバーが限られてしまっていた • そのコンポーネントを開発していないメンバーでも理解でき るようにするために、テスト自体を理解しやすくする 自動テストの分かりやすさを向上させていく
自動テストを分かりやすくするってどういうこと • 既存の自動テストの理解容易性を向上させ、 変更に対して不安なく開発できる状態を目指す ◦ 将来の自分も新規参入者も何を確認しているかが分かる ◦ プロダクトコードを変更した際に、どの振る舞いを満たしている か/どの振る舞いが破壊されたかどうかが一目で分かる テストは知識の塊。
分かりやすいテスト群になることで 機能の分かりやすさも向上する 自動テストの分かりやすさを向上させていく
Gherkin記法によるテストの理解容易性の向上 Scenario: 同一処方箋番号の複数の処方箋データファイルが複数回取り込まれないこと Given: カケハシ薬局が存在する And: 処方箋の対象薬品のマスタが存在する And: 処方箋データファイルをアップロードする And:
同一処方箋番号の別の処方箋データファイルをアップロード When: 処方箋データ取り込み処理を実行する Then: 処方箋データが1件登録される And: 処方箋明細データが登録される And: 医薬品在庫出庫データが登録される And: 医薬品在庫出庫データが処方された医薬品に紐づいている And: 医薬品在庫は更新されない 前提条件をGivenに記述 期待動作をThenに記述 テスト実行対象の実行を Whenに記述 処方箋データ取り込みのテストに対するGherkin記法の記述例 自動テストの分かりやすさを向上させていく
属人性が高いところから小さく始める 自動テストの分かりやすさを向上させていく • Gitの変更ログから、コンポーネン トごとに属人性(開発者がどのくら い偏っているか)を確認 • 重要なコンポーネント、かつ、1〜2 人で偏っているところから優先して 理解容易性を上げる活動を実施
まとめ
まとめ • 医薬品×在庫管理ドメインの難しい課題にDeep Diveする ことで、その解決策となる機能も複雑になってきている • 紹介したような取り組みによって、その複雑さの中でも少 しずつプロダクトを良い状態に変えられている • 小さく進めていることで、障害対応や重要な機能開発など
の他の取り組みの温度感が上がったタイミングでも無理な く進められている
複雑だから面白い! • 変化が生き物のようでプロダクトを育てている感覚 • 課題や複雑性に本気でDeep Diveできて エンジニアリングでどんどん良くできるのが楽しい • プロダクトへの愛着が湧くので、難しい課題でもなんとか してやろうって思える。複雑性すらも可愛く見えてくる
これからも医療体験が日々進化する 世界の実現のために、プロダクトを 成長させていきます
None