dxw's technology team uses this repository as a forum to make and document technical decisions.
Our currently adopted RFCs are linked below, categorised into "ways of working" and "tools and technology".
These are RFCs that are more general in focus. They aren't about using particular tools and technology, or types of tools and technology, but rather more general approaches we like to take.
master
as a branch nameThese are RFCs about using specific types of tools and technology. This includes RFCs specific to one of our core frameworks or languages, e.g. GovPress, Rails or TypeScript, which are subcategorised for ease of reference.
rfc/my-proposal-title
rfc-000-template.md
renamed rfc-000-my-proposal-title.md
and add it to the relevant directory (/tools-and-technologies
, its
subdirectories, or ways-of-working
). You may create a new subdirectory if
relevantrfc-000
and link to them from the proposalREADME.md
to include the title and link to the RFC file at the
bottom of the relevant section. All the links are provided as numbered
references at the bottom of README.md
. If your RFC supersedes or deprecates
a previous one, remove it from the list#dxw-tech-team
or #dxw-govpress-team
on Slack,
@mentioning anyone you want particular attention from. Some RFCs will
naturally fall more within the remit of GovPress, Ops or Delivery+, but if
you are unsure which channel to use, please post in both channelsAs the proposer, you are responsible for gathering consensus on your proposal. This means reaching out to others for comment, resolving issues, and reminding people of your proposal's existence.
Once a proposal is accepted, it becomes everyone's responsibility to put it into action and live by it.
When a proposal PR is marked as ready for review, anyone is welcome to contribute to the discussion. Review the proposal and any existing comments and make inline comments on the document or general comments in the PR. To vote on the proposal, create a GitHub review.
We use GitHub's review system to send clear signals of individual reviewers' stances on the proposal. Each type of review has a different meaning, as follows.
Note that emoji and reactions do not indicate preferences or votes.
A comment review is not a vote. It can be used for asking questions or making suggestions. It's also suitable for correcting typos or other minor change suggestions that don't materially alter the proposal.
By creating a approve review, a reviewer is saying the proposal SHOULD be accepted. It is not necessary to add a comment to an approval if there's nothing to add. It is also acceptable to approve with optional suggestions as with a comment review.
By creating a request changes review, a reviewer is saying the proposal SHOULD NOT be accepted as written unless the accompanying commented consequences are acceptable. A review of this kind MUST be accompanied by an explanation and the reviewer SHOULD be prepared to respond to further comments.
Everyone is informed of proposals and is given a fair amount of time to join the discussion.
Decisions are not made alone. We require at least 3 approvals before a proposal can be accepted.
We understand that not everyone in the team has the time, headspace, expertise, or opinions to be involved in every decision. Provided those decisions are communicated more widely, consensus should be possible between those actively involved in the discussion.
If consensus isn't clear, we default to no action, but sometimes we don't have a status quo to fall back on. In that case, we believe that some guidance is nearly always better than none.
The decisions we make and record here are defaults. In many cases, they are intended as guidance and not constraints. If there's a reason to depart from them, as long as it's documented and justified, we should be able to adapt to specific situations and needs.
The people making proposals tend to be the people most invested in their outcome. It's up to them to get a decision made by engaging with and encouraging others to get involved in discussions.
If a proposal is inactive and doesn't have the momentum to reach a consensus, we close it. Proposals that aren't moving probably aren't important or are too contentious to make a decision about. This doesn't stop them from being reopened at a later time.
By closing stale proposals, we keep the discussion focused on current issues, relevant to the team now.
These RFCs document our decisions and the discussions that led to them being made. This helps our future selves and new people joining our team understand why we do the things we do. This understanding will allow us to make more informed decisions in the future and help us empathise with the decisions we have already made.
We use the IETF's RFC best practices style guide for our RFCs to help make sure we're consistent and clear in our language and intent.
First, install dependencies:
npm install
To run the linter locally:
npm run lint
To automatically fix most linting issues:
npm run lint:fix
This repository is set up to run the linter automatically on pull requests and fix any issues it can, so you usually won't need to run it yourself.
If you notice the linter doing unexpected things to your formatting, it's usually a sign that your original formatting wouldn't have been parsed as you intended it to be.