Technology

Our Architecture Is a

  • reactive
    responsive, resilient, elastic, scalable by design. Communication happens asynchronous, no HTTP between services. Check reactivemanifesto.org!
  • message-driven
    event-carried state transfer & some event-sourcing
  • fully decoupled
    We truly believe in doing things distributed. Microservices share no databases and survive each other’s failure
  • microservice
    All services have a well-defined purpose derived from our business requirements
  • architecture
    we live polyglott persistence and heavily invest into researching and developing patterns and best practices
  • running on node.js
    we are rapidly moving from OOP to FRP (functional reactive programming). JavaScript allows us to do that
  • written in TypeScript
    having static typing greatly increases development speed and fun. We don’t use TypeScript to create a JS-OOP zombie but to make development more fun and patterns easier to use
  • properly tested
    We strongly believing in writing tests. Most (and all new) components have a coverage from 60%-90%
  • continuously monitored
    We use Prometheus and Grafana to keep track of what our services do. We also use Grafana for company KPIs, BI and marketing metrics
  • and continuously deployed
    We use containers to develop locally using the same images that run on production. We deploy with Wercker and do so about 7 times per day
  • into a kubernetes cluster
    DNS, load balancing and redundancy are automatically done by our deployment system. We happily run many hundreds of kubernetes pods.

Our Web App

  • like all components consists of microservices
    We group microservices into components to make the overall architecture easier to understand
  • only targets nextgen browsers
    We decided to develop for the future and optimize parts that will become obsolete before we get really big. We therefore completely ignore IE11
  • uses state-of-the-art features
    like flexbox, sendBeacon and others
  • is written in TypeScript
    To easily use static typing and the most recent JS features (async/await, destructuring, …)
  • and styled properly
    We use a style guide, BEM, postCSS and some sass
  • but still mainly uses laravel and angular1.5
    We are currently migrating towards react/redux and will hopefully be done by the end of 2017

What Else?

  • We like functional reactive programming, best practices, design patterns, schema validation, idempotency, eventual consistency and above all simplicity.
  • We spend time discussing and implementing the right solutions that allow us to stay scalable and reactive towards growth and changing requirements.
  • We design our architecture using Lego and a whiteboard. 🎃

 Our Stack in a Nutshell

const getStack = async () => ({
  architecture: 'reactive microservices',
  hosting: ['gcloud', 'aws'],
  monitoring: ['grafana', 'prometheus'],
  deployment: ['wercker', 'kubernetes',
               'terraform'],
  persistence: ['redis', 'riak KV', 'mongo',
                'neo4j', 'elasticsearch',
                'MySQL', 'BigQuery', 'influxdb'],
  languages: ['TypeScript', 'ESnext'],
  runtimes: ['node.js', 'electron',
             'nextgen browsers only'],
  brokers: ['rabbitmq'],
  client: ['react', 'redux',
           'redux-saga', 'BEM'],
  build: ['webpack', 'postCSS', 'tslint'],
  tests: ['mocha', 'chai', 'istanbul', 'ava'],
  tools: ['@style/kbomb', '@style/peacekeeper'],
  office: ['Slack', 'G Suite'],
  team: {
    backendDevs: 5,
    microservices: 52,
    hiring: true
  },
  legacy: new Date() >= new Date('2018')
          ? []
          : ['PHP', 'laravel', 'Phalcon',
             'Postgres', 'Ansible',
             'StackDriver', 'angular1.5',
             'sass/compass', 'influxdb']
});

Moar. MOAR!

Find us at StackShare and Stack Overflow or check out @style at npm and StyleLounge at GitHub!