Velocity Conference 2011
Netflix in the Cloud:
Adrian Cockcroft
Talked mostly about Amazon cloud and how Netflix is using it. Also covered their architecture and problems they've solved
- Huge use of Amazon
- Store Session data in Memcache
- Every developer uses their own instance for dev
- Cloud is managed by developers, not sysadmins
- Anti-Architecture
- define things you don't want
- constrain the outcome
- check that the constraints are being met
- define the space the things will inhabit - gives engineers freedom but constraints to work within
- Service Oriented Architecture
- "The object that does everything" Anti-Pattern
- solution to problem was using faceted types
- basic typeonly holds an id, and can be convereted into any specific type
- create a facet, which is a context to work with for an object
- Different facets expose different data/features
- Lets you restrict/optimize the useage of the content for specific use-cases
- Movie for interacting with content
- Data for streaming or displaying content
- App Dynamics
- Measuring performance
How to Scale Dirty and Influence People - Infochimps
Philip Kromer, Dennis Yang
Talked mostly about how they make their APIs work concurrently at scale using Goliath & Chef
Infochimps is like YQL
"The more you can decouple, the more you can scale"
- Lots of data sets you can query, govt. data, public data etc.
-
- Concurrent code
- Code In-Order
- Avoid Closures
Chef/Puppet
"If you're building something in the Cloud, and not using one of these, you're doing it wrong"
- Git for Machines - versioned machine states
- Similar to igor roles
Automation
- Do it manually first
"You only automate out of boredom or terror"
-
- NodeJS Daemon for gather stats
- Created by Etsy
- Uses Graphite for graphing
- Flume
- Log aggregation
- Radical Decoupling
- No Meetings
- Integration Tests, not Unit Tests
- Unbundle Reliability Glue from Function
- Distributed but fits your brain
Performance Enhancing Programming with NodeJS
Tim Caswell
- Server Side JS
Automated Web Performance Testing before 5pm
Simon Nicoud, Mark Watson, Ian White
Talked about Selenium basics
- Selenium
- Automated tests
- HAR (HTTP Archive)
- Simple format (JSON/JSONP)
- Tons of data
- Easily extensible
- Becoming the standard
- HAR Viewer
-
Webapp that integrates automated testing and HAR files
- Open Source
- Guice
- Sitebricks
- MongoDB
- Jetty
- Open Source
- Metrics to gather
- page load time
- dom loading/interactive/complete, browser 1st render
- per item level timing
- headers, status codes, and content
- Gathering metrics
- Route traffic through a proxy and capture in proxy
- BrowserMob Proxy & Fiddler
- work with any browser that lets you set a proxy
- blacklist/whitelist urls
- url rewrites
- make sure specific urls are visited
- header changes
- simulate limited bandwidth
- Route traffic through a proxy and capture in proxy
CSS 3 & HTML 5 - Beyond the Type!
Nicole Sullivan & Nicholas Zakas
Showed some common CSS performance techniques and new CSS 3 features
- Happy medium of features & performance
- Using less-featureful fallbacks for non CSS 3 browsers
- Use CSS 3 background gradient, solid color otherwise, etc.
- Don't remove big features - like commenting, if it's for IE6
- Using less-featureful fallbacks for non CSS 3 browsers
- Optimizing and fixing degraded performance
- It's usually not just one bad selector, have to make sure the CSS is architected correctly
- Reducing selectors - object oriented CSS
- Optimizing CSS
- Selectors are read right to left
- KISS - div.className => .className if possible
- CSS Lint
Performance Measurement and Case Studies at MSN
Paul Roy, Alex Polak
Measuring Performance and it's impact
Metrics
Good metrics drive good decisions, bad metrics drive bad decisions
- Rending time for areas of greatest importance
- Response time to user interactions
Performance Measurement Systems
- A/B testing
Oh, To Be Single Again - Building a Single Codebase in a Client-server World
Daniel Hunt
NodeJS @ Yahoo
- New Mail is built so each component/module is handled by Node
- Same JS Objects/Classes are used if server renders or if client renders
- Server renders markup
- Client will render container, and request markup from server
WebPagetest Update
Patrick Meenan - Google
- Private install
- Bulk testing
Automating for Success: Production Begins in Development
Damon Edwards, Lee Thompson
- Business Apps requiring same things consumer sites are using
- Cloud, etc.
- DevOps
- Parity between Dev and Prod
- Test data builder in dev for each developer
- Same configuration used between dev and prod
- Config is code, should be managed and with code
- Config should be released with the code, one in the same
- no yinst config settings, keep it in config files :)
- Manage small modular code - less dependency, can release easier
- Crowd Test
- A/B testing
- Feedback back to developers
Metrics-driven Engineering at Etsy
Kellan Elliot-McCrea
- Have the data, so you can make decisions based on data
- Have access to the data, Etsy makes it all public, no passwords
- Make it easy for Engineers to track data and they will
- Open Source Tools
- Cacti
- Ganglia
- cluster oriented
- huge community contributed recipes
- Graphite
- flexible collection and display
- per metrics buckets
- single instance
- Splunk
- Nagios
- Starts with simple - Logging
- Logster turns Logs into Etsy
- StatsD - runs on NodeJS
- log events + timing metrics
- Use post-mortems as an opportunity to decide what data you should know in the future that you didn't earlier
- Correlate your application "health" with events
- Make metrics core to your process
- Grep Forums for "metrics" - excessive chatter, etc.
Velocity Conference 2011
========================
---
## Netflix in the Cloud:
*Adrian Cockcroft*
Talked mostly about Amazon cloud and how Netflix is using it. Also covered their architecture and problems they've solved
+ Huge use of Amazon
+ Store Session data in Memcache
+ Every developer uses their own instance for dev
+ Cloud is managed by developers, not sysadmins
+ Anti-Architecture
+ define things you don't want
+ constrain the outcome
+ check that the constraints are being met
+ define the space the things will inhabit - gives engineers freedom but constraints to work within
+ Service Oriented Architecture
+ "The object that does everything" Anti-Pattern
+ solution to problem was using faceted types
+ basic typeonly holds an id, and can be convereted into any specific type
+ create a facet, which is a context to work with for an object
+ Different facets expose different data/features
+ Lets you restrict/optimize the useage of the content for specific use-cases
+ Movie for interacting with content
+ Data for streaming or displaying content
+ [App Dynamics](http://www.appdynamics.com/)
+ Measuring performance
## How to Scale Dirty and Influence People - [Infochimps](http://www.infochimps.com/)
*Philip Kromer, Dennis Yang*
Talked mostly about how they make their APIs work concurrently at scale using Goliath & Chef
+ Infochimps is like YQL
"The more you can decouple, the more you can scale"
+ Lots of data sets you can query, govt. data, public data etc.
+ [Goliath](http://postrank-labs.github.com/goliath/)
+ Concurrent code
+ Code In-Order
+ Avoid Closures
+ Chef/Puppet
"If you're building something in the Cloud, and not using one of these, you're doing it wrong"
+ Git for Machines - versioned machine states
+ Similar to igor roles
+ Automation
+ Do it manually first
"You only automate out of boredom or terror"
+ [StatsD](http://codeascraft.etsy.com/2011/02/15/measure-anything-measure-everything/)
+ NodeJS Daemon for gather stats
+ Created by Etsy
+ Uses [Graphite](http://graphite.wikidot.com/) for graphing
+ [Flume](http://archive.cloudera.com/cdh/3/flume-0.9.1+1/UserGuide.html)
+ Log aggregation
+ *Radical* Decoupling
+ No Meetings
+ Integration Tests, not Unit Tests
+ Unbundle Reliability Glue from Function
+ Distributed but fits your brain
## Performance Enhancing Programming with NodeJS
*Tim Caswell*
+ Server Side JS
## Automated Web Performance Testing before 5pm
*Simon Nicoud, Mark Watson, Ian White*
Talked about Selenium basics
+ Selenium
+ Automated tests
+ HAR (HTTP Archive)
+ Simple format (JSON/JSONP)
+ Tons of data
+ Easily extensible
+ Becoming the standard
+ [HAR Viewer](http://www.softwareishard.com/har/viewer/)
+ [Harpoon](http://labs.webmetrics.com:8080/)
Webapp that integrates automated testing and HAR files
+ Open Source
+ Guice
+ Sitebricks
+ MongoDB
+ Jetty
+ Metrics to gather
+ page load time
+ dom loading/interactive/complete, browser 1st render
+ per item level timing
+ headers, status codes, and content
+ Gathering metrics
+ Route traffic through a proxy and capture in proxy
+ BrowserMob Proxy & Fiddler
+ work with any browser that lets you set a proxy
+ blacklist/whitelist urls
+ url rewrites
+ make sure specific urls are visited
+ header changes
+ simulate limited bandwidth
## CSS 3 & HTML 5 - Beyond the Type!
*Nicole Sullivan & Nicholas Zakas*
Showed some common CSS performance techniques and new CSS 3 features
+ Happy medium of features & performance
+ Using less-featureful fallbacks for non CSS 3 browsers
+ Use CSS 3 background gradient, solid color otherwise, etc.
+ Don't remove big features - like commenting, if it's for IE6
+ Optimizing and fixing degraded performance
+ It's usually not just one bad selector, have to make sure the CSS is architected correctly
+ Reducing selectors - [object oriented CSS](https://github.com/stubbornella/oocss)
+ Optimizing CSS
+ Selectors are read right to left
+ KISS - div.className => .className if possible
+ [CSS Lint](http://csslint.net/)
## Performance Measurement and Case Studies at MSN
*Paul Roy, Alex Polak*
+ Measuring Performance and it's impact
+ Metrics
Good metrics drive good decisions, bad metrics drive bad decisions
+ Rending time for areas of greatest importance
+ Response time to user interactions
+ Performance Measurement Systems
+ A/B testing
## Oh, To Be Single Again - Building a Single Codebase in a Client-server World
*Daniel Hunt*
NodeJS @ Yahoo
+ New Mail is built so each component/module is handled by Node
+ Same JS Objects/Classes are used if server renders or if client renders
+ Server renders markup
+ Client will render container, and request markup from server
## [WebPagetest](http://www.webpagetest.org/) Update
*Patrick Meenan - Google*
+ Private install
+ Bulk testing
## Automating for Success: Production Begins in Development
*Damon Edwards, Lee Thompson*
+ Business Apps requiring same things consumer sites are using
+ Cloud, etc.
+ DevOps
+ Parity between Dev and Prod
+ Test data builder in dev for each developer
+ Same configuration used between dev and prod
+ Config is code, should be managed and with code
+ Config should be released with the code, one in the same
+ no yinst config settings, keep it in config files :)
+ Manage small modular code - less dependency, can release easier
+ Crowd Test
+ A/B testing
+ Feedback back to developers
## Metrics-driven Engineering at Etsy
*Kellan Elliot-McCrea*
+ Have the data, so you can make decisions based on data
+ Have access to the data, Etsy makes it all public, no passwords
+ Make it easy for Engineers to track data and they will
+ Open Source Tools
+ Cacti
+ Ganglia
+ cluster oriented
+ huge community contributed recipes
+ Graphite
+ flexible collection and display
+ per metrics buckets
+ single instance
+ Splunk
+ Nagios
+ Starts with simple - Logging
+ [Logster](https://github.com/etsy/logster) turns Logs into Etsy
+ [StatsD](https://github.com/etsy/statsd) - runs on NodeJS
+ log events + timing metrics
+ Use post-mortems as an opportunity to decide what data you should know in the future that you didn't earlier
+ Correlate your application "health" with events
+ Make metrics core to your process
+ Grep Forums for "metrics" - excessive chatter, etc.
========================
---
## Netflix in the Cloud:
*Adrian Cockcroft*
Talked mostly about Amazon cloud and how Netflix is using it. Also covered their architecture and problems they've solved
+ Huge use of Amazon
+ Store Session data in Memcache
+ Every developer uses their own instance for dev
+ Cloud is managed by developers, not sysadmins
+ Anti-Architecture
+ define things you don't want
+ constrain the outcome
+ check that the constraints are being met
+ define the space the things will inhabit - gives engineers freedom but constraints to work within
+ Service Oriented Architecture
+ "The object that does everything" Anti-Pattern
+ solution to problem was using faceted types
+ basic typeonly holds an id, and can be convereted into any specific type
+ create a facet, which is a context to work with for an object
+ Different facets expose different data/features
+ Lets you restrict/optimize the useage of the content for specific use-cases
+ Movie for interacting with content
+ Data for streaming or displaying content
+ [App Dynamics](http://www.appdynamics.com/)
+ Measuring performance
## How to Scale Dirty and Influence People - [Infochimps](http://www.infochimps.com/)
*Philip Kromer, Dennis Yang*
Talked mostly about how they make their APIs work concurrently at scale using Goliath & Chef
+ Infochimps is like YQL
"The more you can decouple, the more you can scale"
+ Lots of data sets you can query, govt. data, public data etc.
+ [Goliath](http://postrank-labs.github.com/goliath/)
+ Concurrent code
+ Code In-Order
+ Avoid Closures
+ Chef/Puppet
"If you're building something in the Cloud, and not using one of these, you're doing it wrong"
+ Git for Machines - versioned machine states
+ Similar to igor roles
+ Automation
+ Do it manually first
"You only automate out of boredom or terror"
+ [StatsD](http://codeascraft.etsy.com/2011/02/15/measure-anything-measure-everything/)
+ NodeJS Daemon for gather stats
+ Created by Etsy
+ Uses [Graphite](http://graphite.wikidot.com/) for graphing
+ [Flume](http://archive.cloudera.com/cdh/3/flume-0.9.1+1/UserGuide.html)
+ Log aggregation
+ *Radical* Decoupling
+ No Meetings
+ Integration Tests, not Unit Tests
+ Unbundle Reliability Glue from Function
+ Distributed but fits your brain
## Performance Enhancing Programming with NodeJS
*Tim Caswell*
+ Server Side JS
## Automated Web Performance Testing before 5pm
*Simon Nicoud, Mark Watson, Ian White*
Talked about Selenium basics
+ Selenium
+ Automated tests
+ HAR (HTTP Archive)
+ Simple format (JSON/JSONP)
+ Tons of data
+ Easily extensible
+ Becoming the standard
+ [HAR Viewer](http://www.softwareishard.com/har/viewer/)
+ [Harpoon](http://labs.webmetrics.com:8080/)
Webapp that integrates automated testing and HAR files
+ Open Source
+ Guice
+ Sitebricks
+ MongoDB
+ Jetty
+ Metrics to gather
+ page load time
+ dom loading/interactive/complete, browser 1st render
+ per item level timing
+ headers, status codes, and content
+ Gathering metrics
+ Route traffic through a proxy and capture in proxy
+ BrowserMob Proxy & Fiddler
+ work with any browser that lets you set a proxy
+ blacklist/whitelist urls
+ url rewrites
+ make sure specific urls are visited
+ header changes
+ simulate limited bandwidth
## CSS 3 & HTML 5 - Beyond the Type!
*Nicole Sullivan & Nicholas Zakas*
Showed some common CSS performance techniques and new CSS 3 features
+ Happy medium of features & performance
+ Using less-featureful fallbacks for non CSS 3 browsers
+ Use CSS 3 background gradient, solid color otherwise, etc.
+ Don't remove big features - like commenting, if it's for IE6
+ Optimizing and fixing degraded performance
+ It's usually not just one bad selector, have to make sure the CSS is architected correctly
+ Reducing selectors - [object oriented CSS](https://github.com/stubbornella/oocss)
+ Optimizing CSS
+ Selectors are read right to left
+ KISS - div.className => .className if possible
+ [CSS Lint](http://csslint.net/)
## Performance Measurement and Case Studies at MSN
*Paul Roy, Alex Polak*
+ Measuring Performance and it's impact
+ Metrics
Good metrics drive good decisions, bad metrics drive bad decisions
+ Rending time for areas of greatest importance
+ Response time to user interactions
+ Performance Measurement Systems
+ A/B testing
## Oh, To Be Single Again - Building a Single Codebase in a Client-server World
*Daniel Hunt*
NodeJS @ Yahoo
+ New Mail is built so each component/module is handled by Node
+ Same JS Objects/Classes are used if server renders or if client renders
+ Server renders markup
+ Client will render container, and request markup from server
## [WebPagetest](http://www.webpagetest.org/) Update
*Patrick Meenan - Google*
+ Private install
+ Bulk testing
## Automating for Success: Production Begins in Development
*Damon Edwards, Lee Thompson*
+ Business Apps requiring same things consumer sites are using
+ Cloud, etc.
+ DevOps
+ Parity between Dev and Prod
+ Test data builder in dev for each developer
+ Same configuration used between dev and prod
+ Config is code, should be managed and with code
+ Config should be released with the code, one in the same
+ no yinst config settings, keep it in config files :)
+ Manage small modular code - less dependency, can release easier
+ Crowd Test
+ A/B testing
+ Feedback back to developers
## Metrics-driven Engineering at Etsy
*Kellan Elliot-McCrea*
+ Have the data, so you can make decisions based on data
+ Have access to the data, Etsy makes it all public, no passwords
+ Make it easy for Engineers to track data and they will
+ Open Source Tools
+ Cacti
+ Ganglia
+ cluster oriented
+ huge community contributed recipes
+ Graphite
+ flexible collection and display
+ per metrics buckets
+ single instance
+ Splunk
+ Nagios
+ Starts with simple - Logging
+ [Logster](https://github.com/etsy/logster) turns Logs into Etsy
+ [StatsD](https://github.com/etsy/statsd) - runs on NodeJS
+ log events + timing metrics
+ Use post-mortems as an opportunity to decide what data you should know in the future that you didn't earlier
+ Correlate your application "health" with events
+ Make metrics core to your process
+ Grep Forums for "metrics" - excessive chatter, etc.
<h1>Velocity Conference 2011</h1>
<hr />
<h2>Netflix in the Cloud:</h2>
<p><em>Adrian Cockcroft</em></p>
<pre><code>Talked mostly about Amazon cloud and how Netflix is using it. Also covered their architecture and problems they've solved
</code></pre>
<ul>
<li>Huge use of Amazon
<ul>
<li>Store Session data in Memcache</li>
<li>Every developer uses their own instance for dev</li>
<li>Cloud is managed by developers, not sysadmins</li>
</ul></li>
<li>Anti-Architecture
<ul>
<li>define things you don't want</li>
<li>constrain the outcome</li>
<li>check that the constraints are being met</li>
<li>define the space the things will inhabit - gives engineers freedom but constraints to work within</li>
</ul></li>
<li>Service Oriented Architecture</li>
<li>"The object that does everything" Anti-Pattern
<ul>
<li>solution to problem was using faceted types</li>
<li>basic typeonly holds an id, and can be convereted into any specific type</li>
<li>create a facet, which is a context to work with for an object
<ul>
<li>Different facets expose different data/features</li>
<li>Lets you restrict/optimize the useage of the content for specific use-cases</li>
<li>Movie for interacting with content</li>
<li>Data for streaming or displaying content</li>
</ul></li>
</ul></li>
<li><a href="http://www.appdynamics.com/">App Dynamics</a>
<ul>
<li>Measuring performance</li>
</ul></li>
</ul>
<h2>How to Scale Dirty and Influence People - <a href="http://www.infochimps.com/">Infochimps</a></h2>
<p><em>Philip Kromer, Dennis Yang</em></p>
<pre><code>Talked mostly about how they make their APIs work concurrently at scale using Goliath & Chef
</code></pre>
<ul>
<li><p>Infochimps is like YQL</p>
<p>"The more you can decouple, the more you can scale"</p>
<ul>
<li>Lots of data sets you can query, govt. data, public data etc.</li>
</ul></li>
<li><p><a href="http://postrank-labs.github.com/goliath/">Goliath</a></p>
<ul>
<li>Concurrent code</li>
<li>Code In-Order</li>
<li>Avoid Closures</li>
</ul></li>
<li><p>Chef/Puppet</p>
<p>"If you're building something in the Cloud, and not using one of these, you're doing it wrong"</p>
<ul>
<li>Git for Machines - versioned machine states</li>
<li>Similar to igor roles</li>
</ul></li>
<li><p>Automation</p>
<ul>
<li>Do it manually first</li>
</ul>
<p>"You only automate out of boredom or terror"</p></li>
<li><p><a href="http://codeascraft.etsy.com/2011/02/15/measure-anything-measure-everything/">StatsD</a></p>
<ul>
<li>NodeJS Daemon for gather stats</li>
<li>Created by Etsy</li>
<li>Uses <a href="http://graphite.wikidot.com/">Graphite</a> for graphing</li>
</ul></li>
<li><a href="http://archive.cloudera.com/cdh/3/flume-0.9.1+1/UserGuide.html">Flume</a>
<ul>
<li>Log aggregation</li>
</ul></li>
<li><em>Radical</em> Decoupling
<ul>
<li>No Meetings</li>
<li>Integration Tests, not Unit Tests</li>
<li>Unbundle Reliability Glue from Function</li>
<li>Distributed but fits your brain</li>
</ul></li>
</ul>
<h2>Performance Enhancing Programming with NodeJS</h2>
<p><em>Tim Caswell</em></p>
<ul>
<li>Server Side JS</li>
</ul>
<h2>Automated Web Performance Testing before 5pm</h2>
<p><em>Simon Nicoud, Mark Watson, Ian White</em></p>
<pre><code>Talked about Selenium basics
</code></pre>
<ul>
<li>Selenium
<ul>
<li>Automated tests</li>
</ul></li>
<li>HAR (HTTP Archive)
<ul>
<li>Simple format (JSON/JSONP)</li>
<li>Tons of data</li>
<li>Easily extensible</li>
<li>Becoming the standard</li>
<li><a href="http://www.softwareishard.com/har/viewer/">HAR Viewer</a></li>
</ul></li>
<li><p><a href="http://labs.webmetrics.com:8080/">Harpoon</a></p>
<p>Webapp that integrates automated testing and HAR files</p>
<ul>
<li>Open Source
<ul>
<li>Guice</li>
<li>Sitebricks</li>
<li>MongoDB</li>
<li>Jetty</li>
</ul></li>
</ul></li>
<li>Metrics to gather
<ul>
<li>page load time</li>
<li>dom loading/interactive/complete, browser 1st render</li>
<li>per item level timing</li>
<li>headers, status codes, and content</li>
</ul></li>
<li>Gathering metrics
<ul>
<li>Route traffic through a proxy and capture in proxy
<ul>
<li>BrowserMob Proxy & Fiddler</li>
<li>work with any browser that lets you set a proxy</li>
<li>blacklist/whitelist urls</li>
<li>url rewrites</li>
<li>make sure specific urls are visited</li>
<li>header changes</li>
<li>simulate limited bandwidth</li>
</ul></li>
</ul></li>
</ul>
<h2>CSS 3 & HTML 5 - Beyond the Type!</h2>
<p><em>Nicole Sullivan & Nicholas Zakas</em></p>
<pre><code>Showed some common CSS performance techniques and new CSS 3 features
</code></pre>
<ul>
<li>Happy medium of features & performance
<ul>
<li>Using less-featureful fallbacks for non CSS 3 browsers
<ul>
<li>Use CSS 3 background gradient, solid color otherwise, etc.</li>
</ul></li>
<li>Don't remove big features - like commenting, if it's for IE6</li>
</ul></li>
<li>Optimizing and fixing degraded performance
<ul>
<li>It's usually not just one bad selector, have to make sure the CSS is architected correctly</li>
</ul></li>
<li>Reducing selectors - <a href="https://github.com/stubbornella/oocss">object oriented CSS</a></li>
<li>Optimizing CSS
<ul>
<li>Selectors are read right to left</li>
<li>KISS - div.className => .className if possible</li>
</ul></li>
<li><a href="http://csslint.net/">CSS Lint</a></li>
</ul>
<h2>Performance Measurement and Case Studies at MSN</h2>
<p><em>Paul Roy, Alex Polak</em></p>
<ul>
<li><p>Measuring Performance and it's impact</p>
<ul>
<li><p>Metrics</p>
<p>Good metrics drive good decisions, bad metrics drive bad decisions</p>
<ul>
<li>Rending time for areas of greatest importance</li>
<li>Response time to user interactions</li>
</ul></li>
<li><p>Performance Measurement Systems</p></li>
<li>A/B testing</li>
</ul></li>
</ul>
<h2>Oh, To Be Single Again - Building a Single Codebase in a Client-server World</h2>
<p><em>Daniel Hunt</em></p>
<pre><code>NodeJS @ Yahoo
</code></pre>
<ul>
<li>New Mail is built so each component/module is handled by Node</li>
<li>Same JS Objects/Classes are used if server renders or if client renders
<ul>
<li>Server renders markup</li>
<li>Client will render container, and request markup from server</li>
</ul></li>
</ul>
<h2><a href="http://www.webpagetest.org/">WebPagetest</a> Update</h2>
<p><em>Patrick Meenan - Google</em></p>
<ul>
<li>Private install</li>
<li>Bulk testing</li>
</ul>
<h2>Automating for Success: Production Begins in Development</h2>
<p><em>Damon Edwards, Lee Thompson</em></p>
<ul>
<li>Business Apps requiring same things consumer sites are using
<ul>
<li>Cloud, etc.</li>
</ul></li>
<li>DevOps</li>
<li>Parity between Dev and Prod
<ul>
<li>Test data builder in dev for each developer</li>
<li>Same configuration used between dev and prod</li>
<li>Config is code, should be managed and with code</li>
<li>Config should be released with the code, one in the same
<ul>
<li>no yinst config settings, keep it in config files :)</li>
</ul></li>
<li>Manage small modular code - less dependency, can release easier</li>
<li>Crowd Test
<ul>
<li>A/B testing</li>
<li>Feedback back to developers</li>
</ul></li>
</ul></li>
</ul>
<h2>Metrics-driven Engineering at Etsy</h2>
<p><em>Kellan Elliot-McCrea</em></p>
<ul>
<li>Have the data, so you can make decisions based on data</li>
<li>Have access to the data, Etsy makes it all public, no passwords</li>
<li>Make it easy for Engineers to track data and they will</li>
<li>Open Source Tools
<ul>
<li>Cacti</li>
<li>Ganglia
<ul>
<li>cluster oriented</li>
<li>huge community contributed recipes</li>
</ul></li>
<li>Graphite
<ul>
<li>flexible collection and display</li>
<li>per metrics buckets</li>
<li>single instance</li>
</ul></li>
<li>Splunk</li>
<li>Nagios</li>
</ul></li>
<li>Starts with simple - Logging</li>
<li><a href="https://github.com/etsy/logster">Logster</a> turns Logs into Etsy</li>
<li><a href="https://github.com/etsy/statsd">StatsD</a> - runs on NodeJS
<ul>
<li>log events + timing metrics</li>
</ul></li>
<li>Use post-mortems as an opportunity to decide what data you should know in the future that you didn't earlier</li>
<li>Correlate your application "health" with events</li>
<li>Make metrics core to your process</li>
<li>Grep Forums for "metrics" - excessive chatter, etc.</li>
</ul>
<hr />
<h2>Netflix in the Cloud:</h2>
<p><em>Adrian Cockcroft</em></p>
<pre><code>Talked mostly about Amazon cloud and how Netflix is using it. Also covered their architecture and problems they've solved
</code></pre>
<ul>
<li>Huge use of Amazon
<ul>
<li>Store Session data in Memcache</li>
<li>Every developer uses their own instance for dev</li>
<li>Cloud is managed by developers, not sysadmins</li>
</ul></li>
<li>Anti-Architecture
<ul>
<li>define things you don't want</li>
<li>constrain the outcome</li>
<li>check that the constraints are being met</li>
<li>define the space the things will inhabit - gives engineers freedom but constraints to work within</li>
</ul></li>
<li>Service Oriented Architecture</li>
<li>"The object that does everything" Anti-Pattern
<ul>
<li>solution to problem was using faceted types</li>
<li>basic typeonly holds an id, and can be convereted into any specific type</li>
<li>create a facet, which is a context to work with for an object
<ul>
<li>Different facets expose different data/features</li>
<li>Lets you restrict/optimize the useage of the content for specific use-cases</li>
<li>Movie for interacting with content</li>
<li>Data for streaming or displaying content</li>
</ul></li>
</ul></li>
<li><a href="http://www.appdynamics.com/">App Dynamics</a>
<ul>
<li>Measuring performance</li>
</ul></li>
</ul>
<h2>How to Scale Dirty and Influence People - <a href="http://www.infochimps.com/">Infochimps</a></h2>
<p><em>Philip Kromer, Dennis Yang</em></p>
<pre><code>Talked mostly about how they make their APIs work concurrently at scale using Goliath & Chef
</code></pre>
<ul>
<li><p>Infochimps is like YQL</p>
<p>"The more you can decouple, the more you can scale"</p>
<ul>
<li>Lots of data sets you can query, govt. data, public data etc.</li>
</ul></li>
<li><p><a href="http://postrank-labs.github.com/goliath/">Goliath</a></p>
<ul>
<li>Concurrent code</li>
<li>Code In-Order</li>
<li>Avoid Closures</li>
</ul></li>
<li><p>Chef/Puppet</p>
<p>"If you're building something in the Cloud, and not using one of these, you're doing it wrong"</p>
<ul>
<li>Git for Machines - versioned machine states</li>
<li>Similar to igor roles</li>
</ul></li>
<li><p>Automation</p>
<ul>
<li>Do it manually first</li>
</ul>
<p>"You only automate out of boredom or terror"</p></li>
<li><p><a href="http://codeascraft.etsy.com/2011/02/15/measure-anything-measure-everything/">StatsD</a></p>
<ul>
<li>NodeJS Daemon for gather stats</li>
<li>Created by Etsy</li>
<li>Uses <a href="http://graphite.wikidot.com/">Graphite</a> for graphing</li>
</ul></li>
<li><a href="http://archive.cloudera.com/cdh/3/flume-0.9.1+1/UserGuide.html">Flume</a>
<ul>
<li>Log aggregation</li>
</ul></li>
<li><em>Radical</em> Decoupling
<ul>
<li>No Meetings</li>
<li>Integration Tests, not Unit Tests</li>
<li>Unbundle Reliability Glue from Function</li>
<li>Distributed but fits your brain</li>
</ul></li>
</ul>
<h2>Performance Enhancing Programming with NodeJS</h2>
<p><em>Tim Caswell</em></p>
<ul>
<li>Server Side JS</li>
</ul>
<h2>Automated Web Performance Testing before 5pm</h2>
<p><em>Simon Nicoud, Mark Watson, Ian White</em></p>
<pre><code>Talked about Selenium basics
</code></pre>
<ul>
<li>Selenium
<ul>
<li>Automated tests</li>
</ul></li>
<li>HAR (HTTP Archive)
<ul>
<li>Simple format (JSON/JSONP)</li>
<li>Tons of data</li>
<li>Easily extensible</li>
<li>Becoming the standard</li>
<li><a href="http://www.softwareishard.com/har/viewer/">HAR Viewer</a></li>
</ul></li>
<li><p><a href="http://labs.webmetrics.com:8080/">Harpoon</a></p>
<p>Webapp that integrates automated testing and HAR files</p>
<ul>
<li>Open Source
<ul>
<li>Guice</li>
<li>Sitebricks</li>
<li>MongoDB</li>
<li>Jetty</li>
</ul></li>
</ul></li>
<li>Metrics to gather
<ul>
<li>page load time</li>
<li>dom loading/interactive/complete, browser 1st render</li>
<li>per item level timing</li>
<li>headers, status codes, and content</li>
</ul></li>
<li>Gathering metrics
<ul>
<li>Route traffic through a proxy and capture in proxy
<ul>
<li>BrowserMob Proxy & Fiddler</li>
<li>work with any browser that lets you set a proxy</li>
<li>blacklist/whitelist urls</li>
<li>url rewrites</li>
<li>make sure specific urls are visited</li>
<li>header changes</li>
<li>simulate limited bandwidth</li>
</ul></li>
</ul></li>
</ul>
<h2>CSS 3 & HTML 5 - Beyond the Type!</h2>
<p><em>Nicole Sullivan & Nicholas Zakas</em></p>
<pre><code>Showed some common CSS performance techniques and new CSS 3 features
</code></pre>
<ul>
<li>Happy medium of features & performance
<ul>
<li>Using less-featureful fallbacks for non CSS 3 browsers
<ul>
<li>Use CSS 3 background gradient, solid color otherwise, etc.</li>
</ul></li>
<li>Don't remove big features - like commenting, if it's for IE6</li>
</ul></li>
<li>Optimizing and fixing degraded performance
<ul>
<li>It's usually not just one bad selector, have to make sure the CSS is architected correctly</li>
</ul></li>
<li>Reducing selectors - <a href="https://github.com/stubbornella/oocss">object oriented CSS</a></li>
<li>Optimizing CSS
<ul>
<li>Selectors are read right to left</li>
<li>KISS - div.className => .className if possible</li>
</ul></li>
<li><a href="http://csslint.net/">CSS Lint</a></li>
</ul>
<h2>Performance Measurement and Case Studies at MSN</h2>
<p><em>Paul Roy, Alex Polak</em></p>
<ul>
<li><p>Measuring Performance and it's impact</p>
<ul>
<li><p>Metrics</p>
<p>Good metrics drive good decisions, bad metrics drive bad decisions</p>
<ul>
<li>Rending time for areas of greatest importance</li>
<li>Response time to user interactions</li>
</ul></li>
<li><p>Performance Measurement Systems</p></li>
<li>A/B testing</li>
</ul></li>
</ul>
<h2>Oh, To Be Single Again - Building a Single Codebase in a Client-server World</h2>
<p><em>Daniel Hunt</em></p>
<pre><code>NodeJS @ Yahoo
</code></pre>
<ul>
<li>New Mail is built so each component/module is handled by Node</li>
<li>Same JS Objects/Classes are used if server renders or if client renders
<ul>
<li>Server renders markup</li>
<li>Client will render container, and request markup from server</li>
</ul></li>
</ul>
<h2><a href="http://www.webpagetest.org/">WebPagetest</a> Update</h2>
<p><em>Patrick Meenan - Google</em></p>
<ul>
<li>Private install</li>
<li>Bulk testing</li>
</ul>
<h2>Automating for Success: Production Begins in Development</h2>
<p><em>Damon Edwards, Lee Thompson</em></p>
<ul>
<li>Business Apps requiring same things consumer sites are using
<ul>
<li>Cloud, etc.</li>
</ul></li>
<li>DevOps</li>
<li>Parity between Dev and Prod
<ul>
<li>Test data builder in dev for each developer</li>
<li>Same configuration used between dev and prod</li>
<li>Config is code, should be managed and with code</li>
<li>Config should be released with the code, one in the same
<ul>
<li>no yinst config settings, keep it in config files :)</li>
</ul></li>
<li>Manage small modular code - less dependency, can release easier</li>
<li>Crowd Test
<ul>
<li>A/B testing</li>
<li>Feedback back to developers</li>
</ul></li>
</ul></li>
</ul>
<h2>Metrics-driven Engineering at Etsy</h2>
<p><em>Kellan Elliot-McCrea</em></p>
<ul>
<li>Have the data, so you can make decisions based on data</li>
<li>Have access to the data, Etsy makes it all public, no passwords</li>
<li>Make it easy for Engineers to track data and they will</li>
<li>Open Source Tools
<ul>
<li>Cacti</li>
<li>Ganglia
<ul>
<li>cluster oriented</li>
<li>huge community contributed recipes</li>
</ul></li>
<li>Graphite
<ul>
<li>flexible collection and display</li>
<li>per metrics buckets</li>
<li>single instance</li>
</ul></li>
<li>Splunk</li>
<li>Nagios</li>
</ul></li>
<li>Starts with simple - Logging</li>
<li><a href="https://github.com/etsy/logster">Logster</a> turns Logs into Etsy</li>
<li><a href="https://github.com/etsy/statsd">StatsD</a> - runs on NodeJS
<ul>
<li>log events + timing metrics</li>
</ul></li>
<li>Use post-mortems as an opportunity to decide what data you should know in the future that you didn't earlier</li>
<li>Correlate your application "health" with events</li>
<li>Make metrics core to your process</li>
<li>Grep Forums for "metrics" - excessive chatter, etc.</li>
</ul>