# FlexReview

{% hint style="success" %}
Read our launch post about why we built FlexReview: <https://www.aviator.co/blog/flexreview-a-flexible-code-review-framework/>
{% endhint %}

## What is FlexReview

FlexReview is a modern code review platform focused on on collaborative teams. It acts as a drop-in replacement for GitHub `CODEOWNERS` . FlexReview uses domain expertise and recursive ownership to avoid rigid boundaries of GitHub `CODEOWNERS`.

<figure><img src="/files/MYLFRr56mfF2hXMwBjUo" alt=""><figcaption></figcaption></figure>

## Components

There are two main components of FlexReview:

* [Reviewer assignment](/flexreview/concepts/reviewer-suggestion-and-assignment.md) - Automatically assign code reviewers for selective (or all) pull requests based on the configured preferences.
* [Review Validation](/flexreview/concepts/validation-in-flexreview.md) - Ensure that appropriate approvals have been granted before a pull request is considered mergeable.

## Concepts

There are a few core concepts that differentiates FlexReview from a rigid GitHub `CODEOWNERS` framework.

* [Domain expertise](/flexreview/reference/expert-scoring-algorithms.md)
  * A score calculated based on past history of authorship and reviewership. This is calculated for each file and each user to ensure FlexReview can assign the right reviewers.
* [Recursive ownership](/flexreview/concepts/recursive-ownership.md)
  * True representation of the actual shape of code ownership to avoid rigidness of GitHub `CODEOWNERS`.
  * Simplified ownership definition using distributed YAML files
* [Reviewers minimization](/flexreview/concepts/reviewer-suggestion-and-assignment.md)
  * When a PR spans multiple teams, it finds a common parent owner and minimizes number of reviewers. One or more reviewers are assigned depending on the code complexity.
  * All reviewer assignments are predictable and governed by rules, so you can stay compliant.
* [Team automations](https://docs.aviator.co/flexreview/how-to-guides/set-up-team-rules)
  * Each team can choose an assignment strategy from domain expertise, review load, or oncall rotations.
  * Slack notification can be sent to team's channel when there's new PR for your team.
  * Reviewer can be auto-reassigned when there's no reply.
* [Team dashboard and SLO goals](/flexreview/concepts/slo-management.md)
  * Team members can see the PRs that are assigned to them, or their entire team.
  * Teams can define the expected size of the PRs and review turnaround time.
  * Dashboard shows how many PRs are within the review-time SLO.
* [Selective Dismissal](/flexreview/concepts/validation-in-flexreview.md)
  * A validation system to ensure that appropriate approvals have been granted before a pull request is considered mergeable.
  * Reviewers are responsible for approving on behalf of the files they own.
  * Reviewers can be selectively dismissed when new code changes are pushed tied to their ownership.
  * Includes a [break-glass](/flexreview/concepts/validation-in-flexreview.md#breakglass-scenarios) override for emergency approvals.

## Basic ownership config

Since FlexReview automatically tracks domain expertise for each, you can simply define a top level ownership such that the code is collectively owned by all of engineering, and FlexReview will automatically assign the right reviewers.

```
* @engineering
```

However, most teams would want to define a bit more fine-grained ownership, where recursive ownership helps provide that flexibility.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.aviator.co/flexreview.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
