# Quay Developer Technical User Stories
Quay is a complex, cloud-native application with many features and external dependencies. Naturally, this presents challenges for the the development team, especially when working on bugs and features involving integrations. There are a lot of tools and methods that exist in the cloud-native ecosystem that our team could be taking advantage of to make our lives easier and increase velocity.
### Format
**As a** *Quay developer* doing ___, **I want** ___ **in order to** ___.
### Epic
As a Quay developer, I want working on Quay to be a delightful, fun, and engaging experience in order to have fulfillment in my work (and also improve velocity).
### Stories
As a Quay developer, I want a consistent development environment which includes external services in order to spend more time debugging issues than setting up dependencies. [dev environment]
As a Quay developer, I want to run a performance test scenario against a realistic production deployment in order to easily measure the effects of my code changes. [performance test]
As a Quay developer, I want to build and deploy a new Quay application container image quickly in order to have a fast development loop. [container build time]
As a Quay developer, I want an opinionated method of running code locally which connects to external services in order to have a fast development loop. [dev environment]
As a Quay developer working on Clair integration, I want an end-to-end test suite in order to have confidence in my code changes. [e2e tests]
As a Quay developer reviewing a pull request, I want to deploy the changes to a consistent, production-like environment in order to easily test and review my teammates' changes. [review/testing]
As a Quay developer, I want a quicker method of testing source code from the config-tool repo inside of the Quay container in order to speed up the development process (reduce build times etc). [container build time/dev environment]
As a Quay developer, I want a more distributed code review system in order to increase knowledge in different coding practices and to more efficiently spread out the review workload. [review/testing]
As a quay developer, I want to know how to write unit tests efficiently, in order to provide quality PRs. [testing/knowledge]
As a quay team developer, I would like to know the basics of developing and testing the go applications, in order to contribute more broadly. [testing/knowledge]
As a Quay developer, I want a way to test changes made locally on different target platforms (OpenShift, k8s) in a less painful way, in order to have a more fluid/faster dev experience. [dev environment]
As a Quay developer, I want more coverage as part of our integration/e2e tests, in order to have more confidence in what is being released, short of deploying to production. [testing]
As a Quay developer, I want 100% unit test coverage on every Pull Request in order to ensure that no code paths are missed and that all dynamic code works as exected and regressions are easily avoided. [testing/review]
As a Quay developer, I want static type checks for Python code in order to avoid bugs from simple typos. [testing/knowledge]
As a Quay developer, I want <=10 mccabe complexity on all (Python) code, as verified by pytest in order to ensure we maintain readable code. [source code health]
As a Quay developer, I want easy-to-access services for all external integrations to quickly reproduce issues or enhance/test integration features. (e.g. MySQL w/ TLS, LDAP, etc...) [dev environment]
As a Quay developer, I want to spin up an OCP cluster that automatically spins up all Quay-related components and runs all unit tests + end-to-end tests using a bot or similar "1-click deployment" style. [dev environment]
As a Quay developer, I want consistent dependency updates for all of our projects to avoid large package updates last-minute. (Extended: I want a CI script to check this) [source code health]
As a Manager of Quay developers/Owner of a Community, I want a consistent, quick way to give a new hire a standard development environment in order to get them productive as quickly as possible and stay in line with the rest of the team. [knowledge/dev environment]