Obviously, in his example it would be RateLimiter not Option<RateLimiter>, so no check necessary.

I think the author can propagate RateLimiter instead of *RateLimiter, making it exactly the same

No, because RateLimiter is then copied on passing it around (pass by value).

That is problematic for two reasons: it might be a large type, so copying might be expensive. Second, more likely, it might violate invariants in your domain. For a rate limiter, this might mean accidentally copying around some internal state like a mutex, which then exists n times instead of 1 time, which can represent a problem (e.g. if you want to internally limit whole-app concurrency toward Redis).

You can see the code

Clearly is not large. Second the child object is a pointer so does not violate anything

And if if if... I am sure we can look for new constraints in any language

you still need to unpack that option somewhere.

_If_ you start out with an optional, and even then only once in the code path.