ドクターズプライム Official Blog

「救急車たらい回しをゼロにする」ドクターズプライムの公式ブログです

ドクターズプライムを支えるエンジニアリング ―技術・組織・課題と展望―

こんにちは id:michio0o です。ドクターズプライムのエンジニアとしてはオファーを承諾した記念すべき1人目となりましたが、有給休暇の期間が長く、正式入社のタイミングとしては id:oinume に続き2人目になりました。複雑な状態です。

この記事ではドクターズプライムにおける、技術そのものについての話、技術組織についての話、最後に今抱えている課題とその展望についての3つに分けて説明します。

技術スタックと選定方針

まずは技術そのものについてです。ドクターズプライムがどんな技術を使って開発を行っており、どういった点を重視して技術選定しているかについて簡単に説明します。

技術スタック

現在のドクターズプライムの技術スタックは以下のようになっています。

  • バックエンド: Go(version: 1.16)
  • フロントエンド: TypeScript, React
  • ミドルウェア・インフラ: GCP(AppEngine, Cloud Datastore, Cloud Storage, Cloud Functionsなど), Algolia(検索), Netlify, Firebase Authentication
  • 構成管理: Terraform
  • CI: GitHub Actions
  • モニタリング: Cloud Monitoring, Bugsnag
  • データ分析: BigQuery

以前の記事で紹介したように、一時期はシステムが部分的にAWS上で動作していたりと使用技術が散漫になっていました。しかしアーキテクチャの整理が進んで来た結果、大分スッキリしてきた印象を持っています。

blog.drsprime.com

技術選定の方針

ドクターズプライムのプロダクトは、利用者が医師と病院の採用担当者の2者に限定されています。そのためプロダクトの特性として、大量のトラフィックが来るようなものではありません。

医師採用という性質上、現時点ではシステム的に直接人命に関わっているわけではありませんが、救急車を断らない医師と病院を繋げるという点で間接的には関わっていると考えています。そのためシステム品質として、「可用性」は特に重要視している品質と言えます。

使用するミドルウェアやインフラでは、できるだけマネージドサービスを利用するようにしています。まだエンジニア組織としては小規模なため、運用負荷を軽減することが重要になってくるからです。

また使用技術の数をむやみに増やさず、開発を進める上での学習コストが小さいものになっているかどうかも重要なポイントです。後述しますが、ドクターズプライムではフロントエンド・バックエンドというようにエンジニアを技術領域毎に分けて考えることはしていません。各エンジニアが様々な領域を横断しながら開発を進められるよう、必要以上に学習・運用コストが膨れないようにしています。

エンジニアリング組織について

次はその技術を運用するエンジニアリング組織についてです。

開発チーム

現在の ドクターズプライム では、ミッション毎に複数の職種メンバーを1つのチームとして組成し活動するマトリクス組織を採用しています。マトリクス組織を運用する主な目的は、各チーム内で自律的に意思決定と実行を担うことで組織全体の実行スピードを早くさせること、そしてこれらの活動を通じてメンバーの成長を促進させることです。

チームは現在6つのチームに分かれており、それぞれ以下のような役割を持っています。

  • Refactoringチーム: リファクタリングを推進するチーム
  • Listingチーム: 顧客および掲載求人を増やすチーム
  • Mobileチーム: モバイルアプリを開発するチーム
  • Growthチーム: プロダクトのグロースを担当するチーム
  • Product Opsチーム: プロダクトオペレーションを最適化するチーム
  • Customer Successチーム: カスタマーサクセスを担うチーム

各チーム毎にそれぞれプロジェクトオーナー、BizDev(事業開発)、PdM、ソフトウェアエンジニアがアサインされています。これらのチームは会社の状況や事業優先度に応じて臨機応変に変化します。

また、職能ごとにDivisionというセグメントを設けています。例えばエンジニアであれば Software Engineering Division があり、エンジニア定例といった職能単位でのMTGも開催しています。このセグメントを設けることで、各チームで発生した全体へ影響のありそうなポイントなどを議論しています。現在、全てのチームで開発が必要な状況ではありませんが、技術的なサポートが必要なケースのために、開発が不要なチームにもエンジニアはアサインされています。

f:id:michio0o:20211001145858p:plain
ドクターズプライムで運営中のマトリクス組織

全員ソフトウェアエンジニア

ドクターズプライムでは「全員がソフトウェアエンジニア」ということを掲げており、バックエンド・フロントエンド、のように技術領域で職域を分けていません。これは特定の領域のみを担当し続けることなく、開発プロセス全体を担うということを意図しています。それぞれのエンジニアは当然専門領域を持っていますが、そこだけにこだわらず、領域を横断して活躍することが求められています。

この背景には、会社全体の早い意思決定スピードに耐えられる開発組織が必要とされていることが挙げられます。ドクターズプライムの組織規模はまだ小さく、全社で取り組むことの優先度など流動的な点も多いです。開発組織はそうした意思決定に対し、機動的に対処することが必要とされます。そのため今の規模では職種を固定することが難しいため、全員ソフトウェアエンジニアを掲げています。

ちなみに僕もドクターズプライムに入社して初めてReactを触りました。Webフロントエンドの開発も楽しいですね!

社外エンジニアとの関わり

ドクターズプライムには業務委託や技術顧問として関わって頂いているエンジニアが多数います。エンジニアとして関わって頂いている人の職種は、バックエンド、フロントエンド、SRE、コーポレートエンジニア、QA など様々です。

業務委託メンバーに関してはそれぞれの領域のエキスパートばかりなので、各自の専門領域を発揮出来るポイントに絞ってお手伝い頂いています。実は現在のドクターズプライムのフルタイムメンバーの専門領域は、全員バックエンドと非常に偏っています。その分、社外エンジニアの方々に関わっていただくことで、社内に足りない専門知識や経験を補っているという状態です。例えばフロントエンドアーキテクチャの刷新について、全体の方針決めや技術選定、刷新の進め方などの議論に参加していただいています。

f:id:michio0o:20211001143226j:plain
フロントエンド座談会と称して隔週でフロントエンドについての相談事項を議論している様子

今抱えているエンジニアリングの課題と展望

これまではドクターズプライムの現在について書いてきましたが、最後に今ある課題とその展望について3つピックアップして書きたいと思います。

1つ目は、プロダクト内に存在する各チーム間の共通ブロッカーです。 弊社のプロダクトには、メイン機能が満たすべき最低品質にも届いていないと考えている部分が多数存在します。チームの基本方針として、これらの点を解消することを最優先に考えており、それが完了するまでは追加機能開発の優先度を落としています。

このことは、先に述べたマトリクス組織において各チーム内で挙がった要望を後回しにすることに繋がります。これが各チームごとで行う独立した早いサイクルでのプロダクト改善を難しくします。このブロッカーについてはリソースを集中させ、優先的に解決させるよう動いており、年内に終わる想定で進んでいます。

2つ目は、フロントエンドに高い専門性を持ったフルタイムエンジニアが不在であることです。 今考えているプロダクトの展望ではフロントエンドへの開発要望が非常に増えていますが、今のチームにこれを素早く実現する能力があるかと言えば少し不安が残ります。 今のところ業務委託の方々のサポートでなんとかなっている部分もありますが、チームの開発力を底上げするためには、フロントエンドに専門性を持ったエンジニアの採用は必須と考えています。

3つ目は、品質向上へのリソース投資が後手にまわり気味なことです。 ドクターズプライムのプロダクト初期アーキテクチャは、​​Google Forms、 Google Spreadsheet、 Google Apps Script(GAS)といった所謂ノーコード技術で構成されていました。この選択はプロダクトが受け入れられるかを素早く検証するのに大変効果的でしたが、反面、スケーラビリティや信頼性に欠けています。

これらで構成されたアーキテクチャを刷新することが直近の注力ポイントであり、それはほぼ完了に近づいています。しかし、依然として自動テストやパフォーマンス改善、セキュリティのシフトレフトなどに対して、強く投資出来ているかといえばそうではありません。業務委託の方の手助けにより少しずつ進められてはいますが、開発体制の改善やエンジニアの採用を進めてることで、加速させていきたい点となっています。

おわりに

ドクターズプライムのエンジニア組織について、大雑把にですが全体像を説明してきました。ドクターズプライム自体は創業4年目ですが、フルタイムのエンジニアがJOINし、エンジニアリング組織が正式に立ち上がり始めたのは今年の4月からです。解決すべき課題は山積みですが、良いチームを作り上げるべく頑張っています。一緒に日本の医療課題の解消に向き合って頂ける方を探してます!

一緒に働く仲間を募集しています

ドクターズプライムでは「救急車のたらい回しをゼロにする」というビジョンの実現に向けて、病院向けのSaaSプロダクトおよび、医師/病院間の最適なマッチングを提供するマッチングプラットフォームを展開しており、一緒に働く仲間を募集しています。

まずはカジュアルにお話ししてみませんか?

speakerdeck.com