diff --git a/quiche/quic/load_balancer/load_balancer_encoder.cc b/quiche/quic/load_balancer/load_balancer_encoder.cc
index bb9608b..5b0a613 100644
--- a/quiche/quic/load_balancer/load_balancer_encoder.cc
+++ b/quiche/quic/load_balancer/load_balancer_encoder.cc
@@ -47,7 +47,7 @@
 constexpr uint8_t kLoadBalancerLengthMask = 0x3f;
 constexpr uint8_t kLoadBalancerUnroutableConfigId = 0xc0;
 
-absl::optional<LoadBalancerEncoder> LoadBalancerEncoder::Create(
+std::unique_ptr<LoadBalancerEncoder> LoadBalancerEncoder::Create(
     QuicRandom &random, LoadBalancerEncoderVisitorInterface *const visitor,
     const bool len_self_encoded, const uint8_t unroutable_connection_id_len) {
   if (unroutable_connection_id_len == 0 ||
@@ -56,10 +56,10 @@
     QUIC_BUG(quic_bug_435375038_01)
         << "Invalid unroutable_connection_id_len = "
         << static_cast<int>(unroutable_connection_id_len);
-    return absl::optional<LoadBalancerEncoder>();
+    return nullptr;
   }
-  return LoadBalancerEncoder(random, visitor, len_self_encoded,
-                             unroutable_connection_id_len);
+  return absl::WrapUnique(new LoadBalancerEncoder(
+      random, visitor, len_self_encoded, unroutable_connection_id_len));
 }
 
 bool LoadBalancerEncoder::UpdateConfig(const LoadBalancerConfig &config,
diff --git a/quiche/quic/load_balancer/load_balancer_encoder.h b/quiche/quic/load_balancer/load_balancer_encoder.h
index b48bb19..1405d62 100644
--- a/quiche/quic/load_balancer/load_balancer_encoder.h
+++ b/quiche/quic/load_balancer/load_balancer_encoder.h
@@ -60,7 +60,7 @@
   // random. |unroutable_connection_id_length| specifies the length of
   // connection IDs to be generated when there is no active config. It must not
   // be 0 and must not be larger than the RFC9000 maximum of 20.
-  static absl::optional<LoadBalancerEncoder> Create(
+  static std::unique_ptr<LoadBalancerEncoder> Create(
       QuicRandom& random, LoadBalancerEncoderVisitorInterface* const visitor,
       const bool len_self_encoded,
       const uint8_t unroutable_connection_id_len = kLoadBalancerUnroutableLen);
diff --git a/quiche/quic/load_balancer/load_balancer_encoder_test.cc b/quiche/quic/load_balancer/load_balancer_encoder_test.cc
index f1df860..0ea7aa0 100644
--- a/quiche/quic/load_balancer/load_balancer_encoder_test.cc
+++ b/quiche/quic/load_balancer/load_balancer_encoder_test.cc
@@ -119,18 +119,18 @@
 
 TEST_F(LoadBalancerEncoderTest, BadUnroutableLength) {
   EXPECT_QUIC_BUG(
-      EXPECT_FALSE(
-          LoadBalancerEncoder::Create(random_, nullptr, false, 0).has_value()),
+      EXPECT_EQ(LoadBalancerEncoder::Create(random_, nullptr, false, 0),
+                nullptr),
       "Invalid unroutable_connection_id_len = 0");
   EXPECT_QUIC_BUG(
-      EXPECT_FALSE(
-          LoadBalancerEncoder::Create(random_, nullptr, false, 21).has_value()),
+      EXPECT_EQ(LoadBalancerEncoder::Create(random_, nullptr, false, 21),
+                nullptr),
       "Invalid unroutable_connection_id_len = 21");
 }
 
 TEST_F(LoadBalancerEncoderTest, BadServerIdLength) {
   auto encoder = LoadBalancerEncoder::Create(random_, nullptr, true);
-  EXPECT_TRUE(encoder.has_value());
+  EXPECT_NE(encoder, nullptr);
   // Expects a 3 byte server ID and got 4.
   auto config = LoadBalancerConfig::CreateUnencrypted(1, 3, 4);
   EXPECT_TRUE(config.has_value());
@@ -143,8 +143,7 @@
 TEST_F(LoadBalancerEncoderTest, FailToUpdateConfigWithSameId) {
   TestLoadBalancerEncoderVisitor visitor;
   auto encoder = LoadBalancerEncoder::Create(random_, &visitor, true);
-  EXPECT_TRUE(encoder.has_value());
-  EXPECT_TRUE(encoder.has_value());
+  EXPECT_NE(encoder, nullptr);
   auto config = LoadBalancerConfig::CreateUnencrypted(1, 3, 4);
   EXPECT_TRUE(config.has_value());
   EXPECT_TRUE(encoder->UpdateConfig(*config, MakeServerId(kServerId, 3)));
@@ -199,7 +198,7 @@
   };
   random_.AddNextValues(0, 0x75c2699c);
   auto encoder = LoadBalancerEncoder::Create(random_, nullptr, true, 8);
-  EXPECT_TRUE(encoder.has_value());
+  EXPECT_NE(encoder, nullptr);
   auto config = LoadBalancerConfig::Create(config_id, server_id_len, nonce_len,
                                            absl::string_view(raw_key));
   EXPECT_TRUE(config.has_value());
@@ -248,7 +247,7 @@
   };
   for (const auto &test : test_vectors) {
     auto encoder = LoadBalancerEncoder::Create(random_, nullptr, true, 8);
-    EXPECT_TRUE(encoder.has_value());
+    EXPECT_NE(encoder, nullptr);
     random_.AddNextValues(kNonceHigh, kNonceLow);
     EXPECT_TRUE(encoder->UpdateConfig(test.config, test.server_id));
     EXPECT_EQ(encoder->GenerateConnectionId(), test.connection_id);
@@ -259,7 +258,7 @@
   const uint8_t server_id_len = 3;
   TestLoadBalancerEncoderVisitor visitor;
   auto encoder = LoadBalancerEncoder::Create(random_, &visitor, true, 8);
-  EXPECT_TRUE(encoder.has_value());
+  EXPECT_NE(encoder, nullptr);
   auto config = LoadBalancerConfig::Create(0, server_id_len, 4, kKey);
   EXPECT_TRUE(config.has_value());
   EXPECT_TRUE(
@@ -279,7 +278,7 @@
 TEST_F(LoadBalancerEncoderTest, UnroutableConnectionId) {
   random_.AddNextValues(0x83, kNonceHigh);
   auto encoder = LoadBalancerEncoder::Create(random_, nullptr, false);
-  EXPECT_TRUE(encoder.has_value());
+  EXPECT_NE(encoder, nullptr);
   EXPECT_EQ(encoder->num_nonces_left(), 0);
   auto connection_id = encoder->GenerateConnectionId();
   // The first byte is the config_id (0xc0) xored with (0x83 & 0x3f).
@@ -290,7 +289,7 @@
 
 TEST_F(LoadBalancerEncoderTest, NonDefaultUnroutableConnectionIdLength) {
   auto encoder = LoadBalancerEncoder::Create(random_, nullptr, true, 9);
-  EXPECT_TRUE(encoder.has_value());
+  EXPECT_NE(encoder, nullptr);
   QuicConnectionId connection_id = encoder->GenerateConnectionId();
   EXPECT_EQ(connection_id.length(), 9);
 }
@@ -298,7 +297,7 @@
 TEST_F(LoadBalancerEncoderTest, DeleteConfigWhenNoConfigExists) {
   TestLoadBalancerEncoderVisitor visitor;
   auto encoder = LoadBalancerEncoder::Create(random_, &visitor, true);
-  EXPECT_TRUE(encoder.has_value());
+  EXPECT_NE(encoder, nullptr);
   encoder->DeleteConfig();
   EXPECT_EQ(visitor.num_deletes(), 0u);
 }
