Coordination is important in large-scale software development because of the many people involved and the complex dependencies present in software tasks. Even small improvements in productivity can lead to substantial cost savings and competitive advantage. But despite great technological advances in software engineering and collaboration tools in recent years, coordination in software development projects continues to be problematic. Traditional theories suggest that team members coordinate by programming their tasks and by communicating with each other, but more recent research also suggests that they coordinate through work familiarity, and team cognition mechanisms like shared mental models. This paper reports on the results of a multi-method research investigation of how shared mental models, work familiarity and geographic dispersion affect coordination in software teams. This research is based on three studies conducted at a large telecommunications company: face-to-face interviews, survey, and archival studies. Results show that shared mental models have a positive effect on team coordination and that prior familiarity with the same software parts and projects reduces software development time. Results also indicate that geographic dispersion increases software development time and that the effect of work familiarity is stronger for geographically distributed teams than for colocated teams.