                         }
                         self.finish()
                     } else {
-                        NSThread.sleepForTimeInterval(0.1)
+                        // The delay between polls increases quadratically from the base delay up to the max delay.
+                        let delay = min(WaitOperation.BASE_DELAY * Double(self.iteration * self.iteration), WaitOperation.MAX_DELAY)
+                        NSThread.sleepForTimeInterval(delay)
                         self.startNext()
                     }
                 } else {

        let taskID: Int
        let completionHandler: CompletionHandler
        let path: String
        
        init(index: Index, taskID: Int, completionHandler: CompletionHandler) {
            self.index = index

            if cancelled {
                finish()
            }
            iteration += 1
            index.client.performHTTPQuery(path, method: .GET, body: nil, hostnames: index.client.writeHosts) {
                (content, error) -> Void in
                if let content = content {
