LOADING

Retrying the retry design

In this talk, I will discuss why it's hard to use the power of RT to test side-effect-heavy apps.

Michał Płachta
Author of "Grokking Functional Programming"
About This Talk

Retrying failed side-effectful actions is the bread & butter for all programmers. Whether you use Python, Ruby, Java, or Scala, you’ll use the same retry strategies: usually some backoff and randomness.

In functional Scala, we use the powers of referential transparency (RT). If your API call is described as an IO value, you just create a new IO value that adds the retry logic of your choice. Easy, right?

Things get nasty very quickly when an API or a DB you call has more constraints. Imagine a retry strategy that starts with a 5ms delay and uses a Fibonacci backoff, but each individual delay is capped at 5s and you always do a final retry after the timeout passes. How would you make sure it’s working correctly? Is referential transparency helpful?

In this talk, I will discuss why it's hard to use the power of RT to test side-effect-heavy apps. The main problem is that our APIs and library APIs don't use the full power of RT: they focus too much on side effects and not the value representation of these side effects. This in turn makes testing such apps very difficult. I will present some alternative ideas for a better, more RT-friendly design for retries and many more side-effectful APIs.

more great talks

Might Be Interesting

Day 1
  —  
11:50 am
arrow pointing right icon

Yo Dawg, Heard You Want To FlatMap Your Direct-Style

During the talk, we’ll build a small effect system using solely Scala 3 context functions step-by-step.

Day 1
  —  
9:35 am
arrow pointing right icon

Going structural with Named Tuples

Scala 3.6 stabilises the Named Tuples proposal in the main language. It gives us new syntax for structural types and values, and tools for programmatic manipulation of structural types without macros. Can we, and should we, push it to the limit? Of course! let's explore DSL's for config, data, and scripting, for a more dynamic feel.

Day 1
  —  
12:25 pm
arrow pointing right icon

Slow-Auto, Inconvenient-Semi: escaping false dichotomy with sanely-automatic derivation

In this presentation you will learn the source of your issues, and a third way - sanely-automatic derivation which is fast to compile, fast to run, and easy to debug by its users.

Day 2
  —  
2:00 pm
arrow pointing right icon

Bazel: Do We Really Need Another Build Tool?

In this talk, I'll introduce Bazel, exploring its core concepts and the unique aspects that set it apart from other build tools. I'll dive into some typical challenges Scala developers might face when working with Bazel.

Day 2
  —  
2:35 pm
arrow pointing right icon

Better Scala builds with the Mill build tool

This talk will introduce Mill: a newer build tool that does everything SBT does, but better. Faster, simpler, easier, Mill democratizes the build so you don't need to be a build tool expert to work on it.

See All Events
Join us!

We're looking for amazing speakers.
CFP is open till 10.01.2023

Fill in Call for Papers
location icon

Location

Centrum Konferencyjne POLIN, Poland
stay in touch icon

Follow Us

Contact Us