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

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

Performance Enhancing Programming with NodeJS

Tim Caswell

Automated Web Performance Testing before 5pm

Simon Nicoud, Mark Watson, Ian White

Talked about Selenium basics

CSS 3 & HTML 5 - Beyond the Type!

Nicole Sullivan & Nicholas Zakas

Showed some common CSS performance techniques and new CSS 3 features

Performance Measurement and Case Studies at MSN

Paul Roy, Alex Polak

Oh, To Be Single Again - Building a Single Codebase in a Client-server World

Daniel Hunt

NodeJS @ Yahoo

WebPagetest Update

Patrick Meenan - Google

Automating for Success: Production Begins in Development

Damon Edwards, Lee Thompson

Metrics-driven Engineering at Etsy

Kellan Elliot-McCrea

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.
<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>&quot;The object that does everything&quot; 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 &amp; Chef
</code></pre>

<ul>
<li><p>Infochimps is like YQL</p>

<p>&quot;The more you can decouple, the more you can scale&quot;</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>&quot;If you're building something in the Cloud, and not using one of these, you're doing it wrong&quot;</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>&quot;You only automate out of boredom or terror&quot;</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 &amp; 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 &amp; HTML 5 - Beyond the Type!</h2>

<p><em>Nicole Sullivan &amp; 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 &amp; 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 =&gt; .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 &quot;health&quot; with events</li>
<li>Make metrics core to your process</li>
<li>Grep Forums for &quot;metrics&quot; - excessive chatter, etc.</li>
</ul>