diff --git a/quic/core/congestion_control/bbr2_misc.cc b/quic/core/congestion_control/bbr2_misc.cc
index 026b33a..1bee152 100644
--- a/quic/core/congestion_control/bbr2_misc.cc
+++ b/quic/core/congestion_control/bbr2_misc.cc
@@ -188,7 +188,6 @@
 void Bbr2NetworkModel::AdaptLowerBounds(
     const Bbr2CongestionEvent& congestion_event) {
   if (Params().bw_lo_mode_ != Bbr2Params::DEFAULT) {
-    QUICHE_DCHECK(Params().bw_startup);
     if (congestion_event.bytes_lost == 0) {
       return;
     }
diff --git a/quic/core/congestion_control/bbr2_misc.h b/quic/core/congestion_control/bbr2_misc.h
index 4d1cc20..21ceaaf 100644
--- a/quic/core/congestion_control/bbr2_misc.h
+++ b/quic/core/congestion_control/bbr2_misc.h
@@ -208,9 +208,6 @@
 
   // Set the pacing gain to 25% larger than the recent BW increase in STARTUP.
   bool decrease_startup_pacing_at_end_of_round = false;
-
-  // Latch the flag for quic_bbr2_bw_startup.
-  const bool bw_startup = GetQuicReloadableFlag(quic_bbr2_bw_startup);
 };
 
 class QUIC_EXPORT_PRIVATE RoundTripCounter {
diff --git a/quic/core/congestion_control/bbr2_sender.cc b/quic/core/congestion_control/bbr2_sender.cc
index c339bc5..cb5814a 100644
--- a/quic/core/congestion_control/bbr2_sender.cc
+++ b/quic/core/congestion_control/bbr2_sender.cc
@@ -133,9 +133,7 @@
   if (ContainsQuicTag(connection_options, kBBQ2)) {
     params_.startup_cwnd_gain = 2.885;
     params_.drain_cwnd_gain = 2.885;
-    if (params_.bw_startup) {
-      model_.set_cwnd_gain(params_.startup_cwnd_gain);
-    }
+    model_.set_cwnd_gain(params_.startup_cwnd_gain);
   }
   if (ContainsQuicTag(connection_options, kB2NE)) {
     params_.always_exit_startup_on_excess_loss = false;
@@ -155,20 +153,16 @@
   if (ContainsQuicTag(connection_options, kBSAO)) {
     model_.EnableOverestimateAvoidance();
   }
-  if (params_.bw_startup && ContainsQuicTag(connection_options, kBBQ6)) {
-    QUIC_RELOADABLE_FLAG_COUNT_N(quic_bbr2_bw_startup, 1, 4);
+  if (ContainsQuicTag(connection_options, kBBQ6)) {
     params_.decrease_startup_pacing_at_end_of_round = true;
   }
-  if (params_.bw_startup && ContainsQuicTag(connection_options, kBBQ7)) {
-    QUIC_RELOADABLE_FLAG_COUNT_N(quic_bbr2_bw_startup, 2, 4);
+  if (ContainsQuicTag(connection_options, kBBQ7)) {
     params_.bw_lo_mode_ = Bbr2Params::QuicBandwidthLoMode::MIN_RTT_REDUCTION;
   }
-  if (params_.bw_startup && ContainsQuicTag(connection_options, kBBQ8)) {
-    QUIC_RELOADABLE_FLAG_COUNT_N(quic_bbr2_bw_startup, 3, 4);
+  if (ContainsQuicTag(connection_options, kBBQ8)) {
     params_.bw_lo_mode_ = Bbr2Params::QuicBandwidthLoMode::INFLIGHT_REDUCTION;
   }
-  if (params_.bw_startup && ContainsQuicTag(connection_options, kBBQ9)) {
-    QUIC_RELOADABLE_FLAG_COUNT_N(quic_bbr2_bw_startup, 4, 4);
+  if (ContainsQuicTag(connection_options, kBBQ9)) {
     params_.bw_lo_mode_ = Bbr2Params::QuicBandwidthLoMode::CWND_REDUCTION;
   }
 }
diff --git a/quic/core/congestion_control/bbr2_simulator_test.cc b/quic/core/congestion_control/bbr2_simulator_test.cc
index 9cd5966..e26760e 100644
--- a/quic/core/congestion_control/bbr2_simulator_test.cc
+++ b/quic/core/congestion_control/bbr2_simulator_test.cc
@@ -122,9 +122,6 @@
 class Bbr2SimulatorTest : public QuicTest {
  protected:
   Bbr2SimulatorTest() : simulator_(&random_) {
-    // Enable this for all tests because it moves where cwnd and pacing gain
-    // are initialized.
-    SetQuicReloadableFlag(quic_bbr2_bw_startup, true);
     // Prevent the server(receiver), which only sends acks, from closing
     // connection due to too many outstanding packets.
     SetQuicFlag(FLAGS_quic_max_tracked_packet_count, 1000000);
@@ -596,7 +593,6 @@
 
 // Test the number of losses decreases with packet-conservation pacing.
 TEST_F(Bbr2DefaultTopologyTest, PacketLossBBQ6SmallBufferStartup) {
-  SetQuicReloadableFlag(quic_bbr2_bw_startup, true);
   SetConnectionOption(kBBQ2);  // Increase CWND gain.
   SetConnectionOption(kBBQ6);
   DefaultTopologyParams params;
@@ -612,7 +608,6 @@
 
 // Test the number of losses decreases with min_rtt packet-conservation pacing.
 TEST_F(Bbr2DefaultTopologyTest, PacketLossBBQ7SmallBufferStartup) {
-  SetQuicReloadableFlag(quic_bbr2_bw_startup, true);
   SetConnectionOption(kBBQ2);  // Increase CWND gain.
   SetConnectionOption(kBBQ7);
   DefaultTopologyParams params;
@@ -628,7 +623,6 @@
 
 // Test the number of losses decreases with Inflight packet-conservation pacing.
 TEST_F(Bbr2DefaultTopologyTest, PacketLossBBQ8SmallBufferStartup) {
-  SetQuicReloadableFlag(quic_bbr2_bw_startup, true);
   SetConnectionOption(kBBQ2);  // Increase CWND gain.
   SetConnectionOption(kBBQ8);
   DefaultTopologyParams params;
@@ -644,7 +638,6 @@
 
 // Test the number of losses decreases with CWND packet-conservation pacing.
 TEST_F(Bbr2DefaultTopologyTest, PacketLossBBQ9SmallBufferStartup) {
-  SetQuicReloadableFlag(quic_bbr2_bw_startup, true);
   SetConnectionOption(kBBQ2);  // Increase CWND gain.
   SetConnectionOption(kBBQ9);
   DefaultTopologyParams params;
diff --git a/quic/core/congestion_control/bbr2_startup.cc b/quic/core/congestion_control/bbr2_startup.cc
index 80b4bcd..003ec70 100644
--- a/quic/core/congestion_control/bbr2_startup.cc
+++ b/quic/core/congestion_control/bbr2_startup.cc
@@ -23,11 +23,9 @@
   sender_->connection_stats_->slowstart_count = 1;
   sender_->connection_stats_->slowstart_duration = QuicTimeAccumulator();
   sender_->connection_stats_->slowstart_duration.Start(now);
-  if (sender->Params().bw_startup) {
-    // Enter() is never called for Startup, so the gains needs to be set here.
-    model_->set_pacing_gain(Params().startup_pacing_gain);
-    model_->set_cwnd_gain(Params().startup_cwnd_gain);
-  }
+  // Enter() is never called for Startup, so the gains needs to be set here.
+  model_->set_pacing_gain(Params().startup_pacing_gain);
+  model_->set_cwnd_gain(Params().startup_cwnd_gain);
 }
 
 void Bbr2StartupMode::Enter(QuicTime /*now*/,
@@ -64,7 +62,6 @@
 
   if (Params().decrease_startup_pacing_at_end_of_round) {
     QUICHE_DCHECK_GT(model_->pacing_gain(), 0);
-    QUICHE_DCHECK(Params().bw_startup);
     if (congestion_event.end_of_round_trip &&
         !congestion_event.last_sample_is_app_limited) {
       // Multiply by startup_pacing_gain, so if the bandwidth doubles,
@@ -93,10 +90,6 @@
       }
       max_bw_at_round_beginning_ = model_->MaxBandwidth();
     }
-  } else if (!Params().bw_startup) {
-    // When the flag is enabled, set these in the constructor.
-    model_->set_pacing_gain(Params().startup_pacing_gain);
-    model_->set_cwnd_gain(Params().startup_cwnd_gain);
   }
 
   // TODO(wub): Maybe implement STARTUP => PROBE_RTT.
diff --git a/quic/core/quic_flags_list.h b/quic/core/quic_flags_list.h
index 059abe3..55fa033 100644
--- a/quic/core/quic_flags_list.h
+++ b/quic/core/quic_flags_list.h
@@ -12,7 +12,6 @@
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_allow_client_enabled_bbr_v2, false)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_alps_include_scheme_in_origin, false)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_bbr2_avoid_too_low_probe_bw_cwnd, false)
-QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_bbr2_bw_startup, true)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_bbr2_fewer_startup_round_trips, true)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_can_send_ack_frequency, true)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_close_connection_with_too_many_outstanding_packets, true)
