Surviving the Big Rewrite: Moving YELLOWPAGES.COM to Rails. John Straw YELLOWPAGES.COM



Similar documents
Accelerating Wordpress for Pagerank and Profit

Web Performance. Lab. Bases de Dados e Aplicações Web MIEIC, FEUP 2014/15. Sérgio Nunes

About Blue Sky Sessions

Large-Scale Web Applications

Integrating Kerberos into Apache Hadoop

THE OPEN UNIVERSITY OF TANZANIA

Web Analytics. Using emetrics to Guide Marketing Strategies on the Web

Jitterbit Technical Overview : Salesforce

Web 2.0 Technology Overview. Lecture 8 GSL Peru 2014

Jitterbit Technical Overview : Microsoft Dynamics AX

Web Cloud Architecture

Brocade Virtual Traffic Manager and Oracle EBS 12.1 Deployment Guide

Front-End Performance Testing and Optimization

White Paper. Java versus Ruby Frameworks in Practice STATE OF THE ART SOFTWARE DEVELOPMENT 1

Nginx 1 Web Server Implementation

Reference Model for Cloud Applications CONSIDERATIONS FOR SW VENDORS BUILDING A SAAS SOLUTION

Adobe Test&Target. Integrating Test&Target with Your Online Properties. Overview. The Test&Target Architecture

JReport Server Deployment Scenarios

IBM Digital Experience. Using Modern Web Development Tools and Technology with IBM Digital Experience

Web Applications: Overview and Architecture

AUDIT REPORT EXAMPLE

9 Tried and Tested Tips to Increase the Power of your Magento Store

Website design & development process

Web Development Frameworks

ABC Widget Company. Website Redesign Proposal. Prepared for: Jonathon Doe

SEO Overview. Introduction

80+ Things Every Marketer Needs to Know About Their Website

WompMobile Technical FAQ

CUMULUX WHICH CLOUD PLATFORM IS RIGHT FOR YOU? COMPARING CLOUD PLATFORMS. Review Business and Technology Series

Web Performance. Sergey Chernyshev. March '09 New York Web Standards Meetup. New York, NY. March 19 th, 2009

Website Audit Reports

Pentesting Web Frameworks (preview of next year's SEC642 update)

HOW TO CONFIGURE PASS-THRU PROXY FOR ORACLE APPLICATIONS

zen Platform technical white paper

Senior Business Intelligence/Engineering Analyst

Chatbots 3.3. Chatbots in Web Applications with RiveScript. Presented by Noah Petherbridge

Creating Value through Innovation MAGENTO 1.X TO MAGENTO 2.0 MIGRATION

1 How to Monitor Performance

WAP PUSH, UP.NOTIFY, AND SMS Features and Benefits Comparison

Mobile Application Development

API Management Introduction and Principles

The Virtualization Practice

Client Requirement. Why SharePoint

How To Build A Web App

Proposal for Website Design and Development Services: Digital Library Federation

Ontario Ombudsman. Goals

Checklist of Best Practices in Website

By : Khalid Alfalqi Department of Computer Science, Umm Al-Qura University

WEB, HYBRID, NATIVE EXPLAINED CRAIG ISAKSON. June 2013 MOBILE ENGINEERING LEAD / SOFTWARE ENGINEER

Dynamic Content Acceleration: Lightning-Fast Web Apps with Amazon CloudFront and Amazon Route 53

Kentico CMS 6.0 Performance Test Report. Kentico CMS 6.0. Performance Test Report February 2012 ANOTHER SUBTITLE

How Comcast Built An Open Source Content Delivery Network National Engineering & Technical Operations

JBoss Enterprise MIDDLEWARE

Performance Test Report KENTICO CMS 5.5. Prepared by Kentico Software in July 2010

E-commerce is also about

Website Performance: Kyle Simpson

Preparing Your Business for Magento 2.0

Concepts. Help Documentation

Talking your Language. E-WorkBook 10 provides a one-platform, single source of truth without adding complexity to research

Advanced Solutions of Microsoft SharePoint Server 2013 Course 20332A; 5 Days, Instructor-led

SQLstream Blaze and Apache Storm A BENCHMARK COMPARISON

Enterprise Mobile Web Development. Robert Altland Principal Consultant, Mobility Neudesic, LLC

Software Re-Engineering and Ux Improvement for ElegantJ BI Business Intelligence Suite

Layers of Caching: Key to scaling your website. Lance Albertson -- Narayan Newton

ORACLE APPLICATION EXPRESS 5.0

James Singletary IV :: Front End Web Developer located in Tampa, Florida

CatDV Pro Workgroup Serve r

The importance of Drupal Cache. Luis F. Ribeiro Ci&T Inc. 2013

Embedded BI made easy

Your Information Technology Partner. Company Overview. Copyright Mantra IS LLC. All rights reserved.

making drupal run fast

SiteCelerate white paper

Drupal CMS for marketing sites

Web Application Deployment in the Cloud Using Amazon Web Services From Infancy to Maturity

RED HAT SOFTWARE COLLECTIONS BRIDGING DEVELOPMENT AGILITY AND PRODUCTION STABILITY

Request for Proposal (RFP) Toolkit

<Insert Picture Here> Oracle Web Cache 11g Overview

Microsoft Dynamics AX

1. Comments on reviews a. Need to avoid just summarizing web page asks you for:

OpenText Output Transformation Server

Minnesota Report Card. A Mobile Friendly Platform for Disseminating School Performance Data. Digital Government: Government to Citizen

Making big data simple with Databricks

Transcription:

Surviving the Big Rewrite: Moving YELLOWPAGES.COM to Rails John Straw YELLOWPAGES.COM

What is YELLOWPAGES.COM? Part of AT&T A local search website, serving 23 million unique visitors / month 2 million searches / day More than 48 million requests / day More than 1500 requests / sec 30 Mbit/sec (200 Mbit/sec from Akamai) Entirely Ruby on Rails for almost a year, following a Big Rewrite

When was the big rewrite?

Starting in late 2006... Several projects combined to become the big rewrite Replacement of Java application server Redesign of site look-and-feel Many other wish-list projects, some of which were difficult to accomplish with existing application Project conception to completion: one year Development took just three months Project phases 7/2006-12/2006: Thinking, early preparation 12/2006: Rough architecture determination, kick-off 1/2007-3/1/2007: Technology research and prototypes, business rules exploration, UI design concepts 3/1/2007-6/28/2007: Site development and launch

Why a big rewrite?

Site design Site essentially unchanged since 2003 design Poor user experience demonstrated by usability testing Lots of new browser windows confused users Confusing controls and poor information layout

Application server change No useful platform support or improvements Session-heavy design hard to scale horizontally Unusable session migration features Platform design & misfeatures made SEO difficult

Code base Lots of code written by consultants 2004-2005 Fundamental design problems Code extended largely by copy-and-modify since 11/2005 (to around 125K lines) No test code New features hard to implement Lots of code would be obsolete after site redesign and server replacement What remained was impossible to leverage

Rules / Requirements for new website Absolute control of urls Maximize SEO crawlability No sessions: HTTP is stateless Anything other than cookies is just self-delusion Staying stateless makes scaling easier Be agile: write less code Development must be faster Develop easy-to-leverage core business services Eliminate current duplicated code Must be able to build other sites or applications with common search, personalization and business review logic Service-oriented architecture, with web tier utilizing common service tier

Who pulled off the big rewrite?

Team composition Cross-functional team of about 20 people Ad products Community features Content Development Project management Search SEO User experience (UX) Whole team sat together for entire project Lunch provided several days per week to foster team togetherness Team celebrations held for milestones

Benefits of team composition Diverse team helped ensure requirements weren't missed Each team member had different perspectives about what was important Each team member had to accept that only a small portion of his/her ax would be ground Core development team deliberately small Never more than five developers -- four skilled developers can accomplish a lot Cost of communication low on a small team -- especially important when working with new technology Low management overhead

How did the team approach the big rewrite?

Exploration phase - development team Built initial Rails prototype -- small version of site Studied search code and search query logs Built prototype search service in Python Started new Rails prototype using search service and UX team proposed page designs Built a Django prototype using search service and UX team proposed page designs Evaluated and rejected EJB3/JBoss as a service tier platform Chose Rails for web tier and service tier

Why Rails? All considered Java frameworks didn't provide enough control of url structure Web tier platform choice came down to Rails vs. Django Rails best web tier choice due to Better automated testing integration More platform maturity Clearer path to C if necessary for performance Developer comfort and experience Originally thought that service tier would have to be Java/EJB3, but team decided to go with Rails top-to-bottom Evaluation of EJB3 didn't show real advantages over Ruby or Python for our application Reasons for choosing Rails for web tier applied equally to service tier Advantage of having uniform implementation environment

Exploration phase - full team Requirements Wish-list sharing Lots of discussion about existing site and possible feature/behavior changes UX team members given the task of building a catalog of existing site pages and features Communication with executive team Extensive meetings summarizing current progress Meetings caused distraction and were characterized by extensive low-level discussion Project in danger of stalling Decision paralysis -- too many opinions Over-ambitious expectations Extremely short timeline

Development phase - Leadership Project lead appointed to take on the burden of decision-making and communication with executive team Agreement to freeze development on the existing site Establishment of decision-making rule: if it's not simple to decide how to change a current site behavior, don't change it Release schedule set 04/26/2007 - "Friends and Family" beta 05/17/2007 - Open beta 06/28/2007 - Site launch

Development phase - Process Pages segmented into rough batches based on estimated importance and difficulty of implementation Multi-week page batch development cycle established First week: batch wireframe development and sign-off Second week: batch UI design and sign-off Third week+: batch development Each week of cycle handled by different sub-team Multiple batch cycles run out-of-phase; each sub-team had a full pipeline

Development phase - Coding Developed features needed for page batches and wired up HTML Deployed code often to integration/beta site -- visible progress Weekly milestones, with to-do lists managed in Basecamp Core development team stayed focused by outsourcing to other developers anything with manageable dependencies or requiring specific skills to do quickly Static HTML/CSS coding of pages Rewrite rules for legacy url translation Performance evaluation for production deployment configuration

Development phase - Communication Early communication with sales team Previous site redesign had nearly failed because of lack of communication with sales channels Team member demonstrated beta site to groups of sales people Talked to 20-40 salespeople a week, previewing proposed changes Expected tour participants to discuss with their groups Project lead kept executive team happy Development lead kept CTO happy

What was built in the big rewrite?

Application design

Design features Stateless HTTP communication at all levels REST services returning JSON in service tier Memcached used extensively in service tier Production configuration Acquired 25 machines of identical configuration for each data center (replacing 21 machines for existing site) Performance testing to size out each tier, and determine how many mongrels Used 2 machines in each data center for database servers

Performance Performance optimizations Considered F5 vs. HAProxy vs. Swiftiply vs. localhost Utilized mongrel_handlers in service tier application Developed C library for parsing search cluster responses Switched to Erubis in web tier Performance goals Sub-second average home page load time Sub 4-second average search page load time Handle traffic without dying

Performance issues Database performance issues Oracle doesn't like lots of connections Machines inadequate to handle search load for ratings lookup Additional caching added Web server performance issues Slow page performance caused more by asset download times than speed of web framework Worked through the Yahoo! performance guidelines Minified and combined CSS and Javascript with asset_packager Moved image serving to Akamai edge cache Apache slow serving analytics tags -- moved to nginx for web tier Performance at launch was generally acceptable After web server & hosting changes performance better than previous site Extensive use of caching and elimination of obsolete queries lowered load on search cluster compared to previous site

Conclusion Project was exhausting, but a tremendous success Site launched on schedule Performance and stability were acceptable at launch Team eventually wrote fewer than 20K lines of code and tests Keys to success Small, talented development team Careful evaluation of technology to choose platform compatible with application Close communication among team members with diverse viewpoints allowed us capture requirements without formalism Freeze on existing site prevented us from having to hit moving target "Don't change things which aren't simple to decide" rule prevented decision paralysis Frequent beta site updates allowed early, visible communication of progress and direction CTO not only allowed us to bet on Rails, but was excited about the idea