Slide 1

Slide 1 text

The Past, Present, & Future of at

Slide 2

Slide 2 text

Eileen M. Uchitelle ! " # @eileencodes eileencodes.com

Slide 3

Slide 3 text

! I work at

Slide 4

Slide 4 text

a ♥

Slide 5

Slide 5 text

I’m on the Core team!

Slide 6

Slide 6 text

Upgrading at

Slide 7

Slide 7 text

The Past, Present, & Future of at

Slide 8

Slide 8 text

a ♥

Slide 9

Slide 9 text

2004

Slide 10

Slide 10 text

Rails is born 2004

Slide 11

Slide 11 text

Frameworks are extracted, not built. -DHH “ ”

Slide 12

Slide 12 text

Rails 1.0 2005 2004 Rails is born

Slide 13

Slide 13 text

2005 2006 2007 2004 Rails is born Rails 1.2 Rails 1.0

Slide 14

Slide 14 text

Let’s build a thing!

Slide 15

Slide 15 text

I’m in! Let’s build a thing!

Slide 16

Slide 16 text

2005 2006 2007 2004 Rails is born Rails 1.2 GitHub is born Rails 1.0

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

2005 2006 2007 2004 Rails is born GitHub is born GitHub launches 2008 Rails 1.2 Rails 1.0

Slide 19

Slide 19 text

2005 2006 2007 2004 Rails is born 2008 GitHub is born Rails 1.2 GitHub launches Rails joins Rails 1.0

Slide 20

Slide 20 text

2006 2007 2008 2005 2009 GitHub is born Rails 1.2 GitHub launches Rails joins Rails 2.3 Rails 1.0

Slide 21

Slide 21 text

GitHub is born GitHub launches Rails 1.2 Rails joins Rails 2.3 2007 2008 2009 2006 2010 Fork Rails

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

GitHub is born GitHub launches Rails 1.2 Rails joins Rails 2.3 2007 2008 2009 2006 2010 Fork Rails

Slide 24

Slide 24 text

fork repository

Slide 25

Slide 25 text

fork repository

Slide 26

Slide 26 text

GitHub is born GitHub launches Rails 1.2 Rails joins Rails 2.3 2007 2008 2009 2006 2010 Rails 3.0 Fork Rails

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

GitHub is born GitHub launches Rails 1.2 Rails joins Rails 2.3 2007 2008 2009 2010 Rails 3.0 Fork Rails 2011 Start 3.0 upgrade

Slide 29

Slide 29 text

GitHub launches Rails joins Rails 2.3 2008 2009 2010 Rails 3.0 Fork Rals 2011 Start 3.0 upgrade 2012 Rails 3.2

Slide 30

Slide 30 text

GitHub launches Rails joins Rails 2.3 2008 2009 2010 Rails 3.0 GH forks Rails 2011 Start 3.0 upgrade 2012 Rails 3.2 Upgrade stalled

Slide 31

Slide 31 text

Why upgrade when this version isn’t causing us pain?

Slide 32

Slide 32 text

Why upgrade when this version isn’t causing us pain? Why upgrade when Rails 3 is slower?

Slide 33

Slide 33 text

Why upgrade when this version isn’t causing us pain? Why upgrade when Rails 3 is slower? Why upgrade when our fork is better?

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

SECURITY BACKPORTS

Slide 36

Slide 36 text

SECURITY BACKPORTS HIRING IS HARDER

Slide 37

Slide 37 text

DEPENDENCIES ARE BRITTLE SECURITY BACKPORTS HIRING IS HARDER

Slide 38

Slide 38 text

DEPENDENCIES ARE BRITTLE SECURITY BACKPORTS HIRING IS HARDER DEVELOPMENT IS PAINFUL

Slide 39

Slide 39 text

2010 Rails 3.0 2011 Start 3.0 upgrade 2013 Rails 3.2 Upgrade stalled 2012 Complete 3.0 2014 Rails 4.0

Slide 40

Slide 40 text

2013 Rails 3.2 Upgrade stalled 2012 2014 2015 Complete 3.0 2016 4.0 started Rails 4.0

Slide 41

Slide 41 text

2013 Rails 3.2 Upgrade stalled 2012 2014 2015 Complete 3.0 2016 4.0 started Rails 5.0 Rails 4.0

Slide 42

Slide 42 text

2013 2014 2015 Complete 3.0 2016 2017 Eileen joins Rails 5.0 4.0
 started Rails 4.0

Slide 43

Slide 43 text

No content

Slide 44

Slide 44 text

No content

Slide 45

Slide 45 text

Gemfile.lock (Rails 3.2) $ rails server $ rails test tests/models/issue_test.rb Multiple Rails Versions Gemfile_rails4.lock (Rails 4.0) $ RAILS4=1 rails server $ RAILS4=1 rails test tests/models/issue_test.rb

Slide 46

Slide 46 text

Gemfile_rails4.lock (Rails 4.0) $ RAILS4=1 rails server $ RAILS4=1 rails test tests/models/issue_test.rb Multiple Rails Versions Gemfile_rails41.lock (Rails 4.1) $ RAILS41=1 rails server $ RAILS41=1 rails test tests/models/issue_test.rb

Slide 47

Slide 47 text

Conditional Code if GitHub.rails_3_2? # code for Rails 3.2 elsif GitHub.rails_4_0? # code for Rails 4.0 else # code for all future versions end

Slide 48

Slide 48 text

2015 2016 2019 Rails 5.0 4.0
 started 2017 Eileen joins 2018 4.2 in prod

Slide 49

Slide 49 text

No content

Slide 50

Slide 50 text

2015 2016 2019 Rails 5.0 4.0
 started 2017 Eileen joins 2018 5.2 in prod 4.2 in prod

Slide 51

Slide 51 text

No content

Slide 52

Slide 52 text

No content

Slide 53

Slide 53 text

engineers at $ for hours = $ /hr

Slide 54

Slide 54 text

The cost of not upgrading is immeasurable

Slide 55

Slide 55 text

SECURITY BACKPORTS

Slide 56

Slide 56 text

SECURITY BACKPORTS HIRING IS HARDER

Slide 57

Slide 57 text

DEPENDENCIES ARE BRITTLE SECURITY BACKPORTS HIRING IS HARDER

Slide 58

Slide 58 text

DEPENDENCIES ARE BRITTLE SECURITY BACKPORTS HIRING IS HARDER DEVELOPMENT IS PAINFUL

Slide 59

Slide 59 text

DEPENDENCIES ARE BRITTLE SECURITY BACKPORTS HIRING IS HARDER DEVELOPMENT IS PAINFUL REWRITE IN MICROSERVICES

Slide 60

Slide 60 text

…the stories of upgrading being a huge undertaking always makes me scratch my head - what are we doing wrong if its easy for us. - HN troll “ ”

Slide 61

Slide 61 text

When upgrading you should…

Slide 62

Slide 62 text

When upgrading you should build a team.

Slide 63

Slide 63 text

When upgrading you should take time to make a plan.

Slide 64

Slide 64 text

When upgrading you should fix deprecation warnings early.

Slide 65

Slide 65 text

When upgrading you should add linters to prevent regressions.

Slide 66

Slide 66 text

When upgrading you should plan for the future.

Slide 67

Slide 67 text

No content

Slide 68

Slide 68 text

You may regret forking Rails.

Slide 69

Slide 69 text

You may regret falling behind security supported versions.

Slide 70

Slide 70 text

You may regret using old, unsupported gems.

Slide 71

Slide 71 text

You may regret using private Rails APIs.

Slide 72

Slide 72 text

You may regret monkey patches.

Slide 73

Slide 73 text

No content

Slide 74

Slide 74 text

No content

Slide 75

Slide 75 text

No content

Slide 76

Slide 76 text

This was my first major upgrade.

Slide 77

Slide 77 text

It’s important to remember…

Slide 78

Slide 78 text

It’s important to remember to pay debt down incrementally.

Slide 79

Slide 79 text

It’s important to remember you’re not alone.

Slide 80

Slide 80 text

It’s important to remember the payoff is worth it.

Slide 81

Slide 81 text

No content

Slide 82

Slide 82 text

The benefits of upgrading

Slide 83

Slide 83 text

IMPROVED APIS

Slide 84

Slide 84 text

IMPROVED APIS SECURITY FEATURES

Slide 85

Slide 85 text

IMPROVED APIS BETTER PERFORMANCE SECURITY FEATURES

Slide 86

Slide 86 text

IMPROVED APIS BETTER PERFORMANCE NEW LIBRARIES SECURITY FEATURES

Slide 87

Slide 87 text

IMPROVED APIS BETTER PERFORMANCE NEW LIBRARIES SECURITY FEATURES A CHANCE TO CONTRIBUTE

Slide 88

Slide 88 text

The Future

Slide 89

Slide 89 text

No content

Slide 90

Slide 90 text

60+ Pull Requests from GitHub

Slide 91

Slide 91 text

Continuous Upgrades

Slide 92

Slide 92 text

Rails 6.0: Multiple database support

Slide 93

Slide 93 text

For the first time in GitHub’s history…

Slide 94

Slide 94 text

We’re pioneering the future of Rails.

Slide 95

Slide 95 text

We have a responsibility to support Rails

Slide 96

Slide 96 text

No content

Slide 97

Slide 97 text

DEPENDENCIES ARE BRITTLE SECURITY BACKPORTS HIRING IS HARDER DEVELOPMENT IS PAINFUL

Slide 98

Slide 98 text

IMPROVED APIS BETTER PERFORMANCE NEW FEATURES SECURITY A CHANCE TO CONTRIBUTE

Slide 99

Slide 99 text

No content

Slide 100

Slide 100 text

No content

Slide 101

Slide 101 text

a ♥

Slide 102

Slide 102 text

Thank you! ! " # @eileencodes eileencodes.com