FWIW, I found this kind of question to be much less frustrating when I remember that communication is a 2+ player activity. If poor communication is happening, it is the responsibility of all parties involved to remedy the problem. That is, it's not that "Joe is bad at communication": it's more along the lines of "Joe and I do not communicate well". There are always hurdles, but if you're motivated to communicate with somebody, work with them to overcome those hurdles. This is
not pointlessly-spent energy: software engineering is primarily a communication-oriented profession (either with other people or communicating your exact intent via code). It's part of the job.
Some strategies to employ that I've picked up from professors and colleagues over the years:
* If you ask a question and you feel that the answer does not adequately address it, ask for further clarification. The person answering may feel that they've answered based on the knowledge that they have but if you're missing some critical bit of context, what they've said might not make sense to you. Canned phrases: "I'm sorry, I'm still not understanding. Can you help get me caught up?" or "I might be missing something: [specific followup question about their answer here]" or "I'm not sure, but we might be talking about different things. When you say ___, do you mean ___ or ___?".
* If the conversation wanders, focus on what they're saying and let them finish. Once they've completed their thought, if you're still pretty sure that it's tangential to what you were asking/talking about before, ask a question that refocuses the conversation. Canned phrases: "I think we may be getting slightly off track here. We were talking about xyz, but now we're talking about ___ and I'm a little confused at the relation between the two." or "I'd really like to talk with you more about ____, but before we move on, can we quickly wrap up about the xyz question -- [repeat your original question]".
* If team discussions go off the rails frequently, bring that up in a retro sometime. If everyone agrees that's actually happening (remember that your perception of the conversation might be different from others), try to get people to agree on a strategy for noticing tangential discussions and then refocus the conversation to the topic at hand. A team I was on picked a random word that anyone could say or drop in the zoom chat during a meeting and everyone was supposed to stop talking about whatever they were talking about and come back to the topic at hand or justify how it was relevant. We had one team member who often hijacked the discussion with stream-of-consciousness style talking that started relevant and then wandered. Eventually, somebody just dropped "Objection. Relevance?" in the chat, everyone had a laugh, and then we talked about it in retro. This isn't something that there are really canned phrases for -- it's a team dynamic thing.
* Lack of clarity in speech is usually lack of clarity in thought in my experience. This is an opportunity for you to help them clarify their own thinking as well as yours. This takes a lot of practice and it can be tiring for introverts especially, but it's really valuable time spent -- especially on a technical team. Canned phrases: "I'm not super clear on the details of ____. Do you have a few minutes and can we dive into that a bit?" (then continue to ask probing questions until they get to either a question or an "i don't know"). This works best if you already have a bit of context about the topic of conversation/problem domain.
* Over-complicating can either be an indicator of lack of clarity on their part or that it's actually a really complicated topic and that the question isn't valid as stated. For instance, "How does the internet work?" is a question that can have different answers depending on your audience. For non-technical people, it might be as simple as "You plug these cables in, make sure these lights are on, here's your wifi network name and password. I've already set up your devices for you and now Netflix works". For technical people, there are varying levels of depth that you can go into. If the answer is not at the level of complexity that you're expecting, you can request a different level of complexity. Canned phrases: "I see that there is a ton of detail to go into here and that you know a lot about it, but I think I need to understand the big picture before we dive into the details. Can you give me the sparknotes version of what ___ is/does? Explain it like I'm five." or in the other direction "Cool, that really helps me understand the big picture. As I understand, part of the problem entails [some slice of the problem domain]. Can we talk about the overall goal of that part of the system and then a bit of detail about how it works/what it does?"