Real-world software systems today are significantly more complex than they were decades ago, when the dominant programming models we still use today were invented. Do yesterday's models match well with today's software development? This talk will illustrate why the two most important programming models -- objects and modules -- are both lagging behind, and how they can catch up by shifting the design focus on modeling inter-object or inter-module *interactions*. The resulting new object model allows more software designers' intentions to be directly expressed on the language level, leading to a smooth transition from design to implementation and better round-trip engineering. The resulting module system can explicitly support many Internet-era concepts that have been largely missed by existing module systems, such as distributed communication, dynamic linking and version control.