EMUSIC eMusic is a digital music service for independent-‐minded music lovers. eMusic Members sign up for a monthly subscrip9on that allows them to discover, download and own music. eMusic’s editors and writers put music into context through mix of new and old music discovery tools. eMusic is headquartered in New York with an oﬃce in London. • ~400,000 subscribers who pay monthly for downloads• ~6 million visits a month• Billions of HTTP requests / Millions of page views
EMUSIC IS BUILT ON:• Java • Day CRX• Struts 1 • Catalog Service• Hibernate • Ratings Service• JBoss • Image Service• Oracle• Spring
WE’RE MOVING!(Gradually!) to WordPress for all of our CMS needs
WEB SERVICES + WORDPRESSA majority of the hardcore business logic will live in services, but the content, UI, and community will live in WordPress
GOODBYE, DAY CRX• the deﬁnition of Legacy• we couldn’t upgrade• no longer supported• no UI• coding nightmare• we don’t miss it!
SORRY, DRUPAL :(• None of us knew it• Thethings we did know, weren’t exciting• Other developers preferred WordPress
LEARN THE VOCABULARY!• What are Custom Post Types?• Theming - what ﬂexibility is available to me?• How can we connect our data using custom Taxonomies?• Research Plugins• Read the Codex!
MOVING CONTENT TO WORDPRESSDo yourself a favor, and do some PLANNING
PLANNING• Make an inventory of your content• Make a site map• Agree on how to export the content - WordPress schema? XML ﬁles?• Strategize a MODULAR import process• Don’t import unless you can easily re-import / update (deltas)• Allow for turbulence / changing requirements
THERE WILL BE BLOOD (GOTCHAS)• Even with the best planning, there will be many painful moments • Hey, Iforgot to tell you... every piece of content HAS to be regionalized • We’re used to doing X, where do I do that in WordPress - oh wait.... did I not already tell you that? • Something weird is happening, did something import wrong - oh, you need to re-import all of the content? Yikes! Ok...
NEW FEATURES• You will probably end up building things that do not exist already• Yes, plugins are awesome, but they are not all A+ quality and ready to build your business on• Somebusiness requirements may not have been tackled by the WordPress community, you can be the ﬁrst!
EXTENDBuilding plugins to suit the needs of your business
PLUGINS ARE AWESOME!There are hundreds that already exist that you can start using immediately!
PLUGINS WE USE• Batcache - Memcached full-page caching mechanism• bbPress - Bolt-on message boards (shares users!)• BuddyPress - Bolt-on social (shares users!)• Gravity Forms - Customer Service loves it!• Google Sitemap Generator• Jetpack - not yet, but I’m sure we will• Akismet
PLUGINS AREN’T PERFECT• MOST aren’t updated regularly• MOST don’t take your Custom Post Types into account• MOST (NONE?) have no (any) clue that you are regionalizing your entire site• Plugin authors aren’t required to do security audits• Most authors don’t take High Availability and Object caching into account
I AM GUILTY OF THIS! Movies, Audio, Like Buttons, etc...
PLUGINS I WROTE OUT OF NECESSITY• eMusic Post Types • eMusic Calendar• eMusic Radio • eMusic XML-RPC• eMusic Comments • Like Buttons• eMusic BuddyPress • Minify• Avatar • Slot Machine• Cloud • eMusic Shortcodes
AVATARGives users an interface to upload an “avatar” / photo right in the WordPress admin - leverages Cloud
SLOT MACHINESchedule content in speciﬁc “slots” on the site
A HYBRID APPROACHWordPress powered pages / XML-RPC-supplied data
REGIONALIZATION• US, UK, EU, CA or ALL• Affects 90% of our WordPress database queries• We use Custom Taxonomies• Notwithout a cost - caching has to be in place to swallow expensive queries• Optimizations had to be done to lower query count
BACK TO THOSE QUESTIONS RAISED / MYTHS ABOUT WORDPRESS Does it do X, Y, or Z?
SCALING• Batcache / Memcached plugins are your conduit to the Memcached backend for the WP Object Cache• APC• PaulIrish’s HTML5 Boilerplate suggestions with caveats• YSlow! / Google Page Speed
WE USE A LOT OF AMAZON WEB SERVICES• Elastic Load Balancing• Elastic Compute Cloud (EC2)• Simple Storage Service (S3)• Relational Database Service (RDS)• Downloads and Streams are served from Amazon
COMPLEX DATA TYPES = METADATA API• Posts, Users, Comments have built-in Metadata capabilities• SIMPLE APIs for saving complex objects as meta• BYOT (Build your own tables) for your custom objects / data needs, you can still use API functions and $wpdb abstraction layer• Metadata = some ID linked to Key / Value pairs
WHO USES WORDPRESS IN THE “REAL WORLD”?• New York Times • During the tsunami, the NYTimes was at its height serving 10,000 simultaneous page views of certain articles• CNN• TechCrunch• Kanye West, Katy Perry, Grizzly Bear, the list is endless
UNDERSTAND THE COST OF EVERYTHING• Plugins add code• Plugins may add database queries• Plugins may add CSS and JS unexpectedly• Use Debug Bar plugin to keep yourself honest• Learn what benchmarks matter to you and run tests often
PREPARE FOR MULTIPLE ENVIRONMENTS• Local Dev• Community Dev• Staging - multiple• Production - scales to multiple servers• “Tools” - we block access to /wp-admin/• XML-RPC servers
XML-RPC IS THE BRIDGE BETWEEN NEW AND OLD• Built right into WordPress• Easily extensible• In load-balanced environments, it is a great way to serve fancy new content to your Legacy UI / back-end• We send JSON in the responses - a pseudo API for complex objects
WRITE A BUNCH OF PHP / MYSQL ON TOP OF WORDPRESSWordPress is, literally, a bunch of PHP and MySQL code. You can always write something custom, but leverage what’s inside ofWordPress ﬁrst - do not reinvent the wheel, WordPress IS the wheel!
WE’RE HIRINGIf you live in New York City (or want to live in NYC) and arereally good at all things WordPress - talk to me or Ben Kotch