Dev Ops

Continuous Integration

Continuous integration is naturally facilitated by our DevOps approach. Every time code is checked into the Git source code repository, it is automatically checked out and built by a tool like TravisCI or Jenkins, and the team is notified of any errors. TravisCI/Jenkins proceed to run a full suite of automated tests, reporting any issues to the team. CodeClimate (an open source static analysis tool) automatically performs static code analysis, identifying potential issues and ensuring test coverage. 

Continuous Delivery

We build systems to support the automatic deployment of software, which can be performed in a continuous manner by a tool like TravisCI, on demand through Ansible, or via command-line by the DevOps engineer. This is enabled by cloud services to quickly stand up and tear down infrastructure, Vagrant for quickly creating and destroying environments, virtual environments based on Docker, and automated configuration with Chef. 

Continuous Operations

Our team operates all production systems to be highly resilient, supporting continuous replication and failover. We leverage modern monitoring tools like Sensu and Flapjack to track all aspects of the system, roll up failures into useful messages, and provide immediate notifications, as well as New Relic APM to provide real-time metrics of production systems.

Continuous Operations

Our team operates all production systems to be highly resilient, supporting continuous replication and failover. We leverage modern monitoring tools like Sensu and Flapjack to track all aspects of the system, roll up failures into useful messages, and provide immediate notifications, as well as New Relic APM to provide real-time metrics of production systems.

Automated Monitoring

By leveraging a range of automated monitoring tools—including Nagios, Sensu, and Cloud watch—we are able to check systems are up, disk and CPU usage is within normal limits, all programs are patched for security vulnerabilities, etc. We leverage both central monitoring services, as well as distributed monitoring services depending on the need for scalability and failure resistance. This approach is extremely lightweight, add minimum configuration and maintenance burden, and requires little effort to apply to every system we implement.