We use Microsoft Azure because many of our clients are already Azure for their private cloud. Additionally, Azure supports App Service Environments (ASE), which isolates the application resources and gives us a static IP for securely accessing external resources
Additionally, MSSQL supports columnstore tables which is critical for running fast analytics over large datasets
We maintain a fork of Celery 3 that adds HTTPS support for Redis brokers. The Winning Model currently uses Celery 3 because Celery 4 dropped support for Windows.
We plan on migrating to Celery 4 once Azure ASE supports Linux apps
Highcharts provided the best tradeoff between customization and pre-built chart coverage
We use Redis as an application cache and as a broker/result store for Celery. It's widely available and does the job
We use IntelliJ IDEA because it has great support for both Python and JS. In particular, its type-based code analyses, refactoring tools, and debugger are world class
The application front-end is written in JavaScript (ES6). We originally selected it over TypeScript because many library typings at the time were still flaky and the transpilation time was slow.
We are now re-considering TypeScript because 1) the tooling has improved significantly, and 2) and the root cause of the majority of our front-end bugs are related to typing (despite having PropTypes).
We use D3 for creating custom charts that aren't available in off-the-shelf libraries
We use React for building front-end components that are composable, predictable, and performant. Because our application state is in Redux, nearly all of our components are pure/functional.
We chose React because of its ecosystem and that it makes all behavior explicit
Django takes the hassle out of building an enterprise web application using Python.
We use Python 3 so we can share code between our backend and data science models. IntelliJ can use type inference and type hints to provide static feedback
Though Redux makes encoding some interactions unnatural, the ease of debugging makes it worthwhile. Additionally, Redux makes it easy to implement saving/bookmarking/sharing just by serializing state
Redux's middleware is great for separating concerns, e.g., requests, errors, telemetry, etc.
Our reducers use immutability-helper to update state
We use Zendesk for customer support and hosting documentation. Additionally, we provide documentation search from within our application using Zendesk's API
We use Heroku because it eliminates the hassle of managing our user acceptance testing and sales demo environments
We use Bitbucket and Bitbucket Pipelines because of its tight integration with JIRA and code authorization features.
The primary drawback is that its extension ecosystem (e.g., PR review tools) is miles behind Github
We use Confluence for specifications and knowledge sharing. We chose Confluence over other wikis primarily because of its integration with JIRA
We use Webpack for its bundling, code splitting, dev server, and hot module replacement capabilities
We use JIRA because it's a single tool that can be customized to each of our business processes: product development, customer on-boarding, and internal operations