# Core & Tooling Team

go/androidx/team

<!--*
# Document freshness: For more information, see go/fresh-source.
freshness: { owner: 'alanv' reviewed: '2022-12-09' }
*-->

## What we do

The AndroidX Core & Tooling team is responsible for the overall library
development and release workflows, including defining and enforcing policies,
owning the tools used for docs generation and API tracking, and ensuring the
stability and performance of the build and test systems.

## Team purpose

Enable high-quality libraries so that app developers can succeed.

## Team mission

Define, enforce, and enable a high quality bar that provides best-in-class
library development workflow for Jetpack libraries.

## Team values

-   Communication (open, honest, constructive)
    -   Discussing issues in public (e.g. chat)
    -   Providing a safe space to give/receive feedback
    -   Documenting and sharing knowledge
-   User Focus (meeting/exceeding our customer's needs and desires)
    -   Listening to users, seeking out feedback
    -   Taking user feedback seriously
    -   Showing empathy for users
-   Quality (strive for excellence, continuous improvement)
    -   Prioritizing quality over velocity
    -   Building long-lasting solutions
    -   Following consistent, codified principles
-   Integrity (honesty, sincerity, standing up for one’s beliefs)
    -   Owning mistakes
    -   Respecting others
    -   Raising concerns when you have them!
-   Responsibility (accountability)
    -   Monitoring and maintaining our products
    -   Providing clear ownership and escalation paths
    -   Following up to ensure resolution of issues
