Velocity Conference, Nov 12-14 2015, Day 3

Lightning talks

  • IBM and their voice recognition software
  • A culture of continuous learning
    • Incorrectly cited the source of a picture (Southeast Asia instead of Hawaiians)
    • Tasks to achieve end goals
  • Defining a precise SLA for performance
    • Should put the user first, every decision we make, should all be done in service of the user
    • Problem with racing websites that means you're racing with competition instead of checking how you're measuring up with how your satisfying your customers when they are on your website
    • Referencing Apdex - measuring response time based on a threshold
    • Metric: How long have the customer waited? And what was their behavior as a result from that waiting?
    • Consumer Performance Index
  • Discovering operations expertise
    • How do we design systems to prevent catastrophic failure?
    • This ends up reviewing how we design teams in order to solve how we can prevent catastrophic failure
  • Escaping tabs with progressive (web) apps, Ilya Grigorik
    • mobile apps vs web apps, experience in installing on mobile is slow compared to just going to a web app
    • Progress web app - webpage that upgrades it's capabilities, via ServiceWorker

Polyglot Datastores at Yelp

  • Education
    • docs. Evolve with your code. Denote if it's old or deprecated.
    • lectures (5-40 minutes)
    • a network of experts
      • office hours (good to have a set time)
      • irc or other chat
  • Store evolved over time
    • went over Cassandra, Elasticsearch
    • Elasticsearch - acts as a database and can search things like JSON documents
    • Puppet - general purpose tool. Not so good at healthchecking, dynamic cluster, etc
    • SmartStack - general purpose cluster load balancer, healthchecking.
    • Sensu - Monitoring/alerting via chat, emails, tickets, pages
  • Monitoring - when to ticket
    • MySQL - 10s replication delay for 2 hrs
    • Elasticsearch in prolonged yellow state
    • Cassandra losint local_one
    • Zookeepr losing quorum
    • Don't monitor single hosts
    • Graph everything - robust metrics to dig in
  • Good abstractions
    • Writes and reads
    • Query proxy between service and logic layer to marshal
      • This is similar to how we have hub or how Core is abstracted with lower-level logic hidden and can be swapped/maintained
    • Well defined interfaces to easily test
    • Rapidly iterate and change and not having to tie down developers to code that is tightly coupled

Sidenote and Action

Mobile Continuous Delivery

Discussed workflow and a myriad of tools.

  • PonyDebugger

Measuring the Performance of Single Page Web Applications

  • Boomerang created from open-source project from Philip Tellis at Yahoo. SOASTA uses it
  • Hard navigation vs Soft navigations - page first load, then route from this page, respectively
  • onload potentially not relevant anymore for when user can actually see some content.
  • Traditionally RUM tools don't measure after onload event occurs
  • Browser won't tell you when all resources have been downloaded. How?
  • We care about perceived performance. In some cases, when user can do the next action, when the UI is available for the user to start using it
  • We care about the start event and stop event
  • Start event: when browser starts the process of loading the next page
    • Different events you can use, browser history changing, SPA framework routing events, user click or XHR trigger.
    • window.history can tell us when the URL is changing
  • End event: How do you tell the end when SPA navigation is complete?
    • Could be when networking activity is complete
    • When UI is visually complete above the fold
    • When the user can interact with the page
  • Traditional RUM (Real-User Monitoring) measures up to the onload event
    • When all resources have been fetched
  • Which resources could effect the visual completion of the page?
  • Need to monitor all network connectivity
  • Let's make our own onload event, from waiting for all network activity to complete
    • monitor any XHR requests and proxy it
    • intercept open method
  • By proxying:
    • upside: can monitor start and loading of assets
    • downside: need additional code to support XDomainRequest
  • Mutation Observer
    • listen for DOM change events
    • downside: not supported across all browsers
    • polyfills: to get a mutation observer like callback. Performance implications. Don't recommend, as they will cause performance problems
  • Lifecycle
    • What happens over time? How well does your app behave?
    • Track memory usage
    • DOM length, complexity of the page
    • Number of JavaScript errors
    • Bytes fetched
    • Framerate
  • Specs out there
    • w3C Fetch standard
    • Fetch observer
  • Presentation Slides
  • Questions
    • Tools to analyze it: mPulse and boomCatch. Can then load into Graphite or other graphing tool for analysis
    • Does amount you log end up effecting performance?


  • Review slides again
  • Review tools
  • View film strips and see where in waterfall onload shows
  • Test onload event with filmstrip on our application to see relevance of onload
  • Look at what they are doing in boomerang

Docker Learning Notes

  • Docker client uses Docker daemon to do the heavy lifting in working with Docker containers.
  • Containers are made from Docker images which is an instance of the blueprint of the OS like Ubuntu and possibly the web application and all its necessary packages installed.
  • These containers are stored on a Docker Hub or registry. This is also open-sourced so users can host their own registries.
  • Downloading Docker Toolbox - didn't work, so just working with boot2docker. Was buggy and not running commands.
  • boot2docker
    • Always run $ boot2docker up and export Docker variables before running commands
    • -


  • Quickly testing app in environment similar to DEV/QA/Production with less overhead than a Virtual Machine (VM)
  • Sharing your app+environment with other developers == fast/reliable onboarding