How would you implement a robust retry mechanism for network requests that fail due to poor connectivity?