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

Gradual Typing in Ruby - A Three Year Retrospective

Gradual Typing in Ruby - A Three Year Retrospective

Presented at RubyConf 2021

We began adopting gradual typing on Shopify's giant monolith almost 3 years ago. Today, we are running the monolith with great type coverage and even see some internal teams commit to stricter typing in their components.

The road to get here was not easy, though. We had to work with our developers to solve the right problems at the right levels of abstraction to ensure the adoption was healthy. This talk will go over some of the challenges and some of our wins along the way. It will also help you decide if gradual typing might work for your codebase and your team, as well.

Ufuk Kayserilioglu
Ufuk is the Engineering Manager of the Ruby Infrastructure and Ruby Types teams at Shopify and brings over 20 years of industry experience to the company for the adoption of better Ruby tooling and practices. He currently works remotely from Cyprus where he lives with his beloved wife and wonderful daughter.

Alexandre Terrasa
Alexandre has a PhD in computer science and specializes in typing specifications and implementations. He currently works as a Staff Engineer on the Ruby and Rails Infrastructure team at Shopify. He uses his expertise for the adoption of better Ruby tooling and practices including Sorbet and gradual typing to make the Shopify platform better for everyone. He previously worked as a core developer on the Nit language for which he implemented parts of the compiler, libraries and tools.

Ufuk Kayserilioglu

November 09, 2021
Tweet

More Decks by Ufuk Kayserilioglu

Other Decks in Programming

Transcript

  1. Gradual Typing in Ruby A Three Year Retrospective Ufuk Kayserilioglu

    & Alexandre Terrasa Ruby and Rails Infrastructure
  2. typed: ignore = typed: debt # -- foo.rb -- #

    typed: ignore class Foo end # -- bar.rb -- # typed: false class Bar < Foo end $ dev tc bar.rb:4: Unable to resolve constant Foo 3 | class Bar < Foo ^^^