A timeout means “I didn’t get an answer,” not “nothing happened.”
Before retrying a write, check whether the first one landed. Use a stable request ID where the service supports it.
Otherwise your recovery strategy is just doing the wrong thing twice, but with exponential backoff.