Tuesday, July 29, 2014

Free tools for A/B testing your website and learning from online experiments

A/B testing and online experiments are one of most interesting and important trends of online software development these days. Experimentation and learning from users has become one of the main aspects of data science in recent years. As Eytan Bakshy, Dean Eckles, and Michael S. Bernstein of Facebook mentioned in their blogpost:

"On the Data Science Team, part of our job is to inform strategic and product decisions. Does a new feature we are testing improve communication? Does having more friends on Facebook increase the value people get out of the service? While a correlation between variables may suggest a particular causal relationship, it is hard to use such data to credibly answer many of these questions because of difficult-to-adjust-for confounding factors. Furthermore, when you change the rules of the game -- like launching a completely new feature, it's often impossible to have any data at all to anticipate the effects of a future change.

Because of this, data scientists, engineers, and managers turn to randomized experiments, which are commonly referred to as "A/B tests". Typically A/B tests are used as a kind of “bake-off” between proposed alternatives. But experiments can also go beyond bake offs and be used to develop generalizable knowledge that is valuable throughout the design process. "

Tonight we have decided to share some interesting tools with you that help you get better results and start using data to make decisions about your software and its features. We focus on free and open source tools to avoid any marketing for platforms here. We will follow up with a review of some of the very soon so tay tuned. Here is a list of tools with their short description(descriptions in italics directly come from the respective frameworks website):

PlanOut is a Python-based framework for online field experiments. PlanOut was created to make it easy to run more sophisticated experiments and to quickly iterate on these experiments, while satisfying the constraints of deployed Internet services with many users.

Developers integrate PlanOut by defining experiments that detail how units (e.g., users, cookie IDs) should get mapped to parameters that control the user experience. Read more on PlanOut website

Vanity is an A/B testing framework for Ruby on Rails that is datastore agnostic. It provides a full stack for you to use and  can easily be integrated with your Rails application. It is also MIT licensed and free to use. Read more on Vanity website.

A/Bingo is a Ruby on Rails A/B testing framework written as a plugin. It is an extraction from Bingo Card Creator, where it is used in production. A/Bingo should work for most recent versions of both Rails 2.3 and 3.0.  Read more on its website.

Free and open source (GPL licensed) A/B testing framework for PHP. phpA/B supports google analytics for data integration and also search bot filtering. You read more about it on its website.

Abba is a simple a/b testing self-hosted framework built to help improve conversion rates on your site. It is a very simple JavaScript based approach to A/B testing. You can read more about it on Github.

We will list more useful tools with some mention of commercial ones. Stay tuned for more examples and reviews.

Friday, July 25, 2014

Best Practices for Building Angular.js Apps

Burke Holland had a fantastic post explaining how Angular loads an application and comparing the merits of browserify vs require.js in an Angular app.

I’ve worked with Angular on quite a few apps at this point, and have seen many different ways to structure them. I’m writing a book on architecting Angular apps right now with the MEAN stack and as such have researched heavily into this specific topic. I think I’ve set on a pretty specific structure I’m very happy with. It’s a simpler approach than what Burke Holland has proposed.

I must note that if I was on a project with his structure, I would be content. It’s good.

Before we start though, the concept of modules in the world of Angular can be a bit confusing, so let me lay out the current state of affairs.

Read more here.

Data-Driven Forms with AngularJS’s Two-Way Data Binding and Custom Directives

Use the two-way data binding and custom directives features of AngularJS to develop data-driven, interactive forms.


AngularJS has exploded on to the web-application development scene. Since being introduced in 2009, AngularJS’s use has grown exponentially. Its wide range of features and ease of use make it an ideal tool for rapidly developing modern web-applications. Combined with other modern JavaScript tools, such as Node, Express, Twitter Bootstrap, Yeoman, and NoSQL databases such as MongoDB, AngularJS developers can create robust, full-stack JavaScript applications.

A primary feature of AngularJS is two-way data binding. According to AngularJS’s website, ‘data-binding is the automatic synchronization of data between the model and view. The way that Angular implements data-binding lets you treat the model as the single-source-of-truth in your application. The view is a projection of the model at all times. When the model changes, the view reflects the change, and vice versa.‘ In the past, developers spent much of their coding time wiring up UI components to the application’s data model. AngularJS has greatly simplified this process.

Another key feature of AngularJS are directives. At a high level, according to AngularJS’ site, ‘directives are markers on a DOM element (such as an attribute, element name, comment or CSS class) that tell AngularJS’s HTML compiler to attach a specified behavior to that DOM element or even transform the DOM element and its children.‘ AngularJS provides many built-in directives, including ngModel, ngBind, ngInclude, ngRepeat, and ngChange. These directives are the building blocks of an AngularJS application. We will use many of these built-in directives in this post.

In addition to built-in directives, AngularJS allows us to create custom directives. Custom directives are a powerful feature, allowing us to encapsulate our own reusable DOM manipulation functionality.

Read more on the original article.