Technology

Technology Stack

Human Being

Client

Internet

 Amazon Web Services

Language Choice

We start with Node.js (javascript) running on Linux. Node is relatively new but recognized as revolutionary, well tried and is in use at many large corporations (listed here). Just some of the benefits of Node include development speed, performance, resource utilization as discussed in this article. One of the benefits of using Node is that we no longer have a traditional web server such as IIS or Apache so we have less stuff to configure and upgrade.

Application Development Platform

Meteor is a web development platform that is built on top of Node.js. Matt Debergalis does a great technical video presentation that outlines why Meteor was created and the resulting benefits. The end result is that our developers only need to know one language (javascript) and that code can be shared between the client and server. The Meteor platform looks after a great deal which means we can focus our efforts more closely on the code that directly impacts functionality and the user experience. One important aspect of Meteor is “reactivity”; when data is changed by one user any other users that are looking at that data will see it update automatically. Another benefit to Meteor is that it is built for the technology architecture that we actually have today. Even smartphones have sufficient power and memory to run the majority of the application on the client. When you use one of our applications all the code gets loaded into your browser on the first page visit. From that point on, the only thing that crosses the network is data. We tell Meteor what data you’re interested in, and Meteor makes sure that when that data changes you see it happen, all in real time, no page refresh required. This results in a user experience that is fast, smooth and does a good job of weathering intermittent network connectivity.

Database

Our database choice is MongoDB. Meteor is also designed around MongoDB; it uses a stripped down version of MongoDB (minimongo) that runs on the client and Meteor makes sure the two stay in sync. MongoDB stores collections of Javascript Object Notation (JSON) documents. This means that the objects we need to work with in our javascript code are stored in a way that they can be used immediately in the code, without the overhead of a traditional ORM. It also makes data easier to troubleshoot and eliminates many traditional database administrator activities. We take advantage of MongoDB’s backup service which simplifies the process of having secure, off-site backups with excellent disaster recovery options.

Search

Elasticsearch is a technology that can index enormous quantities of data and permits us to do massive searches that respond very quickly. It also supports “fuzzy” searches so that common misspellings, plurals and other aspects of language to not get in the way of finding what you are looking for. Where appropriate this technology is incorporated into our applications.

Server Infrastructure

Most of our servers run in Amazon Web Services (AWS) – Elastic Cloud Compute (EC2) web service. AWS permits us to only pay for what we use and only pay when we use it. We also use Amazon’s Simple Storage Service (S3) for any file storage. Again, we only pay for what we use and the durability of the data is world class. There is no upfront capital investment required for hardware and we can scale up to larger servers any time we need to. This lean cost structure is reflected in our pricing.

Continuous Integration

Continuous integration is the process of merging application changes on a frequent basis. This allows us to avoid problems associated with integrating large numbers of changes all at once. It also allows us to run our test suites at this frequency and let the developers know immediately if bugs have been introduced. If the tests pass, we can be comfortable that we have a stable release candidate for our next application update. All this allows us to update our applications frequently with bug fixes and new features. Meteor helps us out here as well; when we release a code update, Meteor knows which clients are running on an outdated version. It then automatically updates the application and all the user sees is a page refresh. If the user is in the middle of something, we prompt them to let them know that an update is available, and they should refresh as soon as possible.

Other Stuff

We use Git repositories for source code management. Git is massively popular for good reason; it works very well and allows us to keep multiple developers organized and collaborating effectively. We have an automated testing process that uses Selenium/Webdriver and a customized version of webdriverjs. This allows us to write our tests using, you guessed it, javascript (Node). Browserstack allows us to run our tests against a variety of operating systems and browser versions to ensure our applications are compatible with the vast majority of what people are using. JIRA is what we use to plan and execute our work and bug fixes. Our preferred IDE (code editor) is WebStorm.