Marketing Campaign Management Tool using Ruby on Rails
Kapow! Media is an upcoming marketing services company with a clear emphasis on maximizing client response. It uses advanced analytics to tailor marketing campaigns per customer basis. It leverages both the active and passive communication by tracking users’ reaction to content and frequency. This means that both Kapow! and partners will get the highest return on their data. It provides the best end-user experience ensuring that advertisements do not alienate good customers.
Project involved implementation of an online marketing tool. This project targeted customers who had opted for what advertisements they want, in their emails. This involved complex algorithms, that judged authenticity of an advertisement, and separating SPAM. Most of the e-mail advertisements today are mostly SPAM, so genuine ads were segregated from the clutter. Project involved 2 sub-projects: The Effort and the Campaign Manager.
- Most of the email advertisements involve SPAMs. The challenge was to segregate relevant and genuine advertisements from the others.
- Most of the advertisements are rejected by e-mail filters. The major challenge remained designing algorithms that could match (actually fool) the e-mail filters to accept genuine advertisements.
The BluEnt Approach & Methodology
BluEnt followed Behavior Driven Development approach (BDD). BDD focuses on obtaining a clear understanding of desired software behavior through discussion with stakeholders. BDD also helps communication between development team and testing team, by simplifying the language used to describe scenarios in which the software will be used. Rspec was used to write executable examples of the expected behavior of a small bit of code in a controlled context.
Linux was used as development platform, which resulted in faster development, and testing. Choice of Ruby-on-Rails as development framework meant Agile Software Development model was followed, culminating in faster release cycles and better interaction within the team.
The tool involved 2 sub-projects:
1. Version 1: Effort
2. Version 2: Campaign Manager
This version involved generation of JSON response for advertisement data, and parsing the same. This generation / parsing of JSON response was restricted, based on privilege of the logged-in user. ExtJS library was used, resulting in a better UI experience. Also, latest version of Ruby (1.9.2) and Rails (3.0.5) were used. PostgreSQL and Redis were used this time, MySQL support was dropped. Latest Rubygems, such as Cancan, Devise were used to accelerate development, and faker was used to generate fake testing data. A sinatra application was also developed, for fetching and browsing e-mail offers. The same was achieved within a very short span of time.
1. Operating System: Ubuntu Linux Desktop 10.10 for development, Ubuntu Server for deployment.
2. Programming Language: Ruby 1.8.7 (for v-1), 1.9.2 (v-2)
3. Framework: Ruby-on-Rails (v 3.0.5), Sinatra (v 1.2.0)
4. Database: MySQL (for v-1), Redis, PostgreSQL (v-2)
5. Web Server: Mongrel (for v-1), Thin (v-2)
7. IDE for development: Netbeans (Linux)
8. Testing framework: Test::Unit (v-1), Rspec, Cucumber (v-2)
9. Ruby gems used:
- Cancan (Authorization library)
- Devise (Authentication solution)
- Database_cleaner (Database clean up for testing)
- Faker (Fake data for testing)
- Faster_csv (CSV parser)
- Json (JSON Parser)
- Nokogiri (HTML, XML, SAX, and Reader parser )
- Machinist (Test object creator)
- Mail (Ruby DSL for mails)
- Meta_where (Simplifying ActiveRecord queries)
- Paperclip (File attachments as attributes)
- Rcov (Code coverage analysis)
- Resque (Redis-backed queueing)
- Rspec (Behaviour-Driven Development)
- rufus_scheduler (Job Scheduler)
- Selenium (For automated testing)
- Tzinfo (Timezone library)
- Warden (Rack middleware)
BluEnt strives to achieve the task with effective client interaction, while following proper programming practices. Daily meetings with client were scheduled, progress was properly charted. Hipchat client was used for effective communication with the client (IM as well as voice), in addition to Skype (for video conference). Notes were shared with the client using Evernote.
BluEnt strictly followed Agile Methodology for development and preferred BDD methodology rather than coding immediately. Specs were written for the desired behavior, and then code was written to achieve the desired behavior, followed by code refactoring. Also, proper testing meant firmer code base. Selenium was used for automated testing of the application.
BluEnt insisted on development using Linux platform (which is currently the OS of choice for developers). Also, ideas regarding schema were encouraged, and Redis was introduced as a key-value storage. Also, other Ruby gems were used to ease development, so as to emphasize Ruby-on-Rails principles of Convention-over-Configuration (CoC) and Don't Repeat Yourself (DRY).