Launches are tough on a new developer. Everyone remembers the lump in their throats around launch time; the rush to finish content, make final theme tweaks, adjust for sudden browser weirdness. As momentum picks up, the odd change request always appears, databases are slingshot hither and yon, while everyone scrambles to resolve merge conflicts like a Tokyo train at rush hour.
We emerge scarred but smarter, intent on making the next launch less painful. But with different teams launching different sites, it can be hard to establish an iterative process. Especially as new work accumulates in the backlog, we reap what we sow in technical debt from rushed launches, quick & dirty choices made under the gun, and unimplemented ideas from retrospectives.
Pantheon, however, has the same Customer Success team launching several enterprise sites per week, while assisting hundreds of self serve customers when they need a hand. Because we need to work effectively, we have developed the tools and process to ensure:
* Great Site Performance - On Day One
* Less problems over the long run
* Clear Expectations from Informed Stakeholders
The session will cover other key areas:
1. Preparing For Launch for the PM, Stakeholder, Developer & Sys Admin
2. Auditing the Site for landmines, carnivorous acid pool islands, and deadweight
3. Load Testing to obliterate surprises with actionable results
This session is Platform Agnostic; whether you use PAAS, shared hosting, or wield your own hardware, PMs, developers, and clients will leave with new tools in their belt to launch with less agita. We will share some of our challenges and how we overcame them, and hopefully hear from you about how you overcame yours!
6. How we prepare for launch
Goal: Get rid of all the “uh-oh” moments
Method: Launch Team
Stakeholders:
• Project Manager - scheduling, best practices
• Developer - platform knowledge, integration
• Sys Admin - responsibilities, delegation
• Business owner - flawless launch
7. Have a system and tools
Specify common workflow requirements
• Repeatable tasks, delegatable
Project management - Wrike, JIRA, Redmine
Orientation logistics
• Scheduling - calendar, deadlines
• Real-time communication
• Phone, Video Conference, GoToMeeting, IRC
• Training - documentation, Slides, Videos
8. Mapping the terrain
Scoping of responsibilities
• Reduce confusion, set stage
Channels of communication
• Define emergency procedures
• Issue tracking as primary inbox
Staying in touch
• Available, open, and regular
• Proactive
11. What is Site Audit?
Drupal 7 static analysis
• https://drupal.org/project/site_audit
Best practices
Actionable report
Vendor agnostic
• Optional Pantheon specific recommendations
12. What can an audit analyze?
• Drupal caching settings
• Codebase and file size
• Database structure
• Modules, including duplicate / missing
• Non-standard code structures
• Views caching
• Watchdog logs
20. Test Configuration
Simple Drupal 7 site
Apache Bench
• 10,000 requests to home page (5 concurrent)
Warmed cache, cleared watchdog
Comparison
• Bad config, 1 PHP notice and warning in theme
• Good config, no PHP notices or warnings
21. Result? Doubled performance.
Performance Comparison Bad Config Good Config
Load Time (min) 20:52 10:25
Requests per second 7.98 15.99
Time per request (ms) 626.192 312.780
24. Why load test?
Validate response times under peak load
Smoke - operations under normal load
Stress - behavior past peak load
• Spike - short bursts
Capacity - plan for growth
27. When should I load test?
Baseline
Tools
• Xdebug - http://xdebug.org/
• Webgrind - https://github.com/jokkedk/webgrind
• Devel - https://drupal.org/project/devel
• Syslog
• Watchdog
• New Relic - http://newrelic.com/
Incrementally during development
28. Where do I perform load tests?
Live environment
• Bandwidth
Resource limitations
SaaS load testing solutions
29. What to expect during & after
• Benchmark often
• Datapoints
• Aggregate
• Be reasonable
• Numbers should dictate expectations
• Back-end
• Google Analytics
37. MySQL slow log
# Time: 130320 7:30:26
# User@Host: db_user[db_database] @ localhost []
# Query_time: 4.545309 Lock_time: 0.000069 Rows_sent: 219
Rows_examined: 254
SET timestamp=1363779026;
SELECT option_name, option_value FROM wp_options
WHERE autoload = 'yes';
38. Pay attention to watchdog
6652 11/Oct 15:05 warning php Warning: Cannot modify header
information - headers already sent by (output started at /srv/
www/code/includes/common.inc:2700) in drupal_goto() (line
!
6643 11/Oct 14:21 notice php Notice: Trying to get property of
non-object in cap_ui_preprocess_page() (line 27 of /srv/www/code/
sites/all/themes/cap_ui/template.php).
!
6595 11/Oct 13:00 notice php Notice: Unknown: Can not
authenticate to IMAP server: [AUTHENTICATIONFAILED] Invalid
credentials (Failure) (errflg=2) in main() (line of ).