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.

4Developers 2015: Enterprise makeover. Be a good web citizen, deliver continuously and change your organisation - Mateusz Kwaśniewski

268 views

Published on

Mateusz Kwaśniewski

Language: English

Micro services, cloud, continuous delivery heavily influenced how modern teams build software systems. Come to this talk to learn how our team rebuild frontend stack of several Norwegian newspapers significantly reducing cycle time and creating fun work environment that lets great developers be great.


Some of the things I’ll share:
- how respecting the Web makes us faster
- what we learned running 12factor apps on Heroku
- nuances of Continuous Delivery that you won’t find in books
- thinking process behind our decisions and some of the change patterns we used

Published in: Software
  • Be the first to comment

  • Be the first to like this

4Developers 2015: Enterprise makeover. Be a good web citizen, deliver continuously and change your organisation - Mateusz Kwaśniewski

  1. 1. PaaS Enterprise makeover change organizational SSICSI ESI Heroku cloud-native progressive enhancement integration 12factorREST deployment pipeline lean startup enterprise de continuous delivery Web automation
  2. 2. http://upload.wikimedia.org/wikipedia/commons/0/02/Canterbury_Cathedral_-_Portal_Nave_Cross-spire.jpeg
  3. 3. http://upload.wikimedia.org/wikipedia/commons/6/6e/Matejko_Wernyhora.jpg http://upload.wikimedia.org/wikipedia/commons/thumb/8/80/ESB.png/601px-ESB.png
  4. 4. http://upload.wikimedia.org/wikipedia/commons/0/02/Canterbury_Cathedral_-_Portal_Nave_Cross-spire.jpeg http://upload.wikimedia.org/wikipedia/commons/8/8b/Hyderabad_Street_Market.jpg
  5. 5. http://pixabay.com/static/uploads/photo/2010/12/13/10/12/belly-2473_640.jpg
  6. 6. Continuous Delivery Organizational change RESTful *services
  7. 7. Once upon a time... http://upload.wikimedia.org/wikipedia/commons/d/d9/Carlo_Dolci_-_St_Catherine_Reading_a_Book_-_WGA06372.jpg Part 2/10
  8. 8. CMS
  9. 9. Content Management System
  10. 10. Content Management System presentation
  11. 11. architecture: logic in JSP
  12. 12. infrastructure: shared test environments
  13. 13. performance: slooooow and unstable
  14. 14. Attention, code freeze! I’m deploying! http://upload.wikimedia.org/wikipedia/commons/e/e6/Kazanie_Skargi.jpg
  15. 15. CMS Web Frontend
  16. 16. CMS Web Frontend
  17. 17. Change pattern: Low hanging fruit
  18. 18. Change pattern: Right Time
  19. 19. Hackday
  20. 20. Prototype Web Frontend
  21. 21. 5 times faster
  22. 22. 30 deployments in one day
  23. 23. http://pixabay.com/static/uploads/photo/2013/10/10/14/56/traffic-lights-193658_640.jpg
  24. 24. From: http://paulhammant.com/2013/07/14/legacy-application-strangulation-case-studies/
  25. 25. Use the Web, don’t abuse it Part 3/10
  26. 26. Resources and representations
  27. 27. header articles list most read articles list footer ad resource resource resource resource resource
  28. 28. header articles list most read articles list footer ad as media type
  29. 29. header articles list most read articles list footer ad as media type URL
  30. 30. header articles list most read articles list footer ad as media type URL cache-control
  31. 31. in-process and over HTTP microservice microlib reversibledecisions
  32. 32. Web integration
  33. 33. Server Side Include
  34. 34. http://upload.wikimedia.org/wikipedia/commons/5/53/Server-multiple.svg
  35. 35. Edge Side Include
  36. 36. http://upload.wikimedia.org/wikipedia/commons/5/53/Server-multiple.svg https://openclipart.org/image/300px/svg_to_png/16073/kml-Document.png
  37. 37. <esi:include src=”http://mywebsite.com/mostRead” />
  38. 38. SSI with ESI tags
  39. 39. move ESI processing between backend and proxy server reversibledecisions
  40. 40. Client Side Include
  41. 41. article video article text link - sport widget core content article text
  42. 42. <a role="widget" class="widget-link" href=”//example.com/sportWidget”> sport widget </a> link - sport widget
  43. 43. read URL article video article text link - sport widget article text
  44. 44. HTTPGET article video article text link - sport widget article text
  45. 45. HTML + (CSS) + (JS) article video article text sport widget article text
  46. 46. HTML only HTML+CSS+JS
  47. 47. Multitracking reversibledecisions
  48. 48. Why not Single Page App integration? Part 4/10
  49. 49. Based on: Nicholas Zakas: Enough With The JavaScript Already!
  50. 50. Based on: Nicholas Zakas: Enough With The JavaScript Already!
  51. 51. Based on: Nicholas Zakas: Enough With The JavaScript Already!
  52. 52. Based on: Nicholas Zakas: Enough With The JavaScript Already!
  53. 53. Based on: Nicholas Zakas: Enough With The JavaScript Already!
  54. 54. +
  55. 55. + =
  56. 56. Elevator http://upload.wikimedia.org/wikipedia/commons/5/54/240_Sparks_Elevators.jpg http://upload.wikimedia.org/wikipedia/commons/f/f8/Escalator,_Va%C5%88kovka,_Brno_(3).jpg Escalator
  57. 57. Progressive enhancement
  58. 58. http://realgamernewz.com/wp-content/uploads/2014/06/GameDev-Denis-Rozaj-of-IzBoot-Abusing-Applicants.jpg http://sportsradiopd.com/wp-content/uploads/2014/10/phoneyeller.jpg http://pixabay.com/static/uploads/photo/2012/02/28/15/40/adult-18377_640.jpg
  59. 59. empty cache http://realgamernewz.com/wp-content/uploads/2014/06/GameDev-Denis-Rozaj-of-IzBoot-Abusing-Applicants.jpg http://sportsradiopd.com/wp-content/uploads/2014/10/phoneyeller.jpg http://pixabay.com/static/uploads/photo/2012/02/28/15/40/adult-18377_640.jpg
  60. 60. 500kB of JS HTML+CSS http://realgamernewz.com/wp-content/uploads/2014/06/GameDev-Denis-Rozaj-of-IzBoot-Abusing-Applicants.jpg http://sportsradiopd.com/wp-content/uploads/2014/10/phoneyeller.jpg http://pixabay.com/static/uploads/photo/2012/02/28/15/40/adult-18377_640.jpg
  61. 61. curl wget bot
  62. 62. view-source:http://mypage.com
  63. 63. “PhantomJS can be CPU and memory intensive (and randomly crashes or freezes)” http://sorcery.smugmug.com/2013/12/17/using-phantomjs-at-scale/
  64. 64. http://upload.wikimedia.org/wikipedia/commons/5/51/Indian_Macaques_grooming.jpg http://upload.wikimedia.org/wikipedia/commons/1/14/Fortune_teller,_Albert_Anker,_1880.png https://c1.staticflickr.com/1/94/270901614_89153a815f.jpg Part5/10
  65. 65. http://upload.wikimedia.org/wikipedia/commons/5/51/Indian_Macaques_grooming.jpg http://upload.wikimedia.org/wikipedia/commons/1/14/Fortune_teller,_Albert_Anker,_1880.png https://c1.staticflickr.com/1/94/270901614_89153a815f.jpg
  66. 66. http://upload.wikimedia.org/wikipedia/commons/5/51/Indian_Macaques_grooming.jpg http://upload.wikimedia.org/wikipedia/commons/1/14/Fortune_teller,_Albert_Anker,_1880.png https://c1.staticflickr.com/1/94/270901614_89153a815f.jpg
  67. 67. http://upload.wikimedia.org/wikipedia/commons/1/1d/Pietro_Longhi_021.jpg Scientific method
  68. 68. http://upload.wikimedia.org/wikipedia/commons/b/be/Abacus_4.jpg
  69. 69. every 2 weeks 6 times a day http://upload.wikimedia.org/wikipedia/commons/b/be/Abacus_4.jpg
  70. 70. http://pixabay.com/static/uploads/photo/2013/07/12/18/30/stopwatch-153398_640.png Lead time: 5-8 minutes
  71. 71. IDE is my layout tool
  72. 72. Build Continuous Deliverability in Part6/10
  73. 73. no dev|test|prod.properties in the app codebase
  74. 74. treat you code like an open source library
  75. 75. in-memory HttpSession is the root of all deployment evil
  76. 76. run apps as stateless processes
  77. 77. VCS cron logging business logic
  78. 78. ssh + tail
  79. 79. ssh + tail
  80. 80. ssh + tail
  81. 81. ? http://upload.wikimedia.org/wikipedia/commons/7/79/Operation_Upshot-Knothole_-_Badger_001.jpg
  82. 82. log to stdout and pipe it to modern log analysis tool
  83. 83. "Installing software is like a first date: if it can't be polite, smart, and generous, what should I expect later?" - Scott Berkun
  84. 84. create fast, disposable and self-contained services <build_tool> build <build_tool> run
  85. 85. Part 7/10 cloud- native yo! http://upload.wikimedia.org/wikipedia/commons/f/f7/EES_(Namibian_rapper).jpg
  86. 86. can’t display ad
  87. 87. personal data compromised can’t display ad
  88. 88. someone dies personal data compromised can’t display ad
  89. 89. someone dies personal data compromised can’t display ad
  90. 90. Why did we choose Heroku?
  91. 91. https://c2.staticflickr.com/4/3362/3546059144_64e632801c.jpg our apps PaaS IaaS for this app
  92. 92. diff
  93. 93. diff < PORT --- > OPENSHIFT_NODEJS_PORT
  94. 94. diff < PORT --- > OPENSHIFT_NODEJS_PORT reversibledecisions
  95. 95. our users
  96. 96. our users EU backend US backup backend
  97. 97. our users EU backend US backup backend Varnish
  98. 98. self-service envs Part8/10
  99. 99. self-service envs
  100. 100. http://pixabay.com/static/uploads/photo/2013/07/12/14/48/cursor-148819_640.png
  101. 101. trial!
  102. 102. we may outgrow Heroku one day
  103. 103. we may outgrow Heroku one day
  104. 104. Orchestration Part9/10
  105. 105. manually
  106. 106. git push/pull origin master http://upload.wikimedia.org/wikipedia/commons/d/d4/Devicetemplates_laptop-01.png
  107. 107. run build with tests
  108. 108. git push heroku_test master
  109. 109. heroku pipeline:promote
  110. 110. heroku pipeline:promote
  111. 111. CI/CD as a service
  112. 112. self-hosted CI tools
  113. 113. “An opportunity opens up to transform your software into something more expressive and versatile than you expected. This can mean new features or it can just mean the replacement of a big chunk of rigid code with a simple, flexible expression of a deeper model. While this does not happen every day, it is so valuable when it does come up that the opportunity needs to be recognized and grasped.”
  114. 114. “An opportunity opens up to transform your software into something more expressive and versatile than you expected. This can mean new features or it can just mean the replacement of a big chunk of rigid code with a simple, flexible expression of a deeper model. While this does not happen every day, it is so valuable when it does come up that the opportunity needs to be recognized and grasped.”
  115. 115. “An opportunity opens up to transform your software into something more expressive and versatile than you expected. This can mean new features or it can just mean the replacement of a big chunk of rigid code with a simple, flexible expression of a deeper model. While this does not happen every day, it is so valuable when it does come up that the opportunity needs to be recognized and grasped.”
  116. 116. “An opportunity opens up to transform your software into something more expressive and versatile than you expected. This can mean new features or it can just mean the replacement of a big chunk of rigid code with a simple, flexible expression of a deeper model. While this does not happen every day, it is so valuable when it does come up that the opportunity needs to be recognized and grasped.”
  117. 117. Pipeline as code
  118. 118. shape the path Part10/10
  119. 119. shape the path
  120. 120. communicate changes and build good PR
  121. 121. be nice to people
  122. 122. Summary • Consider using the Web before you start reimplementing it • Consider designing for replaceability and deployability • Consider automating boring things including PaaS setup and deployment pipelines • Consider using different change patterns for your context
  123. 123. Summary • Consider using the Web before you start reimplementing it • Consider designing for replaceability and deployability • Consider automating boring things including PaaS setup and deployment pipelines • Consider using different change patterns for your context
  124. 124. Summary • Consider using the Web before you start reimplementing it • Consider designing for replaceability and deployability • Consider automating boring things including PaaS setup and deployment pipelines • Consider using different change patterns for your context
  125. 125. Summary • Consider using the Web before you start reimplementing it • Consider designing for replaceability and deployability • Consider automating boring things including PaaS setup and deployment pipelines • Consider using different change patterns for your context
  126. 126. Thank you Mateusz Kwaśniewski “The purpose of an organization is to enable ordinary human beings to do extraordinary things” - P.Drucker
  127. 127. Continuous Delivery Organizational change RESTful *services ReadingList

×