# Code sharing user scenarios ## User descriptions I am a OneDrive dev, building the Files experience to be hosted in OneDrive, Teams, and Outlook. I am an Outlook dev, building the Calendar experience to be hosted in Teams, SharePoint, and Outlook. I am a Ribbon dev, building the Ribbon to be hosted in multiple Office apps, and possibly 3rd party apps. I am a Fluent UI dev, building component building blocks to be consumed in all of the above including 3rd party apps. ## Cases these shared code devs go through ### I want to build and integrate a shared library across repo boundaries Inner loop scenarios: 1. I want to start a new shared library project a. I need a project template b. I need to know what and what not to do (shared libraries need to have a very explicit contract, tests to cover those contracts, docs) b. I need a repo c. I need a CI d. I need it to auto publish e. I need it to be discoverable (npm package, public or private) 2. I want to integrate a shared library into an app a. I need to clone the library and the app repos b. I need to link them together c. I need to localhost app 3. I want to make local changes to 1 or more shared libraries, and see them integrated into a live app without deploying it 4. When I submit a PR to my library, I want to provide devs with a durable url to test the changes in an endpoint. ### I want my shared library to be trustworthy When bugs in my library make it to the app, it hurts trust in sharing code. Testing scenarios to prevent bugs: 5. I want to have my CI run multiple endpoint consumer tests with my local library to prevent bugs downstream. 6. I want endpoints to have visual regression tests informing me when i change their app pixels unintentionally. 7. When a bug is found I want to go to the exact configuration of the app that it was found in, with debug source maps so that I can pinpoint the bug and plan a fix. 8. An endpoint can be easily re-tested without building because their tests can run as an npm package the tests against the live site or service. (tests as a package.) ### I want my library to always be up-to-date in endpoints 7. I want my library changes to be automatically picked up by applications 8. When a problem occurs with an automated update, I want to know about the problems a partner had with my changes so that we can unblock. 9. My change requires library changes AND app changes, living in separate repos. I want to make all the changes and then have them consumed in the right order with minimal effort. 10. A tree of dependencies exist - ui library -> experience -> app code, and they all require updates. Coordinate all of them.