Doximity 致力于帮助医生节省时间,专注于最重要的事情:他们的患者。 在过去的 15 年里,他们构建了通信、工作流程和远程医疗工具,如今已获得超过 200 万医疗专业人士的信赖,其中包括 80% 的美国医生。这些工具为医生和患者的生活带来了真正的改变。
但与许多初创公司一样,Doximity 最初也只是一个小团队,面临着一个巨大的挑战:如何快速构建产品,从而在市场中站稳脚跟。
“我们着手在美国建立最大的医疗专业人士社交网络。当时,我们不确定哪些功能最受医生欢迎——我们只知道必须快速开发并倾听他们的需求。” — Bruno Miranda,
工程部高级副总裁
他们选择基于 Rails 进行开发,因为其速度、灵活性和对开发者友好的特性对 Doximity 的小团队来说非常有用。富有表现力的语法让他们能够快速编写出清晰、易于维护的代码,而 Rails 内置的约定和丰富的生态系统则帮助他们快速推出功能、收集反馈并进行迭代。
在 Doximity 的早期,Rails 注重生产力,使他们的开发人员能够快速高效地工作。Rails 使 Doximity 团队能够快速构建新功能的原型、测试想法并响应用户反馈。即使团队很小,Rails 内置的测试工具也使其更容易确保代码质量,而无需专门的 QA 团队。
Doximity 团队还遵循 Rails 的“约定优于配置”原则,而 Rails 熟悉的模型-视图-控制器 (MVC) 结构使得新工程师的入职尽可能顺畅。当有超过 150 名开发人员分布在各个团队,每天将代码推送到生产环境 80 多次时,这种一致性确保了系统易于理解和扩展。开发人员可以快速上手,做出贡献,并不断前进。
快速试验和迭代的能力得到了回报。最初于 2010 年推出的 Rails 原型应用,如今已发展成为美国医疗专业人士领先的数字平台。
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 成功的因素之一是 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 奖,表彰其在远程医疗通信方面的卓越表现。
十五年后,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 确保长期稳定性: 通过维护和发展其已有 15 年的单体应用,Doximity 避免了重写。
Rails 伴随成功而扩展: 随着 Doximity 的发展,Rails 帮助优化了 45 多个应用程序的性能,并轻松处理不断增长的流量。