Factors and Effects of Communication in Distributed Software Development