# BCD FAQ

This document describes frequently asked questions and their answers. If your question is not listed or you still need help, contact the MDN team on [chat.mozilla.org#mdn](https://chat.mozilla.org/#/room/#mdn:mozilla.org) or write to us on [Discourse](https://discourse.mozilla-community.org/c/mdn).

## How often are the browser compatibility tables updated on MDN Web Docs?

The tables get automatically updated after a BCD release, typically within 2 hours (incl. cache invalidation).

## I opened a PR but it hasn't been reviewed yet.

Sorry for the wait. Many outside factors, such as our other projects, may grab our attention and slow BCD PR reviews. If it has been more than a month and there has been no response from a reviewer, please feel free to ping one of us and request a review. You can find a list of peers and owners in the [governance doc](../GOVERNANCE.md).

## My PR was closed due to inactivity, may I reopen it?

Of course! If we have requested more information from you (the pull request author) and do not hear back from you in two months, we will close the PR. You are more than welcome to reopen the PR and address the feedback at any time.

## If another PR is idle, may I take over it?

If the PR has been closed due to inactivity, you may open a new PR to supersede it. Please do not open a new PR if the existing PR has not been closed.
