Global software development presents many challenges that are difficult to simulate in a course environment. We present teaching patterns such as remote testing, subordinate role, partitioning, and continuous development that are motivated by industry experience. Our goal is to give students problems that simulate real global software development. Each teaching pattern discusses the educational methodology, student challenges and learning outcomes that provide the students firsthand experience working on projects with remote teams.