@onkara Oban can definitely do dynamicly scheduled times. I think you are missunderstanding the example. The example uses a module attribute only because in the example the time happens to be constant, you can supply a variable time if you choose:
offset = compute_any_way_you_want(args)
args
|> new(schedule_in: offset)
|> Oban.insert!()