Starting from the JDK itself, a wave of migrations to module systems is bound to propagate throughout the Java landscape. In this session, expand your mental toolbox by learning what modularity is, why it is important, and how to divide your monolithic application into well-designed functional modules. First you will gain an intimate understanding of modularity by hearing about several of its mind-bending paradoxes. Then you will learn how popular design principles apply to creating modules and their APIs. Finally you will learn how common monolithic software architectures exhibit various degrees of modularization of functional features and what that means for your forthcoming modularization efforts.