Even if it's ad hoc. What's the meeting about? Then get specific. Then answer through text.
I think we covered everything. Is there anything else? Rinse, repeat.
Put constraints: topics, duration, time of day, day.
Put mutual exclusion: I'm working on this very important thing priority we agreed was next. Is the meeting more important than delivering this? Nope. If I'm on this meeting, I'm not working on this.
There must be a price to schedule a meeting so it's not free to waste everyone's time.
It works great with people who love to talk and can go on for hours without much signal.
The way I do it with the team for our platform is that we use the platform itself: it has a real-time collaborative notebook.
The team members will write down the topics and questions they'd like to address whenever they can (asynchronously).
Sometimes, someone will answer a question or clarify a point written by another, with references to issues or merge requests or external resources. All that is in the notebook.
The meeting time will be set collaboratively according to everyone's availability and agreed upon.
We get on a call and we all have the notebook open where we see each other's cursor and changes live.
We go over each issue. Sometimes, we'll add example code that can run right into the notebook (which is our minutes of meeting).
We come up with decisions. We prioritize. This is next. X will do Y. Z can help on that. W has answered that in issue U.
Meeting's over.
Expectations. It's super super hard to guess where people are & what they get. A lot of people stay stuck in first gear because there's colleagues who never tune in, & being explanatory is a courtesy to keep reminding folks of basic shit. Raise the expectation & be explicit about what's known already.
Take everyone off paid zoom so it cuts you out after 40 minutes.
Sometimes because of the situation. Other times just too much coffee or sugar in my system that has hurried my breathing.