Each year Centric Consulting (the awesome company I work for) hosts a one day developer’s conference called Camp I/O. This is truly a great event. The 2011 incarnation took the form of a contest in which teams were formed and a project was undertaken. There were lots of fabulous prizes and more importantly the ‘geeks’ of Centric were able to spend a day together. We live all over the midwest and on the east coast so this is rare. In all sincerity, Centric has a great community and a great group of technologists.
I was happy to put together a team from Columbus. We decided to build an application that would assist us in the recruiting process, while highlighting our capabilities in web, mobile and testing development. We chose a tech stack that was unfamiliar to most everyone on the team so, on top of building an application for a contest, we were doing things that we did not necessarily do every day.
First, we chose to adhere to an agile approach. Our time was going to be limited so if we were going to do something that provided value in the limited amount of time, we thought this was the best approach.
Second, we knew that we were going to heavily utilize various cloud services so we needed to chose a tech stack that was deployable in the cloud. This worked well as we also had limited (read no) budget on which to support this application. Given that we also wanted to learn something new we chose Ruby on Rails as the core of our application. It deploys easily to Heroku (our Platform as a Service provider) and is open source. We also wrote a mobile application and service component is .NET.
Third, as we were not often to co-locate, we needed to choose tools to support our work patterns and disparate development workstations (Windows, OSX and Linux).
Given these constraints and goals below is a description of our tech stack and the role each component played.
- .NET (C#) - We wrote service client that consume our API for easy use in integrated .NET applications.
- Objective C - Our application included a iOS application.
- Ruby on Rails - Is an open-source web development framework that takes web development to a new level by extending the popular Ruby programming language. It favors 'convention over configuration' so the developer already knows how the project can be organized.
- RSpec was our unit and integration testing framework. It is widely used in Ruby on Rails projects and there is quite a developer community to leverage for patterns.
- Our project team was very committed to both unit and functional testing. We chose Cucumber as a Behavior Driven Development framework. This toolset made it possible to create executable specifications in a language consumable by the product owner and technical team members.
- We chose a schema-less database Mongo DB. Relational databases are not always called for. They require some level of design and mapping between an object model. MongoDB allows us to easily simply persist our objects with the correct level of control to tweak the persistence as needed.
- Model View Controller UI Pattern is the most common UI design pattern in use today. Both our web and mobile ui is built using this pattern.
- Representational State Transfer (REST), simply is a way for dissimilar systems to communicate over HTTP using common HTTP verbs and text based encoding. In our application, we built a RESTful API that our user interfaces (web and mobile) consumed.
- Active Record Pattern is an architectural pattern for accessing and querying data abstracted in collections of objects. Active Record is the data access pattern built into Ruby on Rails.
- Heroku was our Platform as a Service (PaaS) provider. It hosts our completed and deployed application. Heroku is particularly useful service and provides easy integration between many other services.
- Amazon S3 was used by us to store resumes. This service provides a redundant and secure 'disk in the cloud'.
- SendGrid is a great service that manages outbound email from applications. They provide opt-out functionality and deliverability statistics. Integration this service into out application was trivially easy.
- MongoHQ is a Mongo DB cloud hosting service.