In this first quarter of the 21st century, many of the key transformations in our societies and economies were made possible by software. At the same time, the processes, techniques, practices, and tools used by software engineers changed significantly. Therefore, in this talk---inspired by the research work we have been conducting in the last few years---we will summarize and attempt to unify these changes in a single conceptual framework. We will also discuss the factors that caused this evolution of software development practices. Finally, we will list some challenges and opportunities that contemporary software development practices and processes present to researchers and educators in the area.