Transaction fees on a public blockchain vary enormously from one hour to the next. The reason is that block space is a scarce commodity sold by auction rather than a service with a price list.
Block space is capped by design
Each block accommodates a limited quantity of transaction data. That ceiling exists so ordinary machines can validate the chain without specialised infrastructure.
Raising it would allow more transactions per block but would increase the resources required to participate in validation, concentrating the network.
The cap is therefore a deliberate constraint protecting decentralisation, and congestion is the price paid for it.
Fees are bids in a continuous auction
Users attach a fee to each transaction, and block producers select from the waiting pool. Rational producers include the transactions offering the most per unit of space.
A transaction bidding below what others are offering simply waits, sometimes for a long time, rather than being rejected outright.
This makes the fee a function of what everyone else is currently bidding, which is why identical transactions cost wildly different amounts at different times.
Size in data, not value, determines cost
The auction prices space, so a transaction's fee depends on how many bytes or how much computation it consumes, not on the amount being moved.
Transferring a very large sum can cost the same as a small one, while a complex transaction consolidating many inputs costs considerably more.
This is why wallets that manage their inputs efficiently produce cheaper transactions than those that do not, given identical amounts.
Demand spikes are the source of volatility
Capacity is fixed in the short run and demand is not, so any surge in activity translates directly into higher fees rather than into more throughput.
Periods of heavy trading, popular token issuances and automated activity all compete for the same limited space as ordinary payments.
Because supply cannot respond, the entire adjustment happens through price, which is what produces the sharp fee spikes users observe.
Layered designs move activity off the base chain
Secondary systems batch many transactions together and settle a compressed summary to the underlying chain, spreading one block-space cost across many payments.
The per-transaction fee falls sharply, at the cost of relying on the secondary system's own assumptions until the settlement occurs.
Base-layer capacity remains the ultimate constraint, so these designs relieve fee pressure without removing the auction that creates it.