Alleviating Challenges of Distributed Software Development through Agile Practices