Categories
Architecture demand-side eCommerce Frontend Full-Stack Growth Performance Engineering SPAs

Improving Demand-side UX

(CrowdFlower : 2/14-4/14)

Contributors, as they are called, are the +5M people around the world who do work on CrowdFlower’s platform. The application that enables them to do work is one of the company’s heavily trafficked as well as most complicated – blending a Rails backend with MooTools, jQuery, and RequireJS in the frontend.

The application’s UX

…had largely stayed the same for the last five years. In Q1/2014, we decided to enhance it by making it more interactive and towards engaging our users more and conveying the just how much work there is in our system.

Working with the Product Manager and an external Designer, we came up with the following high-resolution mock

Because the application is so heavily used, we knew we couldn’t merely throw the switch on a new design overnight; both from a community management standpoint as well as application performance. Instead, we chose a strategy of introducing a first at the company: use of A/B Testing to determine a design that would perform as well as if not better than the original.

Our key metric for performance in that regard had to do with contributor’s performance after being exposed to the new UX, particular the messaging around our forthcoming gamification and introduction of Levels. In the beginning, we did not have the infrastructure to determine the value for that metric so we simply settled on ‘clicks’ as a (conversion) proxy to understand if the new design was having an impact.

Infrastructure

Without an A/B Testing framework in place, I needed to choose one. As requirements were not concrete for such, I did some due diligence in vetting several options, coming up with a review of A/B testing frameworks for Rails.

It became obvious that Vanity was best suited to our needs. (Since it doesn’t yet have the ability to throttle a percentage of the traffic receiving experiments, I augmented it with Flipper.)

Once that was in place, we could begin iterating on the design, knowing with confidence how we were impacting the user experience.

Server-side

We knew we wanted the experience to be snappy, but completely replacing the existing experience with a Rich Internet Application was far out of the scope for the first month, particularly as there were infrastructure changes to be made to retrofit the stack with A/B Testing. We decided to make progress iteratively over several sprints.

In our first test, we pitted the control (original) against a bare-bones implementation version of the high-resolution mock as the new design.

original

The new version out-performed control (in terms of clicks) 21.3% vs 20.3% (at 95% confidence) so I continued to iterate on the implementation, coming up with the following

To calculate the overall satisfaction by other contributors for a task (denoted by the stars) proved to be too inefficient in this iteration; it wound up losing.

Client-side

On the assumption that we needed to make the experience snappier in order to drive engagement, it was obvious that we would need to have more (and faster) interaction and therefore, an interactive client-side implementation.

As what was essentially a completely parallel product, leveraging only some of the infrastructure that the server-side rendition was utiziling, I begin to flesh out the following

Further refinement (an actual data) was necessary to get it looking more like the high-res mock (and like its server-side-rendered peer)

At this point, we implemented and integrated with our own homemade badging solution, beginning to display badges in the following iteration

The new version out-performed control (in terms of clicks) 21.3% vs 20.3% (at 95% confidence) so I continued to iterate on the implementation, coming up with the following

Testing the impact of particular messaging was also of interest, so we added a Guiders variation as well. At this time we also leveraged Google Analytics Events on the Guider buttons to track how the far the user got in our messaging.

Letting the experiments run a few days with sufficent traffic, we found that client-side-rendered version peformed no worse than the server-side-rendered version (23.9% vs 22.9%) and that having guiders also performed not significantly worse (23.1% vs 23.7%) so we decided to keep both.

By that time, the new version was out-performing control (the original design) 22.2% vs 20.7% (at 99% confidence) so a decision was made to move forward rolling out the new experience to 100% of contributors, doing some polishing (copy/styling) work before finally settling on the following

Results

  • Used A/B testing to upgrade company’s most highly-trafficked page (5+M views/month,) increasing user engagement by 5% and saving $2K/month (in Bunchball costs) by rolling own simple badging solution.
Categories
CMS demand-side Frontend SPAs

Demand-side Internal Tooling

(CrowdFlower : 7/13-8/13)

The CrowdFlower platform is consumed via a number of microtasking sites. Each site registers and maintains its own users, but to better track unique identities across the CrowdFlower platform, we built a Single Page App in Ember.js to allow associating users across partner microtasking sites with one unique identifier in the CrowdFlower platform.

Results

  • Implemented a CRUD tool for managing users using Ember.js while iterating in conjunction with Product Manager as requirements changed.
Categories
Architecture demand-side Frontend Innovation SPAs TDD

Improving QA with SPA

CrowdFlower : 4/13-7/13)

Test Questions are used as the gold standard of quality in the CF platform, but they can be laborious to create, particularly for work that’s periodically repeated.

As no templatized solution existed, a team of three of us (me as F2E, Product Manager, and Backend Engineer) tackled creation of an internal product to simplify the workflow.

The user flow was to create “Cases” of Test Questions that got sent to jobs as “Batches”; where the composite idea of a “Mold” encompassed all “Cases” and “Batches” for a particular set of target jobs.

(“The Forge” was the product’s original name, derived from a time when “Test Questions” were known as “Gold.”)

One of the more challenging aspects of the project was the testing of the app. Selenium has always been a robust solution for testing even JS-heavy experiences, but given its heft, Poltergeist was used instead.

The product was to eventually be made available externally but never was.

Results

  • Built internal workflow tool using Ember.js.
Categories
demand-side eCommerce Frontend

Owned Demand-side UX

(CrowdFlower : 1/13-3/13)

The app is CrowdFlower’s most highly-trafficked app. It also happens to be one of the company’s most technically complex, given its history.

Its architecture is that of a Rails app, wrapping a Gem that extracted business logic from the company’s legacy (original) Merb app. The Gem contains all logic around rendering, styling, and providing interactivity for CML, the basis of abstracting microtasks in the platform.

The app was built (before my time) in order to bring a richer, more interactive experience to those doing microtasking work. When the original architect departed only weeks after I joined the company, maintenance and feature implementation fell to me.

Results

  • Supported site’s most highly-trafficked, revenue-generating UI (allowing for custom JS and CSS.)
Categories
Affiliate Backend eCommerce Frontend Full-Stack Growth supply-side

Selling More

(Shop It To Me : 6/10-7/12)

Results

  • Iterating with Product to scope, implement (Rails w/MySQL,) and A/B-test pixel-perfect sign-up/refer-a-friend/search/browse/opt-out/profile experiences
  • Drove conversions in the form of signups, virality, and clicks for not only our flagship web and email products (used by 4M+ users) but also eight new product launches
  • Architected company’s newest Ember.js-based product
  • Quickly integrated into a small, fast-moving, startup engineering team
  • Became proficient in all things Rails
  • Ensuring quality through the use of code reviews, TDD, unit, functional, integration, and regression tests under continuous integration, testing plans, and mentoring/pairing to deliver functionality, fix bugs, refactor legacy code, and transfer knowledge
  • Have assumed lead (primarily frontend) responsibilities while reporting directly to CTO
  • Established F2E guidelines and best practices
  • Architected the company’s newest product, an Ember.js-based Single Page Application
  • Leveraged Facebook, Twitter, and Pinterest APIs to increase our social reach (including the use of Facebook Connect and the Like Button during signup and tell-a-friend experiences)
  • Prototyped iPhone app for user to navigate item stream during in-house Hackathon
  • Contributed improvements to our Nokogiri-based data-harvesting framework.
Categories
crm eCommerce Emails Frontend NUX supply-side

Improving Virality

(Shop It To Me : 2/10-5/12)

Taken in comparison with the default look and feel of our quintessential ‘tell-a-friend’ experience…

… the following examples depict some of the numerous ways we have experimented with (testimonials, site activity feeds, markup positioning, copy, timer, interstitials, refreshed creatives, etc.) to encourage users to spread the word.

These represent just a handful of the variations I’ve implemented.

Results

  • Realized a bump of 10-15% in the number of friends told (depending on the variation)
Categories
Affiliate Emails

Email Newsletters

(Shop It To Me : 2/10-5/12)

Below are a few of examples of the types of one-off marketing materials we sent to our users. They tend to fall into several categories: tell-a-friend promotions, Black Friday, Cyber Monday, special sales/announcements, and new product announcements.

All newsletters are designed and created in-house.

Results

  • Created numerous hand-crafted, one-off HTML newsletters
  • Reduced the time it takes to create a newsletter from two days to two hours
  • Normalized a set of legacy tables to reduce the possibility of error when assigning subject-line and other trials

 

Categories
Architecture Collaboration eCommerce Frontend Innovation Prototyping SPAs supply-side

A New Way To Shop

(Shop It To Me : 1/12-4/12)

Shop It To Me has been a beloved service for years when it comes to finding the best deals across retailers, but we wanted to enable the user finer-grained abilities to find exactly the item(s) of interest for them.

We often had feedback about being able to drilldown by clothing type and brand (e.g. “Rebecca Minkoff handbags”) but our previous tools didn’t enable that kind of granularity.

Enter “Threads.”

As the brainchild of our CEO, project “Threads” has become a way for users to track the specific items of interest to them. We now empower the user with the ability to get as general (e.g. “Black dresses”) or as specific as they want. (e.g. “Rebecca Minkoff handbags under $300.”)

Below, you’ll see the hi-res) mockup we came up with (after having previously white-boarded the idea) in early March (click to view.)

inspiration (as mocked-up in Photoshop)

Over the following two weeks, I ramped up on Ember.js and implemented the first version of the app while the other engineer built out the pseudo-RESTful backend. I won’t claim that the code we produced was the cleanest either one of us ever wrote; while doing the best we could, getting to market was the true driving motivator.

We went live – that is, deployed to production for internal and a select group of test users – on March 27th, 2012, with the following (click to view)

very first landing page

Based on user tester feedback, we decided to bolt-on onboarding and improve the look, so four days later on March 31st, 2012, we deployed the following (click to view)

revised landing page with header and pseudo-onboarding

Based on observations during user testing, we realized the opportunity to incorporate a feed of site-wide activity as that would benefit discovery. We also took a few cycles to flesh out onboarding and a “Things To Do” list given challenges users’ had in making sense of the new product. We also tweaked styling to highlight the very newest items in the users’ results; screenshots follow (click to view.)

onboarding modal on landing page (4/11/2012)
 
1st try: TTD/activity feed on landing page (4/11/2012)
 
2nd try: TTD/activity feed on landing page (4/12/2012)
emphasizing new items (released 4/12/2012)

We brought in more and more user testers. Here’s a screenshot from April 17th, 2012, showing progress we made from our observations

4/17/2012 release of results page

While observing user testers, we discovered that they wanted tastemakers to help them navigate the overwhelming number of apparel items, so we introduced the concept of curation. We also made the assets/images larger by popular demand.

curation (4/23/2012)
results page (4/23/2012)
results page w/larger assets/images (next day : 4/24/2012)

After April 24th, we stepped back to assess how we were doing. I was rotated onto our bread-and-butter projects but the team was augmented with other talent and continued forward, contracting the look-and-feel out to a third party.

The product has since been retired.

Results

  • To revolutionize personalized shopping, a team of three (the CEO as product manager, me as the F2E/architect, another as backend engineer,) created a new shopping experience using Ember.js over two sprints
  • Ramped up quickly on Ember.js
  • Architected frontend as a Single Page Application
  • Worked with backend engineer to agree upon/implement integration between FE and BE
  • Drove development through four major iterations during a two one-month sprints
  • Suggested (though not responsible for implementing) lazy-load as a way to improve performance
  • Picked up design slack when we lost our Graphic Designer
  • Scoped frontend deliverables and managed expectations
  • Worked with CTO to coordinate out-of-cycle releases to production
  • Planned, conducted, and analyzed user testing
Categories
eCommerce Frontend Growth Innovation supply-side

Product Page Improvements

(Shop It To Me : 10/11-11/11)

To keep the user on-network, we created an on-site details page. We explored different MVPs which partially leveraged the metadata already present in our inventory, partially as they were intended to aggregate content from the retailers.

Here are a few concepts we vetted as MVPs

The following screenshot shows that we even tried our hand at soliciting reviews as UGC

… before finally settling on this as the (now retired) final product.

Results

  • created an on-site details page to boost checkout conversion
  • worked 1:1 with Product to prioritize features
  • prototyped MVPs using Photoshop
  • implemented all aspects of the frontend under a sprint schedule
Categories
eCommerce Frontend Growth Innovation Prototyping supply-side

Popup Shop

(Shop It To Me : 7/11-8/11)

With a number of in-house domain experts in the world of fashion, we decided to put that knowledge to use by having Product curate items into pop-up shops, or internally known as events.

I built the web frontend as well as the CRUD tool for management.

basic popup-shop example

Results

  • Created a popup-shop infrastructure
  • Implemented admin tool for Product to curate events using apparel items from our database
  • Added features as A/B-tested experiments to drive clicks