diff --git a/go.mod b/go.mod
index 888464d14644a144b261d14643bf32f32850e22e..208c120b1a568cbaf999a06fea637b2987e83bd5 100644
--- a/go.mod
+++ b/go.mod
@@ -4,6 +4,7 @@ go 1.17
 
 require (
 	code.vereign.com/gaiax/tsa/golib v0.0.0-20220321093827-5fdf8f34aad9
+	github.com/cenkalti/backoff/v4 v4.1.3
 	github.com/google/uuid v1.3.0
 	github.com/kelseyhightower/envconfig v1.4.0
 	go.mongodb.org/mongo-driver v1.8.4
diff --git a/go.sum b/go.sum
index 3e7b80662f07e6d2f70de3c29789d73f3876be1e..88799848bf7901420915b8d03065a61acaffeb29 100644
--- a/go.sum
+++ b/go.sum
@@ -49,6 +49,8 @@ github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLj
 github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
 github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
 github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM=
+github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4=
+github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw=
 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
 github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
 github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
diff --git a/internal/executor/worker.go b/internal/executor/worker.go
index deec231362a2a4878671b40198e3777241a3b96a..d03bdc1162a5155431f1ca6e54fee81de49cae9c 100644
--- a/internal/executor/worker.go
+++ b/internal/executor/worker.go
@@ -56,7 +56,6 @@ func (w *Worker) Start(ctx context.Context) {
 			}
 
 			if err := w.storage.SaveTaskHistory(ctx, executed); err != nil {
-				// TODO: is this fatal error, should the task be re-executed?
 				logger.Error("error saving task history", zap.Error(err))
 				continue
 			}
diff --git a/internal/storage/storage.go b/internal/storage/storage.go
index 028ef4c00ba3e17e658e9652f96f9424ed7db414..0e314d761b3cf3ce6f95a2ae959b180a6f7a6c54 100644
--- a/internal/storage/storage.go
+++ b/internal/storage/storage.go
@@ -4,6 +4,7 @@ import (
 	"context"
 	"strings"
 
+	"github.com/cenkalti/backoff/v4"
 	"go.mongodb.org/mongo-driver/bson"
 	"go.mongodb.org/mongo-driver/mongo"
 	"go.mongodb.org/mongo-driver/mongo/options"
@@ -109,6 +110,11 @@ func (s *Storage) Unack(ctx context.Context, t *task.Task) error {
 
 // SaveTaskHistory saves a task to the `tasksHistory` collection.
 func (s *Storage) SaveTaskHistory(ctx context.Context, task *task.Task) error {
-	_, err := s.tasksHistory.InsertOne(ctx, task)
-	return err
+	insert := func() error {
+		_, err := s.tasksHistory.InsertOne(ctx, task)
+		return err
+	}
+
+	b := backoff.WithContext(backoff.NewExponentialBackOff(), ctx)
+	return backoff.Retry(insert, b)
 }
diff --git a/vendor/github.com/cenkalti/backoff/v4/.gitignore b/vendor/github.com/cenkalti/backoff/v4/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..50d95c548b67069b52ea4dcf91bf85314d488d41
Binary files /dev/null and b/vendor/github.com/cenkalti/backoff/v4/.gitignore differ
diff --git a/vendor/github.com/cenkalti/backoff/v4/.travis.yml b/vendor/github.com/cenkalti/backoff/v4/.travis.yml
new file mode 100644
index 0000000000000000000000000000000000000000..c79105c2fbebe29ea2a4d735de58526f58a06815
Binary files /dev/null and b/vendor/github.com/cenkalti/backoff/v4/.travis.yml differ
diff --git a/vendor/github.com/cenkalti/backoff/v4/LICENSE b/vendor/github.com/cenkalti/backoff/v4/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..89b8179965581339743b5edd9e18c1fcc778b56d
Binary files /dev/null and b/vendor/github.com/cenkalti/backoff/v4/LICENSE differ
diff --git a/vendor/github.com/cenkalti/backoff/v4/README.md b/vendor/github.com/cenkalti/backoff/v4/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..16abdfc084f73cb6658c2ddf463ac02ff666dd6e
Binary files /dev/null and b/vendor/github.com/cenkalti/backoff/v4/README.md differ
diff --git a/vendor/github.com/cenkalti/backoff/v4/backoff.go b/vendor/github.com/cenkalti/backoff/v4/backoff.go
new file mode 100644
index 0000000000000000000000000000000000000000..3676ee405d87b3dc7b675f3c93f719a2abca12d2
Binary files /dev/null and b/vendor/github.com/cenkalti/backoff/v4/backoff.go differ
diff --git a/vendor/github.com/cenkalti/backoff/v4/context.go b/vendor/github.com/cenkalti/backoff/v4/context.go
new file mode 100644
index 0000000000000000000000000000000000000000..48482330eb763651b2217b2704de5903b155d8d2
Binary files /dev/null and b/vendor/github.com/cenkalti/backoff/v4/context.go differ
diff --git a/vendor/github.com/cenkalti/backoff/v4/exponential.go b/vendor/github.com/cenkalti/backoff/v4/exponential.go
new file mode 100644
index 0000000000000000000000000000000000000000..2c56c1e7189ba605ae668e752b3781f815b1bbd1
Binary files /dev/null and b/vendor/github.com/cenkalti/backoff/v4/exponential.go differ
diff --git a/vendor/github.com/cenkalti/backoff/v4/retry.go b/vendor/github.com/cenkalti/backoff/v4/retry.go
new file mode 100644
index 0000000000000000000000000000000000000000..1ce2507ebc8be550a89b07d84e58f0fc55a50ee6
Binary files /dev/null and b/vendor/github.com/cenkalti/backoff/v4/retry.go differ
diff --git a/vendor/github.com/cenkalti/backoff/v4/ticker.go b/vendor/github.com/cenkalti/backoff/v4/ticker.go
new file mode 100644
index 0000000000000000000000000000000000000000..df9d68bce527f2952dd8a6b4569fff26b6c214c2
Binary files /dev/null and b/vendor/github.com/cenkalti/backoff/v4/ticker.go differ
diff --git a/vendor/github.com/cenkalti/backoff/v4/timer.go b/vendor/github.com/cenkalti/backoff/v4/timer.go
new file mode 100644
index 0000000000000000000000000000000000000000..8120d0213c58d550ea7cf20ab4d2329134abb12a
Binary files /dev/null and b/vendor/github.com/cenkalti/backoff/v4/timer.go differ
diff --git a/vendor/github.com/cenkalti/backoff/v4/tries.go b/vendor/github.com/cenkalti/backoff/v4/tries.go
new file mode 100644
index 0000000000000000000000000000000000000000..28d58ca37c684020e7db4e1f5a1394cc4b4edef9
Binary files /dev/null and b/vendor/github.com/cenkalti/backoff/v4/tries.go differ
diff --git a/vendor/modules.txt b/vendor/modules.txt
index cc125ed7892e00bda7f373537e628ab49a99401a..e4d7aa31821205e1e8eb7e7920a4d8185d08933e 100644
Binary files a/vendor/modules.txt and b/vendor/modules.txt differ