Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Enabling Experimentation


Published on

The talk that Nick, Paul and myself gave at the first Forward developer day.

  • Be the first to comment

  • Be the first to like this

Enabling Experimentation

  1. 1. Embracing Experimentation <ul><li>Enabling and exploiting a culture of experimentation within Energy </li></ul>24 Sept 2010
  2. 2. Why is it Important? <ul><li>Not experimenting means you’re not learning </li></ul><ul><li>Don’t know what you don’t know </li></ul><ul><li>Mediocrity </li></ul><ul><li>Stifle innovation and competitiveness </li></ul><ul><li>Only way to achieve significant improvements </li></ul>
  3. 3. Lack of Experimentation <ul><li>Energy’s overarching domain </li></ul><ul><li>Complex admin tool </li></ul><ul><li>THE DATA PUSH (ongoing) </li></ul><ul><li>Untouchable code </li></ul><ul><li>Simple (complex) release process </li></ul><ul><li>“Why change it? You’ll only rewrite it the same.” </li></ul>
  4. 4. Enabling Experimentation <ul><li>Less-coupled more modular structure </li></ul><ul><li>Distinct domain concepts </li></ul><ul><li>Model utility rather than reality </li></ul><ul><li>Ensure clear separation </li></ul>
  5. 5. Example: Bounded Context <ul><li>Logically and physically separated </li></ul><ul><li>Appropriate domain language </li></ul><ul><li>Acknowledge and isolate interaction </li></ul>
  6. 6. Bounded Contexts <ul><li>Importing Rate Cards </li></ul><ul><li>Pricing plans and performing comparisons </li></ul><ul><li>Switching a customers energy supplier </li></ul>
  7. 7. Experimenting with Comparison <ul><li>Price energy plans based on user profiles </li></ul><ul><li>Lots of calculations </li></ul><ul><li>Transforming a lot of data </li></ul><ul><li>Can’t be a bottle neck </li></ul>
  8. 8. Experimenting with Tools varnish Mongo compojure Tariff Editor mysql sinatra Home Movers sinatra Comparison
  9. 9. Issues with Experimentation <ul><li>New language idioms </li></ul><ul><li>New development environment </li></ul><ul><li>Deployment </li></ul><ul><li>Demands your own interest and investment </li></ul><ul><li>#fail? </li></ul>
  10. 10. Clojure Tools <ul><li>Actually lots of similarity to Ruby </li></ul><ul><ul><li>rake/gem -> lein </li></ul></ul><ul><ul><li>irb -> lein repl </li></ul></ul><ul><ul><li>rack -> ring </li></ul></ul><ul><ul><li>sinatra -> compojure </li></ul></ul><ul><li>Capistrano still works for deploys </li></ul>
  11. 11. Experimentation Rewards <ul><li>Functional programming (and Clojure) great fit for our problem </li></ul><ul><li>Resulting code is smaller and more succinct </li></ul><ul><li>Higher-order functions provide powerful composition </li></ul><ul><li>More to come... protocols, partial fns, macros etc. </li></ul><ul><li>Fast enough : >100 requests/second </li></ul><ul><li>No complex AOT caching </li></ul><ul><li>Simpler deployments </li></ul>
  12. 12. #win <ul><li>Modularity exposed way to break down problem </li></ul><ul><li>Break problems apart and you can solve everything in the most effective way </li></ul><ul><li>Small composable services with bounded contexts encouraged experimentation </li></ul><ul><li>Produced a tighter codebase with simpler deployment </li></ul><ul><li>No caching needed : performance allows realtime updates </li></ul>
  13. 13. #win <ul><li>Good people , experimentation , and technology has built a far more capable , flexible , scalable solution than with ‘obvious’ tools </li></ul><ul><li>You don’t know unless you try </li></ul>
  14. 14. Clojure #win <ul><li>Coming soon to a project near you </li></ul><ul><li>Demo/up-and-running with Clojure later this afternoon </li></ul>
  15. 15. Questions?
  16. 16. k’thx bye... until this afternoon