Timing the Merge:

The merge was set to happen automatically based on a “total difficulty bomb.” This was when the total difficulty rating of all previous PoW hash completions reached a certain threshold.
As background, a hash in this context is a complex math problem that can only be solved by computers. This resulted in many thousands of computers running constantly at full speed under PoW, leading to massive energy consumption. The winning computer would get to confirm the block and receive the gas paid as a fee. This is what was known as ETH mining under PoW.
Every hash settled under PoW was assigned a numeric difficulty rating as blocks were added to the chain. The “total difficulty” was the sum of these individual hash difficulty ratings since the beginning of Ethereum.
Knowing the numeric value of the difficulty bomb was one thing but estimating the block number where it would be reached and trigger the merge to Proof-of-Stake was an entirely different animal.
You see, the difficulty rating to settle each block varied based on how many miners were trying to solve each hash.
This is why only estimates of the merge timing were made available from the Ethereum Foundation and other sources. Nobody knew when it would happen. Initially the various estimates differed by weeks and later by days.
On the day of the merge the published estimates still differed by hours, but we needed accuracy to the millisecond. So…we built the “Rocket Launcher.”