diff --git a/quic/core/http/end_to_end_test.cc b/quic/core/http/end_to_end_test.cc
index 1be5ad6..e8c1643 100644
--- a/quic/core/http/end_to_end_test.cc
+++ b/quic/core/http/end_to_end_test.cc
@@ -630,16 +630,9 @@
   EXPECT_EQ("200", client_->response_headers()->find(":status")->second);
   EXPECT_FALSE(client_->client()->EarlyDataAccepted());
   EXPECT_FALSE(client_->client()->ReceivedInchoateReject());
-  if (GetQuicReloadableFlag(quic_negotiate_ack_delay_time)) {
-    EXPECT_EQ(kClientMaxAckDelay, GetSentPacketManagerFromFirstServerSession()
-                                      ->peer_max_ack_delay()
-                                      .ToMilliseconds());
-  } else {
-    EXPECT_EQ(kDefaultDelayedAckTimeMs,
-              GetSentPacketManagerFromFirstServerSession()
-                  ->peer_max_ack_delay()
-                  .ToMilliseconds());
-  }
+  EXPECT_EQ(kClientMaxAckDelay, GetSentPacketManagerFromFirstServerSession()
+                                    ->peer_max_ack_delay()
+                                    .ToMilliseconds());
 }
 
 // Simple transaction, but set a non-default ack exponent at the client
diff --git a/quic/core/quic_config.cc b/quic/core/quic_config.cc
index 68638e4..b396020 100644
--- a/quic/core/quic_config.cc
+++ b/quic/core/quic_config.cc
@@ -1006,10 +1006,7 @@
     max_unidirectional_streams_.ToHandshakeMessage(out);
     ack_delay_exponent_.ToHandshakeMessage(out);
   }
-  if (GetQuicReloadableFlag(quic_negotiate_ack_delay_time)) {
-    QUIC_RELOADABLE_FLAG_COUNT_N(quic_negotiate_ack_delay_time, 1, 4);
-    max_ack_delay_ms_.ToHandshakeMessage(out);
-  }
+  max_ack_delay_ms_.ToHandshakeMessage(out);
   bytes_for_connection_id_.ToHandshakeMessage(out);
   initial_round_trip_time_us_.ToHandshakeMessage(out);
   initial_stream_flow_control_window_bytes_.ToHandshakeMessage(out);
@@ -1107,9 +1104,7 @@
                                                     error_details);
   }
 
-  if (GetQuicReloadableFlag(quic_negotiate_ack_delay_time) &&
-      error == QUIC_NO_ERROR) {
-    QUIC_RELOADABLE_FLAG_COUNT_N(quic_negotiate_ack_delay_time, 2, 4);
+  if (error == QUIC_NO_ERROR) {
     error = max_ack_delay_ms_.ProcessPeerHello(peer_hello, hello_type,
                                                error_details);
   }
@@ -1160,10 +1155,7 @@
       GetMaxBidirectionalStreamsToSend());
   params->initial_max_streams_uni.set_value(
       GetMaxUnidirectionalStreamsToSend());
-  if (GetQuicReloadableFlag(quic_negotiate_ack_delay_time)) {
-    QUIC_RELOADABLE_FLAG_COUNT_N(quic_negotiate_ack_delay_time, 3, 4);
-    params->max_ack_delay.set_value(GetMaxAckDelayToSendMs());
-  }
+  params->max_ack_delay.set_value(GetMaxAckDelayToSendMs());
   params->ack_delay_exponent.set_value(GetAckDelayExponentToSend());
   params->disable_active_migration =
       connection_migration_disabled_.HasSendValue() &&
@@ -1297,10 +1289,7 @@
       params.initial_max_stream_data_uni.value());
 
   if (!is_resumption) {
-    if (GetQuicReloadableFlag(quic_negotiate_ack_delay_time)) {
-      QUIC_RELOADABLE_FLAG_COUNT_N(quic_negotiate_ack_delay_time, 4, 4);
-      max_ack_delay_ms_.SetReceivedValue(params.max_ack_delay.value());
-    }
+    max_ack_delay_ms_.SetReceivedValue(params.max_ack_delay.value());
     if (params.ack_delay_exponent.IsValid()) {
       ack_delay_exponent_.SetReceivedValue(params.ack_delay_exponent.value());
     }
diff --git a/quic/core/quic_config_test.cc b/quic/core/quic_config_test.cc
index 16c7c56..050a091 100644
--- a/quic/core/quic_config_test.cc
+++ b/quic/core/quic_config_test.cc
@@ -180,12 +180,8 @@
             2 * kInitialStreamFlowControlWindowForTest);
   EXPECT_EQ(config_.ReceivedInitialSessionFlowControlWindowBytes(),
             2 * kInitialSessionFlowControlWindowForTest);
-  if (GetQuicReloadableFlag(quic_negotiate_ack_delay_time)) {
-    EXPECT_TRUE(config_.HasReceivedMaxAckDelayMs());
-    EXPECT_EQ(kTestMaxAckDelayMs, config_.ReceivedMaxAckDelayMs());
-  } else {
-    EXPECT_FALSE(config_.HasReceivedMaxAckDelayMs());
-  }
+  EXPECT_TRUE(config_.HasReceivedMaxAckDelayMs());
+  EXPECT_EQ(kTestMaxAckDelayMs, config_.ReceivedMaxAckDelayMs());
 
   // IETF QUIC stream limits should not be received in QUIC crypto messages.
   EXPECT_FALSE(
@@ -238,12 +234,8 @@
   EXPECT_FALSE(config_.HasReceivedIPv6AlternateServerAddress());
   EXPECT_TRUE(config_.HasReceivedStatelessResetToken());
   EXPECT_EQ(kTestResetToken, config_.ReceivedStatelessResetToken());
-  if (GetQuicReloadableFlag(quic_negotiate_ack_delay_time)) {
-    EXPECT_TRUE(config_.HasReceivedMaxAckDelayMs());
-    EXPECT_EQ(kTestMaxAckDelayMs, config_.ReceivedMaxAckDelayMs());
-  } else {
-    EXPECT_FALSE(config_.HasReceivedMaxAckDelayMs());
-  }
+  EXPECT_TRUE(config_.HasReceivedMaxAckDelayMs());
+  EXPECT_EQ(kTestMaxAckDelayMs, config_.ReceivedMaxAckDelayMs());
 
   // IETF QUIC stream limits should not be received in QUIC crypto messages.
   EXPECT_FALSE(
@@ -507,7 +499,6 @@
     // TransportParameters are only used for QUIC+TLS.
     return;
   }
-  SetQuicReloadableFlag(quic_negotiate_ack_delay_time, true);
   TransportParameters params;
 
   params.initial_max_stream_data_bidi_local.set_value(
