diff --git a/quic/core/congestion_control/uber_loss_algorithm.h b/quic/core/congestion_control/uber_loss_algorithm.h
index b2f8f1b..c20cb78 100644
--- a/quic/core/congestion_control/uber_loss_algorithm.h
+++ b/quic/core/congestion_control/uber_loss_algorithm.h
@@ -128,10 +128,8 @@
   LossDetectionParameters tuned_parameters_;
   bool tuner_started_ = false;
   bool min_rtt_available_ = false;
-  // If flag is false, set |user_agent_known_| to true, so loss detection tuner
-  // will start once SetFromConfig is called and min rtt is available.
-  bool user_agent_known_ =
-      !GetQuicReloadableFlag(quic_save_user_agent_in_quic_session);
+  // Whether user agent is known to the session.
+  bool user_agent_known_ = false;
   // Whether tuning is configured in QuicConfig.
   bool tuning_configured_ = false;
   bool reorder_happened_ = false;  // Whether any reordered packet is observed.
diff --git a/quic/core/http/end_to_end_test.cc b/quic/core/http/end_to_end_test.cc
index 2f5e7b9..b6d62e8 100644
--- a/quic/core/http/end_to_end_test.cc
+++ b/quic/core/http/end_to_end_test.cc
@@ -537,13 +537,8 @@
                             server_stats.packet_spuriously_detected_lost);
         }
         EXPECT_EQ(0u, server_stats.packets_discarded);
-        if (GetQuicReloadableFlag(quic_save_user_agent_in_quic_session)) {
-          EXPECT_EQ(
-              server_session->user_agent_id().value_or("MissingUserAgent"),
-              kTestUserAgentId);
-        } else {
-          EXPECT_FALSE(server_session->user_agent_id().has_value());
-        }
+        EXPECT_EQ(server_session->user_agent_id().value_or("MissingUserAgent"),
+                  kTestUserAgentId);
       } else {
         ADD_FAILURE() << "Missing server connection";
       }
@@ -4716,12 +4711,8 @@
   QuicConfig* server_config = nullptr;
   if (server_session != nullptr) {
     server_config = server_session->config();
-    if (GetQuicReloadableFlag(quic_save_user_agent_in_quic_session)) {
-      EXPECT_EQ(server_session->user_agent_id().value_or("MissingUserAgent"),
-                kTestUserAgentId);
-    } else {
-      EXPECT_FALSE(server_session->user_agent_id().has_value());
-    }
+    EXPECT_EQ(server_session->user_agent_id().value_or("MissingUserAgent"),
+              kTestUserAgentId);
   } else {
     ADD_FAILURE() << "Missing server session";
   }
diff --git a/quic/core/http/quic_spdy_stream.cc b/quic/core/http/quic_spdy_stream.cc
index 4c979c1..7dfe1fe 100644
--- a/quic/core/http/quic_spdy_stream.cc
+++ b/quic/core/http/quic_spdy_stream.cc
@@ -529,19 +529,15 @@
 void QuicSpdyStream::OnStreamHeaderList(bool fin,
                                         size_t frame_len,
                                         const QuicHeaderList& header_list) {
-  if (GetQuicReloadableFlag(quic_save_user_agent_in_quic_session)) {
-    if (!spdy_session()->user_agent_id().has_value()) {
-      QUIC_RELOADABLE_FLAG_COUNT_N(quic_save_user_agent_in_quic_session, 3, 3);
-      std::string uaid;
-      for (const auto& kv : header_list) {
-        if (quiche::QuicheTextUtils::ToLower(kv.first) ==
-            kUserAgentHeaderName) {
-          uaid = kv.second;
-          break;
-        }
+  if (!spdy_session()->user_agent_id().has_value()) {
+    std::string uaid;
+    for (const auto& kv : header_list) {
+      if (quiche::QuicheTextUtils::ToLower(kv.first) == kUserAgentHeaderName) {
+        uaid = kv.second;
+        break;
       }
-      spdy_session()->SetUserAgentId(std::move(uaid));
     }
+    spdy_session()->SetUserAgentId(std::move(uaid));
   }
 
   // TODO(b/134706391): remove |fin| argument.
diff --git a/quic/core/quic_crypto_server_stream.cc b/quic/core/quic_crypto_server_stream.cc
index 2b0b3e8..37beaba 100644
--- a/quic/core/quic_crypto_server_stream.cc
+++ b/quic/core/quic_crypto_server_stream.cc
@@ -408,14 +408,11 @@
     return;
   }
 
-  if (GetQuicReloadableFlag(quic_save_user_agent_in_quic_session)) {
-    QUIC_RELOADABLE_FLAG_COUNT_N(quic_save_user_agent_in_quic_session, 1, 3);
-    quiche::QuicheStringPiece user_agent_id;
-    message.GetStringPiece(quic::kUAID, &user_agent_id);
-    if (!session()->user_agent_id().has_value()) {
-      std::string uaid = user_agent_id.empty() ? "" : user_agent_id.data();
-      session()->SetUserAgentId(std::move(uaid));
-    }
+  quiche::QuicheStringPiece user_agent_id;
+  message.GetStringPiece(quic::kUAID, &user_agent_id);
+  if (!session()->user_agent_id().has_value()) {
+    std::string uaid = user_agent_id.empty() ? "" : user_agent_id.data();
+    session()->SetUserAgentId(std::move(uaid));
   }
 
   if (!result->info.server_nonce.empty()) {
diff --git a/quic/core/tls_server_handshaker.cc b/quic/core/tls_server_handshaker.cc
index bae9f1a..e8024e0 100644
--- a/quic/core/tls_server_handshaker.cc
+++ b/quic/core/tls_server_handshaker.cc
@@ -303,10 +303,7 @@
     return false;
   }
   ProcessAdditionalTransportParameters(client_params);
-  if (GetQuicReloadableFlag(quic_save_user_agent_in_quic_session) &&
-      !session()->user_agent_id().has_value()) {
-    QUIC_RELOADABLE_FLAG_COUNT_N(quic_save_user_agent_in_quic_session, 2, 3);
-
+  if (!session()->user_agent_id().has_value()) {
     if (client_params.user_agent_id.has_value()) {
       session()->SetUserAgentId(client_params.user_agent_id.value());
     } else if (client_params.google_quic_params) {
