Web Application Stack
Ruby
Rails
JavaScript
Elasticsearch
GraphQL
Kafka
Go
Doximity's web applications are built primarily using Ruby, Rails, JavaScript, and Go. The core application is supported by a handful of Rails-powered microservices that allow teams owning the corresponding product areas to move quickly and autonomously. We leverage GraphQL, Kafka, and Elasticsearch extensively.
Front-end Stack
Vue.js
Apollo
Nuxt.js
Mocha
Cypress
Webpack
We build client applications using modern javascript with Vue.js and Nuxt.js. We use Apollo Client to help take full advantage of our GraphQL. Our goal is to build performant clients with an eye for progressive enhancement.
iOS Stack
Swift
Combine
Apollo
SPM
fastlane
Quick/Nimble
Our flagship iPhone/iPad app is written in 100% heavily-functional Swift. We have adopted MVVM and dependency injection to distribute responsibilities and make our code easily tested with the Quick and Nimble frameworks. ReSwift is used for storing and communicating changes to global state.
We use both UIKit and SwiftUI where appropriate to create a great user experience. The app leverages Apple's Combine framework for data binding and asynchronous communication throughout the app. For networking we use a combination of REST and GraphQL APIs.
Our dependencies are managed by Swift Package Manager, our build process is simplified with fastlane, and everything is brought together using CircleCI.
Android Stack
Kotlin
Retrofit
Espresso
Mockk
Apollo
FCM
Jetpack
Koin
Coroutines
Databinding
Jetpack Compose
The Doximity app is written in 100% Kotlin. We follow the Clean Architecture approach, adhering to SOLID principles. We make ample use of Jetpack libraries throughout the app. While we traditionally used databinding on the view layer, we are currently migrating our entire UI to Jetpack Compose. On the networking layer, we use Kotlin Coroutines to interface with Doximity’s GraphQL API. We strive to provide ample unit test coverage using JUnit and Mockk. In addition, we use Firebase Test Lab to run our Espresso and Compose instrumentation tests.
Data Stack
Python
Spark
Snowflake
EMR
Docker
Airflow
Jupyter
Looker
Doximity relies on Python's powerful data libraries such as pandas, scikit-learn, gensim, and nltk. We also leverage Apache Spark (PySpark), Jupyter, GraphX, and Spark ML. Our centralized warehouse is powered by Snowflake, and our models and transforms run within Docker containers scheduled through Airflow.
Data Stores
Aurora
Redis
Memcached
Neo4J
Snowflake
Elasticsearch
S3
MySQL, more specifically Aurora, runs the show. We rely on Redis and Memcached to provide support for caches and background job processing. Elasticsearch powers things like full text search, search suggestions, some functions of our network graph, and our recommendation engine. It even sometimes acts as cache store. We utilize Neo4j to perform complex network graphing operations.
Server Stack
Ubuntu
AWS
Terraform
Kubernetes
Chef
Docker
OpenTracing
Grafana & Prometheus
The bulk of our applications and services are being run on AWS EKS and are managed via Helm, ArgoCD, and internal tooling. Ubuntu is our operating system of choice for all longer running standalone servers and track LTS versions. We leverage Ansible, Chef, Terraform, and AWS Image Builder for automation and provisioning AWS servers and other infrastructure. We are currently in the process of introducing Kubernetes to mirror local development built on Docker. We use a variety of tools to monitor our systems such as Prometheus, Graphite, Grafana, and many others. Lita Bot deploys, migrates, and restarts our applications. We leverage HackerOne for our security bounty program.
Security Stack
HackerOne
Signal Sciences
AWS WAF
AWS Shield Advanced
AWS Cloudwatch
Lacework
Cloud Posture Management
Intrusion Detection
Zscaler (ZIA + ZPA)
GitHub Dependabot
Okta ASA
Terraform Modules
WAF-as-a-Service
Sumologic
Sonar(Qube/Cloud)
Chef Libraries
Clinician and patient privacy and security is a top priority. Our library of infrastructure-as-code and application support modules enables us to launch new application services efficiently. These modules help with best practices and secure defaults. Our active HackerOne bug bounty program lets us continuously battle-harden our security. Utilizing tools such as Rubocop, Brakeman and SonarQube prevents issues before they make it to production. Web application firewalls, DDoS protection services and custom tooling provide robust preventative protection. We create observability and monitor application and infrastructure security events.
Automation Stack
CircleCI
GitHub Actions
Capybara
RSpec
Karma & Jest
XCUI, Quick & Nimble
Espresso & jUnit
Pytest
Docker
We leverage CircleCI to execute our comprehensive suite of automated tests, providing feedback on every single commit. Each build is parallelized across multiple containers that auto-scale to provide the development team with quality feedback, fast. This, along with other automated tasks, adds up to a pipeline designed to simplify and speed up our developers’ daily workflows.
Platform Stack
Ansible
Kubernetes
Helm
Docker
Ambassador
Istio
Go
Our platform leverages Ansible and Terraform to create, update, and maintain a Kubernetes deployment (using Amazon EKS). This allows us to provide a container-based deployment model for infrastructure and product teams. We use Go(lang) to build tools that simplify the setup of development environments, application deployments, and development workflow tools.
Design Stack
Figma
Adobe Creative Suite
Sketch
Zeplin
InVision
Asana
Framer
Flinto
Principal
Proto.io
Dropbox
We leverage Adobe Creative Suite for a myriad of tasks. Figma is where ideas and collaboration start. Our internal design system keeps us consistent. InVision hosts our product style guides. Dropbox is our go-to for asset sharing.