Saturday, August 4, 2012

Tools We Use at RESAAS

If you're ever wondering what we use for tools at RESAAS, I've taken the time to write about the different tools we use for specific parts of our engineering initiatives. This includes automation, project management, and feature development across different operating systems and platforms.

Feature Development on Web

Visual Studio 2010 Professional - This can be downloaded through MSDN. Additionally, since our whole platform is built on Windows Azure, we use the Azure .NET SDK to integrate with many of Microsoft's cloud services, such as, Blob, Tables, Queues, Service Bus, SQL Azure, and Traffic Manager.

Sublime Text 2 - A free text editor that has interoperable plugins with Text Mate. It also works flawlessly across Windows and Mac OS X.

SASS (Compass) - A easy-to-use language on top of CSS which gives developers the ability to create reusable mixins, css variables, as well as, auto concatenation and minification.

Mojo - A JavaScript microframework that lets developers leverage dependency injection, aspect-oriented programming, and implementation silos. Additionally, since we have several different web services in our API, Mojo ships with a Service Locator to make it easy on integration. Furthermore, Mojo is built on top of jQuery so you can easily leverage 3rd party plugins.

Feature Development on Mobile

Xcode 4 - Apple's IDE for any iOS development.

Eclipse for Android Development - Necessary for any Android development.

Visual Studio 2010 - Necessary for any Windows Phone development.

Weinre - An easy way of debugging mobile-specific layout using WebKit inspector. An awesome project and drastically decreases the time an engineer spends on debugging.

Automation and Testing

Jenkins Continuous Integration Server - Since we've engineered a fully automated continuous deployment pipeline, we make Jenkins do all the heavy lifting. From pulling down latest in the tree, running our C# unit tests, running Selenium UI tests, as well as, deploying between different environments -- Jenkins is core to our principles in maintaining a test-driven engineering culture.

Selenium UI - End-To-End UI testing using the C# SDK for Selenium UI. These tests can take a while to run especially when you have several core use cases to write tests against.

CasperJS - We're always about productivity and ensuring that the quality of the software being delivered to our customers are shipped with the least amount of bugs as possible -- this is why we've heavily invested in going headless for end-to-end testing. CasperJS is an extremely fast tool for writing JavaScript-based specifications (describing behaviours) and have that pipe through MSTest.

.NET HTTP Client  - Our API endpoints are the backbone of our platform. Adding to that, we've invested heavily in server layer tests that use the .NET HTTP Client library. We specifically output JSON so we end up having to test passing parameters through HTTP POST/GET requests and assert the results.

Chutzpah - A Visual Studio extension that lets you write JavaScript unit tests in either QUnit or Jasmine BDD. This is by far one of the best testing tools for any front-end developer on a .NET stack. Under the hood, it runs all your tests through PhantomJS and streams the results to console. I've heard some great things about ReSharper, so you can probably check that out too.

Project Management and Source Control

Atlassian OnDemand (JIRA + Confluence + Tempo + FishEye + Crucible) - Atlassian provides an amazing suite of software development tools. We're particularly fond of the Task Board (swim lanes) in JIRA.

Subversion - We're currently on our way transitioning into using Git. Stay tuned!

GitHub (hackathons, open source, contracting out work) - GitHub is an extremely popular developer social network that provides a platform to easily collaborate on projects using Git.