快速、灵活、可扩展:Rails 如何赋能 Doximity 的医疗平台。

Doximity 致力于帮助医生节省时间,专注于最重要的事情:他们的患者。 在过去的 15 年里,他们构建了通信、工作流程和远程医疗工具,如今已获得超过 200 万医疗专业人士的信赖,其中包括 80% 的美国医生。这些工具为医生和患者的生活带来了真正的改变。

但与许多初创公司一样,Doximity 最初也只是一个小团队,面临着一个巨大的挑战:如何快速构建产品,从而在市场中站稳脚跟。

Bruno Miranda, Doximity
“我们着手在美国建立最大的医疗专业人士社交网络。当时,我们不确定哪些功能最受医生欢迎——我们只知道必须快速开发并倾听他们的需求。” Bruno Miranda,
工程部高级副总裁

他们选择基于 Rails 进行开发,因为其速度、灵活性和对开发者友好的特性对 Doximity 的小团队来说非常有用。富有表现力的语法让他们能够快速编写出清晰、易于维护的代码,而 Rails 内置的约定和丰富的生态系统则帮助他们快速推出功能、收集反馈并进行迭代。

快速原型开发

在 Doximity 的早期,Rails 注重生产力,使他们的开发人员能够快速高效地工作。Rails 使 Doximity 团队能够快速构建新功能的原型、测试想法并响应用户反馈。即使团队很小,Rails 内置的测试工具也使其更容易确保代码质量,而无需专门的 QA 团队。

Doximity 团队还遵循 Rails 的“约定优于配置”原则,而 Rails 熟悉的模型-视图-控制器 (MVC) 结构使得新工程师的入职尽可能顺畅。当有超过 150 名开发人员分布在各个团队,每天将代码推送到生产环境 80 多次时,这种一致性确保了系统易于理解和扩展。开发人员可以快速上手,做出贡献,并不断前进。

快速试验和迭代的能力得到了回报。最初于 2010 年推出的 Rails 原型应用,如今已发展成为美国医疗专业人士领先的数字平台。

A man looking at the Doximity app on a cell phone

高压下的快速扩展

2020 年初,疫情爆发,医生和医疗专业人士被迫转向远程医疗解决方案。

Doximity 最出色的面向患者的工具之一是 Doximity Dialer,它允许医生使用自己的设备致电或发短信给患者,而无需暴露个人电话号码。患者会收到医生发送的短信链接,点击后即可即时连接——无需安装原生应用程序。

"2020 年 4 月至 2021 年 3 月期间,Doximity 支持了超过 **6300 万**次远程医疗访问。"

Dialer 的使用量激增,但一夜之间,医生们还需要一个额外的安全远程医疗视频应用程序,以便医生和患者能够进行虚拟会诊,同时 Dialer 还要处理数百万医生的通话。

在紧迫的最后期限内,将应用程序扩展到处理突然涌入的流量是一项艰巨的任务,但 Doximity 的工程团队在**短短几周内**就面临着扩展 Dialer 和添加此新功能的紧急任务。

Doximity 将专注于 Dialer 的团队从 3 名工程师扩展到 16 名,他们并行工作,扩展其远程医疗产品,同时保持出色的用户体验。由于对 MVC 的熟悉以及 Doximity 对 Rails“约定优于配置”原则的坚持,每个人都能迅速投入工作,轻松找到熟悉的架构,这对于他们所面临的快速扩展至关重要。

"在高峰时段,**每次 10 分钟的停机**可能意味着一位医生**整个月都无法为患者提供护理**。" Jordan Hiltunen, 首席软件工程师

Rails 的 Active Job 等工具帮助处理后台任务,即使在高峰流量和重载下也能保持系统流畅运行,而 Rails 内置的缓存工具和模块化架构则帮助 Doximity 优化性能,集成新功能,而无需从头开始或破坏现有服务。这种方法使团队能够专注于解决医生的实际问题,而不是陷入基础设施的泥潭。

几周之内,他们就推出了符合 HIPAA 标准的远程医疗视频解决方案,帮助医生在关键时期进行远程医疗。

在疫情期间,Doximity 继续迭代和试验新功能,即使在数据库增长到数亿行的情况下,也没有采用复杂的新模式。Large Hadron Migrator (LHM) 和 Departure 等工具实现了海量表的零停机迁移,而后台作业则高效地处理数据。

Doximity engineers and designers working with stickies on wall

利用 Rails 工具箱

Doximity 成功的因素之一是 Ruby 在开发者社区中的广泛应用。大多数第三方供应商都提供 Ruby 的 SDK,使得集成变得简单快捷。Doximity 团队无需花费时间编写与供应商 API 的低级 HTTP 请求,而是可以专注于为用户构建有意义的功能。

得益于 Ruby 的动态特性和 Rails 控制台等工具,调试也变得更加顺畅。在暂存环境甚至生产环境中测试代码的能力,使得对第三方集成的故障排除变得更加易于管理——当供应商文档不足时,这是一个显著的优势。

随着 Doximity 系统的发展,Rails 的多态性特性帮助团队在无需大规模重写的情况下调整其数据模型。例如,Doximity Dialer 最初仅支持传统的 PSTN 呼叫。为了提高弹性,团队通过创建独立的模型 (PSTNCall 和 VOIPCall) 来支持 VoIP 呼叫,这些模型根据网络状况和中断情况动态路由流量。这种增量演进,得益于 Rails 强大的 ORM ActiveRecord,避免了中断,同时支持了日益增长的复杂性。

这些 Rails 工具和功能的结合,使 Doximity 能够快速扩展,同时保持敏捷和灵活。从一个简单的视频客户端原型到一个领先的远程医疗提供商,Rails 在任务关键型应用程序中证明了其可靠性,并支持 Doximity 成功应对了前所未有的全球健康危机。此后,Dialer 已连续三年荣获 KLAS 奖,表彰其在远程医疗通信方面的卓越表现。

Three healthcare workers walking down the hallway looking at a tablet device while talking

坚持有效的方法

十五年后,Doximity 最初的 Rails 应用依然强劲。从 Rails 2.3.5 更新后,他们单体应用现在运行在 Rails 7 上。经过数百名贡献者 30,000 多次提交,它仍然为 Doximity.com 提供支持,服务于 80% 以上的医生、90% 的应届医学生以及 60% 的执业护士和医师助理。此外,截至 2024 年 3 月 31 日,排名前 20 的医院中有 17 家使用了 Doximity 的企业 IT 平台。

长期坚持使用 Rails 的决定使团队避免了昂贵的重写,并将精力集中在快速交付新功能上。

“Doximity 没有追逐最新的热门工具,而是专注于交付新功能并适应医生的需求。Rails 提供了一个坚实的基础和稳定性,使我们能够做到这一点,而不会陷入不必要的动荡。” Bruno Miranda,
工程部高级副总裁

Rails 继续让 Doximity 的开发人员能够进行实验、快速构建并维护高质量的代码。他们的工程师不仅在使用 Rails,还在回馈社区。Doximity 已开源了 20 多个工具,例如用于管理用户工作流的 gem Funneler,以及用于通过用户友好界面运行 rake 任务的 Rails 引擎 Rake UI

Rails 在生产力、灵活性和可扩展性方面的结合,帮助 Doximity 成长为美国医疗专业人士最大的数字平台。对于开发人员来说,他们的经历也突显了一个简单的真理:有了正确的基础,您就可以快速扩展,快速迭代,并取得有意义的成果——所有这些都无需不必要的复杂性。

a close up view of the Doximity app showing a lock and talking about secure HIPPA video calls

关键要点

Rails 加速开发: Doximity 团队能够快速迭代新产品和功能,帮助医生节省时间并专注于患者护理。

Rails 确保长期稳定性: 通过维护和发展其已有 15 年的单体应用,Doximity 避免了重写。

Rails 伴随成功而扩展: 随着 Doximity 的发展,Rails 帮助优化了 45 多个应用程序的性能,并轻松处理不断增长的流量。

亲自尝试 Rails,看看您如何将您的想法从初创公司发展到 IPO。

立即开始

本案例研究是与 Doximity 工程领导层成员合作撰写的。