Three teams need the same fixtures, the same API client and the same page objects. Each writes their own. Six months later there are three logins that behave differently and a bug fixed in one of them.
The answer is to publish the shared layer as a package. That converts your test code into a product with users, and the obligations that come with that are what this lecture is about.
What belongs in the package.
Framework-level things: the extended test object, authentication fixtures, API client base classes, data factories, shared page objects for screens every team touches, custom matchers, and reporting helpers.