A Theory of Communication in Distributed Software Development Teams