# How to Create A GitHub Organization and Scrumboard

**Table of Contents:**

* [Set up Github Organization](#set-up-github-organization)
* [Create an organization repository](#create-an-organization-repository)
* [Create a project board for the repository](#create-a-project-board-for-the-repository)
* [Tips for Using a Scrum Board](#tips-for-using-a-scrum-board)

You will be using Github Projects to organize and manage your workflow. You can follow the instructions below to get started!

## Set up Github Organization

* Sign into Github
* In the top right corner, find the + icon and select New organization
* Select Create a free organization
* Name the organization with an approved team name
* One team-member will enter their email and will make the organization on their personal account.
* Add all teammates to the organization

## Create an organization repository

* From the organization overview page, click on the Repositories tab.

![](https://2917380161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6MVtB4m00n1SibG54HLC%2Fuploads%2Fgit-blob-24f1e783a1bbad33fac19c787e3cb238344c5b0e%2Fnew-org-repo.png?alt=media)

* Click on Create a new repository
* Give your repository a fun name that matches the name of your game!
* Make sure to make the repo **public**
* Add a **README**
* Choose the **MIT License**

## Create a project board for the repository

* From the repository homepage, click on the Projects tab.

![](https://2917380161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6MVtB4m00n1SibG54HLC%2Fuploads%2Fgit-blob-28cd5f286d079bbeecddec2706bf74a644ad5c04%2Frepo-projects.png?alt=media)

* Click on the dropdown next to Link a project and select New project

![](https://2917380161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6MVtB4m00n1SibG54HLC%2Fuploads%2Fgit-blob-ff645e60146431bdcb3b94c50d0b1400e1e11a08%2Fnew-project.png?alt=media)

* Then, click on New project
  * Name the project board: “Scrum Board”
  * Create a **Board**, not a Table
* Modify the settings which can be found by clicking on the three dots ... in the top right corner and then selecting **Settings**

![](https://2917380161-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6MVtB4m00n1SibG54HLC%2Fuploads%2Fgit-blob-1228db213f073115603ad172f52e0e02609d9fd6%2Fproject-settings.png?alt=media)

* \[Optional] Add a description and a README
* Change the visibility to **Public**

## Tips for Using a Scrum Board

1. **Work together at the beginning to establish the foundation of your project**
   * Setting up your files, creating your HTML elements, and agreeing upon variable names and data structures together will ensure that as you split up and work on your own features, you are all on the same page.
2. **Organize your JavaScript code into clear sections.**
   * I recommend the following sections (see my [Pong](https://github.com/The-Marcy-Lab-School/Fall-2022-Curriculum-BMC/blob/main/se-unit-5/pong/index.js) example):
     * Variables
     * Initial Setup
     * New Frame Logic
     * Event Handler Logic
     * Helper Functions
   * The bulk of your code should live in the helper functions section and the rest of your code should simply invoke the appropriate helper function in the appropriate order.
   * This approach will allow you to assign individuals to work on separate functions and minimize merge conflicts.
3. **Get the size of the task right. Aim for a single function's worth of work.** Consider these examples for Pong:
   * Too big: *Implement scoring*
     * Why? Implementing scoring is too vague! Scoring involves checking the DOM to see if the ball has left the screen, updating the scoring data, rendering it to the screen, and checking if the score triggers the end of the game. We can be more specific.
   * Too small: *Declare a `score` variable*
     * Why? declaring a single variable may be just one step towards writing a function to handle scoring.
   * Just right: *Keep track of scoring data each time the ball leaves the screen*
     * Why? This task is very specific and it focuses on a particular interaction between the DOM and the program's data. We might have a separate task for rendering the data to the screen and another for ending the game at a particular score threshold.
4. **Proactively update the scrum board:**
   * Assign yourself to a task that you want to tackle and immediately move it to *In Progress*. This will prevent your team from doing duplicate work by showing ownership of tasks and will result in more autonomous work.
   * Remember to move tasks to *Done*. Not only will it let your teammates know that a feature is complete, it will also *feel* really good to make that progress!
   * Consider coming up with a team ritual for completing tasks. Maybe you have some slack message or emoji that you all send and you can breifly have a congratulatory moment! This is not just for team-building, it will also keep your teammates up-to-date on the state of the program.
5. **Prioritize minimum-viable-product features first**. For Pong, the prioritization might look like
   * Render two paddles and a ball to the screen in correct starting positions
   * Control the paddles with keyboard inputs
   * Move the ball on each new frame
   * Detect collisions between the ball and the paddles
   * Bounce the ball off the top and bottom walls
   * Add scoring when the ball goes past the paddles
   * Implement a restart feature
   * Implement bonus features (AI mode, leaderboards, etc...)


---

# 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://marcylabschool.gitbook.io/marcy-lab-school-docs/projects/2-how-to-create-scrumboard.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.
