Going Fast in Government

Going Fast in Government

Talk given to the London Web Performance meetup, featuring a bit of background to GOV.UK and a few short examples of how we try and deliver high quality services quickly.

98234c645fe8c935edc0fec0186d28b8?s=128

Gareth Rushgrove

January 16, 2013
Tweet

Transcript

  1. http://www.flickr.com/photos/psd/7649345008 Going Fast in Government Tales from building GOV.UK London

    Web Performance 16th January 2013 gareth rushgrove | morethanseven.net
  2. Me

  3. Gareth Rushgrove @garethr gareth rushgrove | morethanseven.net

  4. Curate devopsweekly.com gareth rushgrove | morethanseven.net

  5. Blog at morethanseven.net gareth rushgrove | morethanseven.net

  6. Work at UK Government Digital Service Text gareth rushgrove |

    morethanseven.net
  7. http://www.flickr.com/photos/benterrett/6852348725/ I am a Civil Servant gareth rushgrove | morethanseven.net

  8. http://www.flickr.com/photos/iancarroll/5027441664 Background (Government and GOV.UK)

  9. Martha Lane-Fox Report - October 2010 gareth rushgrove | morethanseven.net

  10. Alpha - June 2011 gareth rushgrove | morethanseven.net

  11. Beta - January 2012 gareth rushgrove | morethanseven.net

  12. GDS Government Digital Service gareth rushgrove | morethanseven.net

  13. GOV.UK - October 2012 gareth rushgrove | morethanseven.net

  14. Government Digital Strategy - November 2012 gareth rushgrove | morethanseven.net

    publications.cabinetoffice.gov.uk/digital/
  15. http://www.flickr.com/photos/iancarroll/5027441664 Momentum (big and fast?)

  16. gareth rushgrove | morethanseven.net Government is Big 464,000 55,000 UK

    Civil Service Google 19,995 BBC
  17. gareth rushgrove | morethanseven.net Government Can Be Fast

  18. gareth rushgrove | morethanseven.net Some Examples - Focus on user

    need - Ship fast - Measure everything - Treat infrastructure as software
  19. http://www.flickr.com/photos/iancarroll/5027441664 User need (do what Government should do)

  20. gareth rushgrove | morethanseven.net Do Less

  21. gareth rushgrove | morethanseven.net So Much Content

  22. gareth rushgrove | morethanseven.net Focus on Common Case

  23. gareth rushgrove | morethanseven.net Keeping Bees

  24. gareth rushgrove | morethanseven.net 410 Gone

  25. gareth rushgrove | morethanseven.net Less Content to Manage

  26. http://www.flickr.com/photos/iancarroll/5027441664 Ship fast (releasing software)

  27. gareth rushgrove | morethanseven.net How Fast?

  28. gareth rushgrove | morethanseven.net Start with Continuous Integration

  29. gareth rushgrove | morethanseven.net Multiple Teams http://www.flickr.com/photos/dafyddbach/6895962266

  30. gareth rushgrove | morethanseven.net Many Applications http://www.flickr.com/photos/benterrett/6892892662

  31. gareth rushgrove | morethanseven.net Push Button Deploy http://www.flickr.com/photos/psd/7999579422

  32. gareth rushgrove | morethanseven.net Push Jenkins Deploy

  33. Scenario: Can log in Given the "EFG" application has booted

    When I try to login as a valid EFG user Then I should be on the EFG post-login page gareth rushgrove | morethanseven.net Smoke Tests
  34. gareth rushgrove | morethanseven.net Regular Releases Reduce Risk digital.cabinetoffice.gov.uk/2012/11/02/regular-releases-reduce-risk/

  35. http://www.flickr.com/photos/iancarroll/5027441664 Measure (analytics, monitoring, kpis)

  36. gareth rushgrove | morethanseven.net Analytics

  37. gareth rushgrove | morethanseven.net Analytics Powered Reports

  38. gareth rushgrove | morethanseven.net 1200+ Monitoring Checks

  39. gareth rushgrove | morethanseven.net 15K+ Metrics

  40. gareth rushgrove | morethanseven.net Even More Metrics

  41. gareth rushgrove | morethanseven.net Smoke Tests for Performance Scenario: Can

    log in Given the "EFG" application has booted And I am benchmarking When I try to login as a valid EFG user Then I should be on the EFG post-login page Then the time should be less than 1 seconds
  42. gareth rushgrove | morethanseven.net Also Monitoring Checks Scenario: Can log

    in Given the "EFG" application has booted And I am benchmarking When I try to login as a valid EFG user Then I should be on the EFG post-login page Then the time should be less than 1 seconds
  43. gareth rushgrove | morethanseven.net Load and Performance Testing

  44. gareth rushgrove | morethanseven.net 96/100 on YSlow

  45. gareth rushgrove | morethanseven.net DOMContentLoaded in 738ms

  46. gareth rushgrove | morethanseven.net Homepage Primed Cache 4.8K

  47. gareth rushgrove | morethanseven.net Performance Platform Beta www.gov.uk/performance

  48. gareth rushgrove | morethanseven.net A Measure of Engagement

  49. gareth rushgrove | morethanseven.net Popularity

  50. http://www.flickr.com/photos/iancarroll/5027441664 Infrastructure (treat it like software)

  51. gareth rushgrove | morethanseven.net Why Infrastructure as a Service? digital.cabinetoffice.gov.uk/2012/09/25/why-iaas/

  52. gareth rushgrove | morethanseven.net Why Infrastructure as Code? (Performance Edition)

    - Rapidly move between different infrastructures - Quickly provision new instances or environments - Share code between projects - Make agreed changes quickly (commit and deploy)
  53. gareth rushgrove | morethanseven.net Configuration Management

  54. package { 'apache2': ensure => latest, } service { 'apache2':

    ensure => running, provider => upstart, require => Package['apache2'] } gareth rushgrove | morethanseven.net Configuration Management Resources
  55. class govuk::apps::calendars( $port = 3011 ) { govuk::app { 'calendars':

    app_type => 'rack', port => $port, health_check_path => ‘/bank-holidays’, } } gareth rushgrove | morethanseven.net Configuration Management Apps
  56. class govuk::node::s_frontend inherits govuk::n include govuk::node::s_ruby_app_server include govuk::apps::businesssupportfinder include govuk::apps::calendars

    include govuk::apps::canary_frontend include govuk::apps::datainsight_frontend include govuk::apps::designprinciples include govuk::apps::feedback include govuk::apps::frontend include govuk::apps::licencefinder include govuk::apps::smartanswers include govuk::apps::static gareth rushgrove | morethanseven.net Configuration Management Nodes
  57. class govuk::node::s_frontend inherits govuk::n include govuk::node::s_ruby_app_server include govuk::apps::businesssupportfinder include govuk::apps::calendars

    include govuk::apps::canary_frontend include govuk::apps::datainsight_frontend include govuk::apps::designprinciples include govuk::apps::feedback include govuk::apps::frontend include govuk::apps::licencefinder include govuk::apps::smartanswers include govuk::apps::static gareth rushgrove | morethanseven.net Configuration Management Nodes
  58. class govuk::node::s_frontend inherits govuk::n include govuk::node::s_ruby_app_server include govuk::apps::businesssupportfinder include govuk::apps::calendars

    include govuk::apps::canary_frontend include govuk::apps::datainsight_frontend include govuk::apps::designprinciples include govuk::apps::feedback include govuk::apps::frontend include govuk::apps::licencefinder include govuk::apps::smartanswers include govuk::apps::static gareth rushgrove | morethanseven.net Configuration Management Nodes
  59. gareth rushgrove | morethanseven.net Software Defined Networks require 'rubygems' require

    'nat' nat do snat :interface => "Client Data", :original => { :ip => "10.0.0.0/xx" }, :translated => { :ip => "xx.xx.xx.xx" }, :desc => "Outbound internet traffic" dnat :interface => "Client Data", :original => { :ip => "xx.xx.xx.xx", :port => 22 }, :translated => { :ip => "10.0.0.xx", :port => 22 }, :desc => "jumpbox-1 SSH" dnat :interface => "Client Data", :original => { :ip => "xx.xx.xx.xx", :port => 80 },, :translated => { :ip => "10.0.0.xx", :port => 80 }, :desc => "jenkins, logging, monitoring HTTP"
  60. require 'rubygems' require 'firewall' firewall do # internal rules rule

    "ssh access to jumpbox1" do source :ip => "Any" destination :ip => "xx.xx.xx.xx", :port => 22 end rule "http to backend applications" do source :ip => "Any" destination :ip => "xx.xx.xx.xx", :port => 80 end rule "https to backend applications" do gareth rushgrove | morethanseven.net Including Firewall and Loadbalancer
  61. gareth rushgrove | morethanseven.net More on Infrastructure as Code speakerdeck.com/garethr

  62. http://www.flickr.com/photos/iancarroll/5027441664 Conclusions (if all you remember is)

  63. gareth rushgrove | morethanseven.net Going Fast is Important http://www.flickr.com/photos/phae_/8026389306

  64. gareth rushgrove | morethanseven.net But Momentum is Everything http://www.flickr.com/photos/psd/8096766322

  65. The End

  66. Questions? gareth rushgrove | morethanseven.net http://flickr.com/photos/psd/102332391/