diff --git a/quiche/quic/core/quic_connection.cc b/quiche/quic/core/quic_connection.cc
index 1c0a41b..dc84b68 100644
--- a/quiche/quic/core/quic_connection.cc
+++ b/quiche/quic/core/quic_connection.cc
@@ -2392,14 +2392,10 @@
     // Pacing limited: CanWrite returned false, and it has scheduled a send
     // alarm before it returns.
     if (send_alarm_->deadline() > max_deadline) {
-      QUIC_BUG(quic_send_alarm_postponed)
-          << "previous deadline:" << max_deadline
-          << ", deadline from CanWrite:" << send_alarm_->deadline()
-          << ", last_can_write_reason:"
-          << static_cast<int>(last_can_write_reason_)
-          << ", packets_sent_on_last_successful_can_write:"
-          << packets_sent_on_last_successful_can_write_;
-      QUIC_DVLOG(1) << "Send alarm restored after processing packet.";
+      QUIC_DVLOG(1)
+          << "Send alarm restored after processing packet. previous deadline:"
+          << max_deadline
+          << ", deadline from CanWrite:" << send_alarm_->deadline();
       // Restore to the previous, earlier deadline.
       send_alarm_->Update(max_deadline, QuicTime::Delta::Zero());
     } else {
@@ -3200,11 +3196,6 @@
       << ENDPOINT << "Failed to flush ACK frame";
 }
 
-void QuicConnection::RecordLastCanWriteReason(LastCanWriteReason reason) {
-  last_can_write_reason_ = reason;
-  packets_sent_on_last_successful_can_write_ = stats_.packets_sent;
-}
-
 bool QuicConnection::CanWrite(HasRetransmittableData retransmittable) {
   if (!connected_) {
     return false;
@@ -3230,9 +3221,6 @@
     // Try to coalesce packet, only allow to write when creator is on soft max
     // packet length. Given the next created packet is going to fill current
     // coalesced packet, do not check amplification factor.
-    if (packet_creator_.HasSoftMaxPacketLength()) {
-      RecordLastCanWriteReason(LAST_CAN_WRITE_REASON_COALESCE_PACKET);
-    }
     return packet_creator_.HasSoftMaxPacketLength();
   }
 
@@ -3241,7 +3229,6 @@
     // 1) firing PTO,
     // 2) bundling CRYPTO data with ACKs,
     // 3) coalescing CRYPTO data of higher space.
-    RecordLastCanWriteReason(LAST_CAN_WRITE_REASON_PENDING_TIMER);
     return true;
   }
 
@@ -3264,7 +3251,6 @@
 
   // Allow acks and probing frames to be sent immediately.
   if (retransmittable == NO_RETRANSMITTABLE_DATA) {
-    RecordLastCanWriteReason(LAST_CAN_WRITE_REASON_NO_RETRANSMITTABLE_DATA);
     return true;
   }
   // If the send alarm is set, wait for it to fire.
@@ -3283,7 +3269,6 @@
   if (!delay.IsZero()) {
     if (delay <= release_time_into_future_) {
       // Required delay is within pace time into future, send now.
-      RecordLastCanWriteReason(LAST_CAN_WRITE_REASON_DELAY_WITHIN_RELEASE_TIME);
       return true;
     }
     // Cannot send packet now because delay is too far in the future.
@@ -3293,7 +3278,6 @@
     return false;
   }
 
-  RecordLastCanWriteReason(LAST_CAN_WRITE_REASON_NO_DELAY);
   return true;
 }
 
diff --git a/quiche/quic/core/quic_connection.h b/quiche/quic/core/quic_connection.h
index 621f86c..14033bd 100644
--- a/quiche/quic/core/quic_connection.h
+++ b/quiche/quic/core/quic_connection.h
@@ -2413,21 +2413,6 @@
   // The ECN codepoint of the last packet to be sent to the writer, which
   // might be different from the next codepoint in per_packet_options_.
   QuicEcnCodepoint last_ecn_codepoint_sent_ = ECN_NOT_ECT;
-
-  // The reason for the last call to CanWrite with a true return value.
-  enum LastCanWriteReason : uint8_t {
-    LAST_CAN_WRITE_REASON_NONE = 0,
-    LAST_CAN_WRITE_REASON_COALESCE_PACKET,
-    LAST_CAN_WRITE_REASON_PENDING_TIMER,
-    LAST_CAN_WRITE_REASON_NO_RETRANSMITTABLE_DATA,
-    LAST_CAN_WRITE_REASON_DELAY_WITHIN_RELEASE_TIME,
-    LAST_CAN_WRITE_REASON_NO_DELAY,
-  };
-  void RecordLastCanWriteReason(LastCanWriteReason reason);
-  // TODO(b/299071230): Delete |packets_sent_on_last_successful_can_write_| and
-  // |last_can_write_reason_| after debugging.
-  LastCanWriteReason last_can_write_reason_ = LAST_CAN_WRITE_REASON_NONE;
-  QuicPacketCount packets_sent_on_last_successful_can_write_ = 0;
 };
 
 }  // namespace quic
