He said, she said: without using dialogue tags.
Okay, we all agree “said” is usually best, because it is most invisible, and the least insulting to the reader.
Words like “asserted, jeered, insisted,” prod the reader.
Hey, in case you didn’t get it from the line of dialogue, this is how the speaker is feeling.
The primary purpose of a dialogue tag is to identify the speaker, not convey emotion. It’s efficient. It works. But a dialogue tag is only one way of doing this.
Another is to replace the tag within an action by the speaker.
Joe slapped himself on the forehead. “What the heck?”
There is no doubt that the speaker and the forehead-slapper are one and the same. The action line and the spoken words share a common paragraph.
Still, double-dipping is common. “What the heck?” Joe said, slapping himself on the forehead.
But the combination of a quote and an action are usually fine without the tag. (Time for a new example, Joe has about slapped himself silly).
“I’m out of here!” Joe said, heading for the door, could be rewritten without the tag:: “I’m out of here!” Joe headed for the door.
Sometimes the double-dip works better rhythmically. And when the speech and the action are simultaneous it is also a good choice: “Joe, you can keep the goddamned ring,” Lola said as she threw it at him.
A dialogue tag is an efficient way to let the reader know who is speaking, but clarity can be achieved by replacing the invisible tag with an action.