Todd Schiller
twschiller
CEO | PixieBrix
Recent Tech Decisions
77 points

Companies
Following

  • Microsoft Azure

    #<User:0x00007acdbb3171e0> Winning Model


    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

  • Celery

    #<User:0x00007acdbb3158e0> Winning Model


    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

    #<User:0x00007acdbb3126e0> Winning Model


    Highcharts provided the best tradeoff between customization and pre-built chart coverage

  • Redis

    #<User:0x00007acdbb310160> Winning Model


    We use Redis as an application cache and as a broker/result store for Celery. It's widely available and does the job

  • IntelliJ IDEA

    #<User:0x00007acdbb32e390> Winning Model


    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

  • JavaScript

    #<User:0x00007acdbb32c950> Winning Model


    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).

  • D3.js

    #<User:0x00007acdbb32b190> Winning Model


    We use D3 for creating custom charts that aren't available in off-the-shelf libraries

  • React

    #<User:0x00007acdbb329c50> Winning Model


    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

    #<User:0x00007acdbb328990> Winning Model


    Django takes the hassle out of building an enterprise web application using Python.

    • admin app for administration
    • ORM for deploying against different database vendors
    • social auth package for authentication with enterprise IdP
    • guardian package for authorization

  • Python

    #<User:0x00007acdbb326e10> Winning Model


    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

  • Redux

    #<User:0x00007acdbb324b10> Winning Model


    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

  • Zendesk

    #<User:0x00007acdbb323710> Winning Model


    We use Zendesk for customer support and hosting documentation. Additionally, we provide documentation search from within our application using Zendesk's API

  • Heroku

    #<User:0x00007acdbb3212d0> Winning Model


    We use Heroku because it eliminates the hassle of managing our user acceptance testing and sales demo environments

  • Bitbucket

    #<User:0x00007acdbb33f640> Winning Model


    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

  • Confluence

    #<User:0x00007acdbb33d0c0> Winning Model


    We use Confluence for specifications and knowledge sharing. We chose Confluence over other wikis primarily because of its integration with JIRA

  • Webpack

    #<User:0x00007acdbb33b2c0> Winning Model


    We use Webpack for its bundling, code splitting, dev server, and hot module replacement capabilities

  • Jira

    #<User:0x00007acdbb334880> Winning Model


    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