Two voices
I have been using the counterpoint framing for a year now, and it has held up better than most framings I have tried. But I had the emphasis wrong.
I wrote that the parallel-fifths rule exists to preserve independence, and that interfaces should therefore keep their signals independent. That is half of it. Independence is not what counterpoint is for. It is the constraint that makes the thing it is for possible.
What it is actually for
Counterpoint is for making several lines add up to one harmony without any of them becoming an accompaniment. The independence is not a virtue in itself; it is the price of admission. A voice that has surrendered its independence cannot contribute anything the other voices were not already saying.
So the question for an interface is not “are these signals independent?” It is “do these signals, together, describe one coherent state — and does each one carry something the others do not?”
That reframing changed what I do about it. I used to separate things: give the toast its own corner, give the sheet its own focus trap, stop them colliding. Separation is cheap and it does work. But it produces interfaces where four things are politely not-colliding in four corners, and the user still has to assemble the state themselves.
Merging is also an answer
The better fix is often to notice that two signals were saying the same thing and should have been one. The spinner and the skeleton were both saying not yet. They did not need to be separated; one of them needed to not exist.
Bach does this constantly. A voice drops out for two bars, not because it has nothing to say, but because the texture is already carrying the idea and a fourth line would only thicken it. Silence in a voice is a compositional decision, not an absence.
The interface version: the most useful thing a component can do, quite often, is render nothing.