# Cooperation agreement: Silent Booth

This document outlines the terms and conditions of cooperation between the team of 'FitBot'. It serves as a formal agreement for collaboration, specifying the roles, responsibilities, and rights of each member involved. The agreement is designed to ensure a smooth and productive working relationship, providing a framework for conflict resolution and mutual benefit. Please read through the agreement carefully and ensure you understand all terms.

1. **Communication**:

All team members agree to maintain open and transparent communication throughout the project. This includes daily standups, timely responses to messages, and sharing relevant information. 

Discord and whatsapp will be used for communication. Discord will be used for daily standups, code sharing and whatsapp for urgent matters.

2. **Roles and Responsibilities**:

Each team member will have clearly defined roles and responsibilities. This ensures that everyone knows what is expected of them and can contribute effectively to the project. The rolles we be as following:

- Sprint 1:
    - Scrum master: Luca
    - Product owner: Niels
    - Dev team: Sebas, Luca, Sam and Niels.

- Sprint 2:
    - Scrum master: Sebas
    - Product owner: Sam
    - Dev team: Sebas, Luca, Sam and Niels.

- Sprint 3:
    - Scrum master: Niels
    - Product owner: Sebas
    - Dev team: Sebas, Luca, Sam and Niels.

Scrum master:

    - Facilitates the daily standups
    - Ensures that the team is following the scrum process
    - Helps the team to remove any obstacles that are in their way
    - Ensures that the team is following the coding conventions
    - Ensures that the team is following the cooperation agreement
    - Ensures that the team is following the timeline and deadlines of the issue board

Product owner: 

    - Ensures that the product is being developed according to the requirements
    - Ensures that the product is being developed according to the timeline
    - Ensures that the product is being developed according to the quality standards
    - Ensures that the product is minimally viable


3. **Decision Making**:
   
Decisions will be made through consensus whenever possible. In cases where consensus cannot be reached, a designated product owner will make the final decision.

4. **Conflict Resolution**:

In the event of conflicts or disagreements, team members will work towards resolving them in a professional and respectful manner. 

5. **Timelines and Deadlines**:

Team members will adhere to agreed-upon timelines and deadlines. This includes completing assigned tasks on time, attending meetings punctually, and providing regular progress updates. If a member can't make a deadline or is stuck on a task they will let the team know. During the daily standups, the team will discuss the progress of the issues and if someone is stuck on a task, the team will help them to get unstuck.

6. **Quality and Accountability**:

Each team member is responsible for delivering high-quality work and taking ownership of their assigned tasks. This includes thorough testing, documentation, and seeking feedback from other team members.

7. **Languages for coding**:

The following coding languages will be used during the project with their corresponding purposes:

- Esp: C++/C
- App: Java
- Database: SQlite/Java
  
8. **Coding Conventions**:

The team will follow the Google coding conventions for the coding languages used in the project. This includes naming conventions, indentation, and commenting practices. Examples are using camel case for variables and functions, and using full caps for constants.

This also extends to using the right types of variables for the right purposes (specifically in C++). Avoid using `int` for everything, use `uint8_t` for small numbers, `uint16_t` for medium numbers, and `uint32_t` or even `uint64_t` for big numbers. This will help to save memory and make the code more efficient. Use the right types of variables for the right purposes.

Function documentation should be written using JSDocs. JSDocs is a way to document your code in a way that is easy to read and understand. It is a way to write comments in your code that will be used to generate documentation for your code. This will help to understand the code and make it easier to maintain and update in the future. JSDocs is built into VSCode and can be used by typing `/**` and pressing enter. This will generate a template for the documentation of the function. The team will use this to document all functions in the code.

9.  **Working hours**: The team will work on the project during the following hours:

- Monday:       Work from home
- Tuesday:      12:00 - 16:00
- Wednesday:    12:50 - 17:00
- Thursday:     Work from home
- Friday:       12:50 - 17:00
- Saturday:     No contact hours
- Sunday:       No contact hours

If you can't make it to the contact hours, you will let the team know. When it's not possible to work during the contact hours, you will let the team know and make sure you make up for the lost time.

When working from home the scrum master will send a message to do a small standup.

10. **Closing Issues**: When a task is done, the team member will put the issue in the 'verify' column. Then let the team know via whatsapp, first person who wants can verify the issue. If the issue isn't verified the team will take a look at the issue in the following contact hours and if everything is done correctly, the issue will be closed.

These basic rules provide a foundation for a successful cooperation agreement.

**Signatures**:

| Name  | Agreed  |
|-------| ------- |
| Luca  | Yes     |
| Niels | Yes     |
| Sebas | Yes     |
| Sam   |         |