For every single project we have to take a lot of different technical decisions:

  • Which library should we use and why?
  • Should we make this configurable or not?
  • How should we structure this package?

Some of this decisions are very easy, some of them are not.

Who can participate in a discussion

Until the issue is closed anyone can participate and share their opinion freely. Please, make sure that your opinion is informative, weighed, and polite.

Who make final decisions

A decision can be made by a person who is responsible for the end result. In our team, this person is an architect.

So, the only architect can make the final decision. When in doubt, create a WIP merge request to ask your questions, so the architect can share his opinion.

Then just create a link to this discussion somewhere in the project.

Research

Sometimes you can not make a decision because you don’t even know what are the options. To find out you will need to do a research. So, we have a specific issue label and issue template just for this type of actions.

As the result, a documentation file, which is called “Architecture Design Record”, should be created describing all the possible options, their drawbacks and strong points.

Also, the final decision and the taken risks should be clear. These issues are paid the same as any other issues.