Let me start with the confusion that prompted this post: in a recent mentoring session, a senior engineer described their payment service as "idempotent" because it had exponential backoff on retries. That's a category error and it's the kind of mistake that bites teams in production with real financial consequences.

Retry and idempotency are complementary, not synonymous.

Two Different Actors, Two Different Concerns

Retry logic lives in the client. It's the client's decision to resend a request after a failure or timeout.

Idempotency lives in the server. It's the server's guarantee that receiving the same request multiple times will have the same effect as receiving it once.