Our Technology Stack
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
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.
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
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.
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.
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 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.
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
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