All true, and I would add that the sharing of ideas helps you to refine them, in the same way that describing a programming problem to someone else often helps you resolve it, because you have to structure the problem in language that makes sense to the other person. Sometimes simply structuring a concept in a way suitable for speech presents obvious answers that weren't possible when it was a ton of internal dialogue.