—Software systems are characterized by continual change which often occurs concurrently across various artifact types. For example, changes may be initiated at the requirements, design, or source code level. Understanding patterns of co-evolution across requirements and source code provides fundamental building blocks for automating software engineering activities such as trace link creation and evolution, requirements analysis and maintenance, refactoring detection, and the generation of task recommendations. However, prior work has focused almost entirely on the evolution of individual artifact types such as requirements, design, or source code. In this paper we document patterns of co-evolution that occur between requirements and source code. We illustrate the utility of the patterns for detecting missing requirements and for evolving requirements to source code trace links.