How Heroku Uses Heroku To Build Heroku

by Craig Kerstiens

What is Heroku?

  • Platform as a Service (PaaS)
  • focuses on developer productivity
  • 4000 heroku apps
  • 500+ releases a day
  • 200+ deploys a day
  • 105 public github repos
  • 85 people across 21 teams
  • a cloud unix

Philosophies

  • Do 1 thing and do it well
  • Run and forget
  • Defined Contract/API
  • Developer Environments
  • Environment Parity

Do 1 thing and do it well

  • Small functional apps

  • KISSMetrics Data Loader

    • Open DB connection
    • Run query
    • Post data
  • Others

    • OAuth
    • Vault
    • API
    • Core

Run and forget

  • Start an app
  • Let them run
  • Forget about them
  • Alert me when things break

Sample standing up an app

git clone git://github.com/opencomparison/opencomparison.git
heroku create -s cedar
git push heroku master

Environmental Parity

Dev and staging and production should be identical

DEFAULT_FROM_EMAIL = os.environ.get('DEFAULT_FROM_EMAIL', 'pydanny <pydanny@cartwheelweb.com>')
AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')

More philosophies in use by Heroku

  • ownership
  • productivity
  • agility

Specifics

  • “Let engineers be engineers”
  • You choose the tools to get the job done, you support the API for others, you own the features to make users happier, you ensure it works, you carry the pager
  • Broad focus around quality, quality comes from solid engineering, give time to engineers, get stuff done.
  • Iterate fast and often, a failed attempt is a successful experiment, culture around seeing/doing over talking
  • Github issues alone doesn’t fix communication

Focus on Quality

  • Make good art
  • Hire for quality and culture
  • Quality doesn’t work with deadlines