The friction showed up as silence on Fogo.
Not an error. Not a revert. Just... gaps in the stream. I was watching transaction confirmations flow across my terminal on Fogo when the rhythm broke. Regular beat, regular beat, then nothing. Then two at once. Then nothing again. I checked my RPC first. Then the network latency. Then I started timing the gaps. Eleven milliseconds. Twenty-two. Always multiples. Like something was counting in intervals I couldn't hear.
I thought it was congestion. Then I thought it was priority fees. Then I looked at my own contract and saw the problem: every transaction was touching the same account. Not big writes. Just... the same address. The runtime was being polite on Fogo. Serializing my politeness into silence.
The SVM doesn't explain this. It just executes. Parallel where possible, patient where not. My account contention wasn't a bug. It was a shape.
The runtime saw eight transactions reaching for the same lock and chose order over speed. Correct, yes. Fast, no.
I tried fixing it with bigger batches. Fewer transactions, more work each. The gaps grew. More instructions touching the same account meant longer holds. The scheduler didn't care about my efficiency. It cared about isolation. What could breathe alone versus what needed to wait its turn on Fogo.

The rebuild started with subtraction. One account became four. The authority split, user records here, global params there, temporary state in discardable accounts that expired after use. More complexity to manage. More signing keys. More state to track across boundaries. But the rhythm changed. The silence between confirmations shortened. Not because the runtime got faster.
Because my transactions stopped queueing for the same door.
I stopped thinking about "state" as a place. Started thinking about it as traffic. Which paths could run parallel and which merged into single lanes. The contract state layout became a map of possible collisions. I drew it on paper, actual paper, arrows showing which accounts touched which. The dense clusters were obvious once I looked. Obvious and embarrassing.
There's no metric for this in the explorer. No "contention score" to optimize against. You feel it in the confirmation timing. In the way some transaction patterns flow and others stutter. The execution slots are there, open, waiting. Your job is to stop blocking them with your own architecture.
And the runtime keeps slotting work through, even when your layout falls half a pattern behind. Fogo doesn't slow down for you. It just keeps moving.