Upgrade to Pro — share decks privately, control downloads, hide ads and more …

The Life and Death of a Rails App

The Life and Death of a Rails App

Now that it has become a mature web development framework, Rails is no longer the exclusive realm of burgeoning startups. Healthy small and large businesses have grown with Rails for years. Shrinking and dying companies too.

Olivier Lacan

April 17, 2018

More Decks by Olivier Lacan

Other Decks in Technology


  1. The Life & Death of a Rails App


  3. We are all going to die.

  4. 404

  5. None
  6. None
  7. The Life and Death of a Rails App Olivier

  8. None
  9. None
  10. Birth

  11. Late 2010 Orlando, Florida

  12. $ rails new app

  13. $ rails new app\ -d postgresql --skip-test-unit --skip-spring --skip-javascript

  14. None
  15. None
  16. 2f0e7c9f1c 2010-12-22 Initial Commit. [Andrew Smith]

  17. Jan 2012 Orlando, Florida

  18. None
  19. 53ff7c4bab 2012-01-19 Specifying that group subscriptions are per seat. [Olivier

  20. 4a59521d5e 2013-05-24 I'm a fucking idiot. [Olivier Lacan]

  21. Barriers to Entry

  22. None
  23. None
  24. audience * ) timing + content (

  25. None
  26. None
  27. $ git push heroku master

  28. None
  29. None
  30. None
  31. gem "this" gem "that" gem "also_this" gem "why_not" gem "all_the_things"

    gem "omfg"
  32. Dependencies Software

  33. Dependencies Human

  34. Adolescence

  35. "Let's do Ops to save money!"

  36. None
  37. None
  38. Opportunity Cost noun Economics the loss of potential gain from

    other alternatives when one alternative is chosen.
  39. Heroku In-house $5,000/month $3,000/month + payroll + vacation + security

    + upgrades + turnover = /month
  40. Not Invented Here

  41. "GitHub made their own support app!"

  42. "Why shouldn't we..."

  43. "We're special too, right?"

  44. (wrong)

  45. Users Authorization Admin Jobs Billing Servers Security Browsers Database Emails

  46. $ rails new tool $ rails new other_tool $ rails

    new best_tool $ rails new micro_service $ rails new macro_service $ mix phx.new ruby_3x3 $ express async_all_the_things
  47. None
  48. Security upgrades Ruby upgrades Rails upgrades Documentation ) ( x

  49. require "active_model/railtie" require "active_job/railtie" # require "active_record/railtie" require "action_controller/railtie" require

    "action_mailer/railtie" require "action_view/railtie" require "action_cable/engine" require "sprockets/railtie" require "rails/test_unit/railtie"
  50. Justify our Difference

  51. $ hanami new so_fresh_so_clean $ dry-web-roda new dry_FTW

  52. Rails Freedom

  53. Easy Simple

  54. Big Small

  55. Yes Maybe

  56. Rails is a siphon for good ideas.

  57. Rails Ruby on

  58. cross-pollination ✨ ✨

  59. Data Mapper CarrierWave Capybara Sequel Sidekiq RSpec

  60. ActiveRecord ActiveStorage System Tests Arel ActiveJob MiniTest::Spec

  61. Architecture

  62. app/ vs lib/ 2010

  63. app/models vs app/services 2013

  64. Rails and SOA: Do I really need 
 to have

    this big app? December 26, 2013 Developing complex web applications (not particularly Rails apps) is a tricky task. You write your models, controllers, services and optimize application architecture iteratively. But even with the great architecture when your application starts to be huge, bad things happen. Every little feature you’ll add will cost you precious time - tests must pass on your CI and workers needs to be reloaded every time you deploy. In addition, you begin to realize that mental overhead with keeping modules separated is huge - you have to remember a lot of things to keep it in right fashion. Ultimately, working on a project is hard, TDD technique is inefficient to use and you’re not happy at all with your code.
  65. SOA

  66. None
  67. Service-oriented Architecture

  68. Business activity with outcome.
 Black box for consumers.

    consist of other underlying services.
  69. Local complexity vs. Perpetual inconsistency

  70. Localized SOA

  71. app/models + app/services

  72. None
  73. User.create + CreateUser.new

  74. None
  75. CreateUser SubscribeUser ChargeSubscription

  76. Unexpected Paths

  77. CreateUser ChargeSubscription SubscribeUser

  78. Charge.create User.create Subscription.create CreateUser ChargeSubscription SubscribeUser

  79. None
  80. “What if…”

  81. Adulthood

  82. Experiment Side-project Product

  83. (In)stability Teammate

  84. Ownership Lack of

  85. None
  86. +

  87. Diversity

  88. None
  89. None
  90. None
  91. Immunity

  92. Distrust
 the Process

  93. Beware of Bibles

  94. “During the gold rush its a good time to be

    in the pick and shovel business” Probably Not Mark Twain
  95. None
  96. Shovel-as-a-Service

  97. Use Make vs.

  98. Scalability

  99. 504

  100. HTTP Status 504 The server, while acting as a gateway

    or proxy, did not receive a timely response from an upstream server it needed to access in order to complete the request.
  101. whoops

  102. None
  103. None
  104. None
  105. Rails can scale.

  106. None
  107. JavaScript however...

  108. (okay, my JavaScript)

  109. None
  110. None
  111. Performance is hard work.

  112. People are even harder work.

  113. Devalue Code Overvalue People

  114. None
  115. Software Developer Bulldozer

  116. Security

  117. “Who has credentials for the MailChimp account?”

  118. “Peter, he left the company two months ago.”

  119. None
  120. +

  121. Hey! Thank you for the message As I said I

    have found several SERIOUS security vulnerabilities; so I want to ask you if you can make a "team" on hackerone.com . It's a platform where security researchers report vulnerabilities to company.
  122. None
  123. None
  124. None
  125. Bug Bounty Security Program

  126. Researcher Reputation Reward Guidance Attract White Hats +

  127. Security through "lalala not listening" is not security.

  128. Privacy

  129. G.D.P.R.

  130. General Data Protection Regulation

  131. How GDPR Will Change 
 The Way You Develop Europe’s

    imminent privacy overhaul means that we all have to become more diligent about what data we collect, how we collect it, and what we do with it. In our turbulent times, these privacy obligations are about ethics as well as law. Web developers have a major role to play here. After all, healthy data protection practice is as much about the development side — code, data, and security — as it is about the business side of process, information, and strategy.
  132. P.I.I

  133. None
  134. Personally identifiable information Personal information, described in United States legal

    fields as either personally identifiable information (PII), or sensitive personal information (SPI), as used in information security and privacy laws, is information that can be used on its own or with other information to identify, contact, or locate a single person, or to identify an individual in context.
  135. According to the European Commission, "personal data is any information

    relating to an individual, whether it relates to his or her private, professional or public life. It can be anything from a name, a home address, a photo, an email address, bank details, posts on social networking websites, medical information, or a computer’s IP address."
  136. Devise Rails

  137. •Trackable: tracks sign in count, timestamps and IP address.

  138. create_table "users", force: :cascade do |t| t.text "name" t.string "email"

    t.datetime "created_at" t.datetime "updated_at" t.datetime "current_sign_in_at" t.datetime "last_sign_in_at" t.string "country_code" t.string "current_sign_in_ip" t.string "encrypted_password" t.string "last_sign_in_ip" end
  139. Are you GDRP- compliant?

  140. https://www.reddit.com/r/rails/comments/885ufz/gdpr_rails_are_you_doing_anything_to_prepare/

  141. None
  142. Who owns user data?

  143. Where does the data go when it's over?

  144. Retirement

  145. None
  146. Three years later…

  147. None
  148. Death

  149. None
  150. None
  151. The sun comes back after a sunset.

  152. None
  153. Startup

  154. Emotional honesty

  155. We are shutting Code School down forever.

  156. It fucking hurts.

  157. Its spirit lives on in Pluralsight. But it still hurts.

  158. None
  159. 20%

  160. 2011 - 2018 Code School

  161. Post-Mortem

  162. Are legacy apps our legacy?

  163. No.

  164. It's people.

  165. Ditch Toxic People

  166. Nurture Good People

  167. Share Ownership

  168. The product.

  169. Get Involved

  170. Accept Mortality

  171. The ideas.

  172. Share Healthy Habits

  173. Focus on Joy

  174. Learn by Doing

  175. Just in Time Learning

  176. Merci.

  177. @olivierlacan

  178. None
  179. Questions? Come chat in the hall.