Over the last decade, Generic Programming has demonstrated to be an effective programming methodology for building reliable software artifacts. Most modern programming languages offer various forms of parametric polymorphism (“templates” in C++; “generics” in C#, Java, Ada; type classes in Haskell; etc.) as linguistic tools for building generic libraries. However, the practice of Generic Programming still remains the activity of a select few, highly trained individuals. There is a startling gap between the potential of the methodology and its practice. One cause of that is education. Another, an enabler of an effective education, is lack of adequate (linguistic and compilation) tools that directly support scalable Generic Programming at a level of abstraction close to mathematical formulation of algorithms. To bring the methodology to mainstream, at the scale done for object-oriented programming, we need programming language support and tools that go beyond conventional type checking, and traditional code generation strategies. Code generation has to surpass C++‘s currently successful applications of templates both in code quality and compile time for industrial scale programs. For that, we need modularity and structures; structures that allow the specification of semantic properties of user-defined abstractions (e.g. operations and types) and uses of semantic properties as fundamental aspects of the static structure of a program. This talk explores how to effectively apply recent progress (“Concepts” in C++20, “Modules” in C++ Modules TS, etc.) to the day-to-day task of constructing reliable and maintainable software at scale.