The point of the article is that Flakes should never* import nixpkgs { inherit system; }
but use nixpkgs.legacyPackages.${system}
instead.
As a secondary option, you could also expose an overlay. But the primary mechanism should be to expose packages. Overlays, by design, cannot be used reliably without reading their implementation. Sometimes they have a dependency on another overlay, and the ordering can only be understood by reading the code. Same with knowing which attributes are going to be extended or overridden.
*: unless your project is not public. Or if nixpkgs needs to be parameterized.