Our current standard back-end development framework is Ruby on Rails, but we have production experience in Java, PHP, Python, C, Perl, Visual Basic, C#, and more. As an open source product that supports rapid development, Rails serves our clients well. In having this primary language, we have become highly proficient, and are able to develop performance areas that are applied on projects across the board.
We primarily use PostgreSQL because it is open source, powerful, and AWS RDS supports high availability, redundant hosting. We can also use Microsoft SQL Server, when clients require it for integration or policy requirements.
We use SASS for styling, and are opportunistic with front-end frameworks. We regularly use AngularJS, jQuery, Bootstrap, and Highcharts.
Apache Spark and Mahout are our main analytics components, and we use Elasticsearch and Solr for searching.
We provide managed, high-availability hosting through AWS. Amazon accounts are owned by our clients, and we're granted admin access for management. We also provide deployment support for clients who wish to host applications in-house, or use other hosting services (like Heroku or Rackspace).In cases where we provide "work-for-hire," we ensure all code is available on Github. We also believe software is successful if it gets used and grows, regardless of who ultimately maintains it, so we provide documentation and transition assistance for when it makes sense to move a project in-house or elsewhere.
Great software is elegant, but not fragile. On all but the smallest change, we perform an internal code review with a second developer, then run through a separate QA review for user interface and functionality performance. The release is then pushed onto a staging server, where client team members review and test it. Only then, when bugs or quirks have been identified and remedied, is code released into production.
Internally, we perform test driven development (TDD), which we approach intentionally and thoughtfully. Maintaining a suite of automated tests is tremendously helpful in managing functional code, and all of our larger projects have extensive testing routines. We're also mindful of the development time necessary to write and maintain tests, so we apply them facultatively. Rather than mandate every function written have a corresponding test created, we scale TDD investment to the size, risk, system interdependency, and longevity of a feature.