THE GREAT CONSOLIDATION: ENTERTAINMENT WEEKLY MIGRATION CASE STUDY - - PowerPoint PPT Presentation

the great consolidation entertainment weekly migration
SMART_READER_LITE
LIVE PREVIEW

THE GREAT CONSOLIDATION: ENTERTAINMENT WEEKLY MIGRATION CASE STUDY - - PowerPoint PPT Presentation

THE GREAT CONSOLIDATION: ENTERTAINMENT WEEKLY MIGRATION CASE STUDY JON PECK, MATT GRILL, PRESTON SO S l i d e s : h t t p : / / g o o . g l / q J i 8 K l WHO ARE WE? Jon Peck - drupal.org/u/fluxsauce Matt Grill - drupal.org/u/drpal


slide-1
SLIDE 1

THE GREAT CONSOLIDATION: ENTERTAINMENT WEEKLY MIGRATION CASE STUDY

JON PECK, MATT GRILL, PRESTON SO S l i d e s : h t t p : / / g o o . g l / q J i 8 K l

slide-2
SLIDE 2

WHO ARE WE?

Jon Peck - Matt Grill - Preston So - drupal.org/u/fluxsauce drupal.org/u/drpal drupal.org/u/prestonso

slide-3
SLIDE 3

PROJECT OVERVIEW

W H A T D I D W E D O & W H O D I D I T ? Jon

slide-4
SLIDE 4

ENTERTAINMENT WEEKLY

Entertainment news magazine 40th largest in the US ew.com serves 13.7 million consumers per week

Front page of EW.com

slide-5
SLIDE 5

MIGRATION SCOPE

WORDPRESS

10 blogs 51,616 terms 101,581 posts 90,435 images

VIGNETTE V6

117,326 articles 201,986 images 97,611 terms 4,924 galleries

slide-6
SLIDE 6

DEVELOPMENT TEAMS

Four Kitchens - 3 to 6 developers Time Inc. - 1 to 4 developers Zoom, HipChat for regular communication Video really helps GitHub Selfies - improved morale goo.gl/KrtRur

slide-7
SLIDE 7

TIMELINE

First commit: April 29th, 2014 Launch: January 29th, 2015 17 sprints

slide-8
SLIDE 8

DELEGATION OF RESPONSIBILITIE S

FOUR KITCHENS TIME INC.

slide-9
SLIDE 9

Project Management Data structures Migration Implement design, advertising Product Owner Design Workflow Infrastructure, build process

PROCESS

S T A N D A R D S A N D D O C U M E N T A T I O N Preston

slide-10
SLIDE 10

DEFINITION OF READINESS AND COMPLETION

Stakeholders: Context necessary for development Developers: Reviews, PO acceptance, demo, docs Evolving framework

slide-11
SLIDE 11

CODE AND STYLE STANDARDS

ALGORITHMICALLY ENFORCED

with Drupal rules from syntax and errors code style settings PHP_CodeSniffer coder jshint jscs EditorConfig

slide-12
SLIDE 12

COMMIT AND PULL REQUEST WORKFLOW

Descriptive commit messages Robust testing instructions Pull request labels

slide-13
SLIDE 13

PEER CODE REVIEWS

CODE REVIEW: DOES IT...

Pass code and style standards? Accomplish the task gracefully? Perform at an optimal level?

slide-14
SLIDE 14

PEER CODE REVIEWS

FUNCTIONAL REVIEW: DOES IT...

Fulfill the intent of the story? Use best practices? Avoid technical debt?

slide-15
SLIDE 15

DEVELOPMENT ENVIRONMENTS

Documented project-specific process Greatly reduced on-boarding time Provided detailed feedback

slide-16
SLIDE 16

BRANCHING STANDARD

Reduces clutter, helps manage releases Improves communication, navigation sprint-XX (kept for one sprint) PROJECT-YY (deleted after merge) Tags added when deleting sprint branch

slide-17
SLIDE 17

FRONT­END

T H E M I N G , P E R F O R M A N C E A N D A D V E R T I S I N G Matt

slide-18
SLIDE 18

AURORA, MOBILE FIRST THEMING

Separate themes hard requirement Edge device detection set cookie theme_key switched theme using cookie Used Aurora as base theme HTML5, Sass & Compass Mobile theme is sub-theme of Aurora Desktop is a sub-theme of Mobile

slide-19
SLIDE 19

GULP TASK MANAGEMENT

Compiles Sass Runs JavaScript checkers Watches for changes

slide-20
SLIDE 20

JAVASCRIPT GLOBAL SCOPING

Created global JS

  • bject for all EW

functions Centralized point of entry Easy access

slide-21
SLIDE 21

ATOMIC JAVASCRIPT FUNCTIONALITY

slide-22
SLIDE 22

Break related functions into individual files Only load what’s needed Improves front-end performance

PRE­ PROCESSING

slide-23
SLIDE 23

Node template data built in pre-processing Clean & reusable Helper and abstractions

slide-24
SLIDE 24

GLOBAL METADATA OBJECT

Useful for integrations requiring metadata Avoids repetition Facilitates data collection by crawlers

slide-25
SLIDE 25

BEACON PERFORMANCE

Delay loading of beacons (non-blocking/defer) Use defer for injecting JS tags

slide-26
SLIDE 26

AD PERFORMANCE

No ad specific logic in templates Data attributes contain relevant values Avoids inline JS Ads process and render in footer (after page load)

slide-27
SLIDE 27

EDITORIAL UI & WORKFLOW

Preston

slide-28
SLIDE 28

PACKAGES AND CHANNELS

Automatic dynamic content Editors define rules for selection Optional manual curation

slide-29
SLIDE 29

CUSTOM CONTENT TYPES

Used existing TI features to begin Rounds of PO, editor feedback Usability key to adoption

slide-30
SLIDE 30

DYNAMIC ENTITY REFERENCES

Many aggregate views Editorial control of views, but with overrides Custom module that "fills in" empty parts of a view based on context View lists 15, editor defines 5, DER populates remaining

slide-31
SLIDE 31

DYNAMIC ER CHALLENGES

Modular, extensible, reusable Accurate dynamically curated nodes High performance Editorial expectations for caching State Machine integration

slide-32
SLIDE 32

CONTENT MIGRATIONS

W O R D P R E S S , V I G N E T T E T O D R U P A L Jon

slide-33
SLIDE 33

WORDPRESS CHALLENGES

10 different blogs, structures, taxonomies Invalid markup Custom shortcodes, filters

slide-34
SLIDE 34

WORDPRESS_MIGRATE NOT ENOUGH...

BUT STILL USEFUL!

Extended classes Helped normalize WXR structure (really just XML) Focus on custom logic

slide-35
SLIDE 35

WORDPRESS PRE­PROCESSING

Stripped comments Transformed identifiers Separated authors, images, tags

slide-36
SLIDE 36

WORDPRESS SHORTCODES, FILTERS

Implemented subset of shortcodes in Drupal Most not migrated Rendered as HTML in pre-processing Used WordPress libraries, existing code Faked WordPress bootstrap to execute natively

slide-37
SLIDE 37

MAPPING WORDPRESS TAGS ON IMPORT

Specific vocabularies New content types (People, Creative Works) CSV Spreadsheet used for defining rules

slide-38
SLIDE 38

EXPORTING FROM VIGNETTE

Rendered as XML files Most procs were rendered as HTML Transformed overloaded taxonomies to content

slide-39
SLIDE 39

IMPROVING MIGRATION PERFORMANCE

Validate all XML before ingestion Eliminate all PHP errors, warnings Avoid redundant migrations Use cache_counts

slide-40
SLIDE 40

REDUCING MIGRATION OVERHEAD

Disabled solr, pathauto, metatag, others during migration Indexing lookup tables Ran migrations in parallel Ensure HW resources are sufficient

slide-41
SLIDE 41

REDIRECT STRATEGY

Minimize Drupal performing redirects Redirect farm (rules, 1:1 redirects) DNS changes Redirects from migrated servers

slide-42
SLIDE 42

PERFORMANCE AND CACHING

Matt

slide-43
SLIDE 43

FRONTEND PERFORMANCE

CSS is Sass and Compass optimized Targeted - only load needed CSS JavaScript is linted, strict standards JS in the footer (non-blocking)

slide-44
SLIDE 44

FRONTEND CACHING STRATEGY

Editorial 1 minute publish to live Ensure cacheable headers are set Shorter TTL on Akamai than Varnish Send purges on publishing

slide-45
SLIDE 45

BACKEND PERFORMANCE

Eliminate PHP errors Cache, EXPLAIN custom queries Minimize unnecessary overhead Module count Benchmarking

slide-46
SLIDE 46

PERFORMANCE TESTING

Load test production with migrated data Blitz.io and custom tooling New Relic for introspection Exercised different content types, exceeded TTLs WebPageTest.org

slide-47
SLIDE 47

WHAT DID YOU THINK?

EVALUATE THIS SESSION ON events.drupal.org

THANK YOU!

@fluxsauce @alwaysworking @prestonso