The document discusses making roles explicit in software design to achieve flexibility and extensibility. It recommends using interfaces to define roles and role-specific behavior. This allows application code to specify roles and infrastructure code to provide role-specific implementations and fetching strategies. When roles are well-defined through interfaces, new behaviors can be added without changing existing code.