Bug tracking & new features development by mastering GitHub Issues
Tags: github, debugging, tutorial, beginners
Published: 2019-10-28 13:15:03

## Content List ##

* [**Introduction**](#introduction)
* [**Milestones, Labels & Assignees**](#milestoneslabelsassignees)
* [**Notifications, @mentions, and References**](#notificationsmentionsandreferences)
* [**Search**](#search)
* [**Other Uses**](#otherusesforissues)

## Introduction ##

Each application you create on SashiDo has its own **Free Private** repository on GitHub. 
Like any great project, yours will probably need to have a way to track its bugs, tasks, and improvements. Great news, as GitHub has just the right feature for the job. Its called **Issues** and it’s GitHub’s way of tracking and dealing with these sorts of things. 

![issues_with_hand](https://media-blog.sashido.io/content/images/2018/06/issues_with_hand.jpg)

It’s really simple, as they function almost like an email, though the great part is that they can be shared and discussed with your team. Every repository comes with its own Issues section. So let's get straight to the point.

We can start by looking at [**Parse Server’s Issues section**](https://github.com/parse-community/parse-server/issues) for example:

![testIssue](https://media-blog.sashido.io/content/images/2018/06/testIssue.jpg)

GitHub's tracker is also quite special. It offers excellent formatting and focuses on collaboration and references. You can check out how a typical issue on GitHub looks in the image below:

![parseIssuePic-1](https://media-blog.sashido.io/content/images/2018/06/parseIssuePic-1.jpg)

* You can see that there is a **title** and a **description** which informs us what the issue is about.
* There are some neat color-coded **labels** which help you filter and organize your issue by category.
* **Milestones** are very useful for linking issues with specific feature or project phase (e.g Weekly Sprint 9/5-9/16 or Shipping 1.0). They are like a container for issues.
* Every issue can have an **assignee** which is responsible for moving the issue forward.
* And of course **comments** let anyone with access to the repository provide feedback and suggestions.

## Milestones, Labels & Assignees ##

At some point, you're going to have many issues and you may find it hard to find a specific one. Don't worry, because **labels**, **Milestones** & **assignees** are awesome features to help you filter and sort issues.

You can change and edit all of them by just clicking on their corresponding gears in the sidebar which is located on the right.

![labelsMilestonesAssignees-2](https://media-blog.sashido.io/content/images/2018/06/labelsMilestonesAssignees-2.jpg)

In case you do not see the edit button, that means that you do not have permission to edit the issue and you can ask the repository's owner to make you a collaborator, so you can get access.

### Milestones ###

![milestone](https://media-blog.sashido.io/content/images/2018/06/milestone.jpg)

Milestones are a great feature to group up your issues, for example by project, a feature or even a time period. They can be used in many different ways in software development. Here are some examples:
* **Beta Launch** - You can include any bugs that need to be fixed before you release the beta. By doing so you make sure that you don't miss anything along the way.
* **June Issues** - If you have many things to get done, you can specify a Milestone with the given issues you would like to work on during a specific period of time.
* **Redesign** - A great way to handle issues regarding the design of your project as well as collecting new ideas along the way. 

### Labels ###

![labelsPic](https://media-blog.sashido.io/content/images/2018/06/labelsPic.jpg)

Labels are an exceptionally good way to organize your issues. There is no limit to how many labels you can have and you can even filter your issues by one or more labels at the same time.

### Assignees ###

Each issue may have an assignee which is responsible for pushing it forward. That's a great way to assign a particular person to track the issue and is familiar with it. That way he can easily track and push it forward.

## Notifications, @mentions, and References ##

Communication is the key to resolving any issue. By using GitHub's **@mention** system and references, you can link issues to the right people or teams so that the issues are resolved effectively. These features are really easy to learn and use and work in every text field as they're part of GitHub's text formatting syntax called [GitHub Flavored Markdown](https://help.github.com/articles/writing-on-github#name-and-team-mentions-autocomplete).

![mentionsReferences](https://media-blog.sashido.io/content/images/2018/06/mentionsReferences.jpg)

If you want to learn more about the syntax, you can check GitHub's official guide on [Mastering Markdown](http://guides.github.com/features/mastering-markdown/)

### Notifications ###

GitHub's way to keep you posted about your Issues is [Notifications](https://github.com/notifications). They can be utilized so you are up-to-date with new issues or to simply know if someone's waiting for your input so they can continue with their work.

You can receive notifications by two ways - either by email or via the web. To configure these settings navigate to your [notification settings](https://github.com/settings/notifications).

If you plan to receive many notifications, it's suggested that you configure to receive **Web** & **Email** notifications for **Participating** and **Web** for **Watching**.

![notificationSettings pic](https://media-blog.sashido.io/content/images/2018/06/notificationOptionsEdited.jpg)

Given that you're using this configuration, you'll receive emails when someone specifically mentions you and you can visit the web-based interface to keep in touch with repositories you have interest in.

You can easily view your notifications in the [Notifications Screen](https://github.com/notifications). It's located on the left of your avatar in the top-right corner of the page. There you can easily navigate through many notifications at the same time. You can mark them as **read** or you can **mute** a specific thread. You can speed up this process by using keyboard shortcuts. To check a list of available shortcuts press the `?` on the page.

![muteNotification](https://media-blog.sashido.io/content/images/2018/06/muteNotification.jpg)

There is a little difference between muting a thread and marking it as read. When you've marked a certain thread as read, you will not be notified until there has been a new comment, whereas if you mute it, you will not receive notifications until you are specifically @mentioned in the thread. That gives you the power to choose which threads are important to you and which you are not interested in.

GitHub comes with an awesome feature which syncs your notification statuses. Basically, if you read notification in your email, it will be marked as read in the web-based interface. Awesome, right. However, you should enable your email client to show images if you want this to work.

### @mentions ###

In order to reference other GitHub users in Issues, we use the @mention system. We can do so in both the description and the comment section of an issue by including the `@username` of the person. When we mention someone like that they'll receive a notification about it. 

If you want to include people to a given issue you can use the `/cc` syntax. Here's an example:

> It looks like the images on our initial page are not loading.
>
> /cc @alexSmith

That's great, but only if you know who exactly to include. In most cases, we tend to work in teams and that way we may not know who exactly could be of help. Don't worry, because @mentions work with teams within organizations on GitHub. When you @mention a team it will send notifications to everyone who's part of it. Let's say for example you create an organization named @MySashiDoApp and under it, a team @javascrip-devs. An example @mention, in this case, would look like this:

> /cc @MySashiDoApp/javascript-devs


### References ### 

Quite often different issues are intertwined or maybe you just want to reference one into the other. This can be done by using the hashtag `#` followed by the issue number.

> Hey @alexR, I think this issue may have something in common with #62

After you've done it, an event is created in issue #62 which looks something like this:

![reference](https://media-blog.sashido.io/content/images/2018/06/reference.jpg)

If you want to refer to an issue in an entirely different repo, just include the repository name like this `alex/example_project#62` 

You can also reference issues directly in commits by including the issue number in the commit message.

![closingIssueThroughCommit](https://media-blog.sashido.io/content/images/2018/06/closingIssueThroughCommit.jpg)

If you preface the commit message with  “Fixes”, “Fixed”, “Fix”, “Closes”, “Closed”, or “Close” and afterwards merge to master, the issue will automatically be closed.

All in all, references are great for adding visibility to the history of your project, as they profoundly link the work being done with the bug being tracked.

## Search ##

You can find the search box at the top of the page.

![searchTab](https://media-blog.sashido.io/content/images/2018/06/search.jpg)

You can apply different filters to your search, for example:

* Keyword - e.g. [all issues mentioning the sidebar](https://github.com/twbs/bootstrap/issues?q=sidebar)
* State - [all issues mentioning the sidebar that are **closed**](https://github.com/twbs/bootstrap/issues?q=sidebar+is%3Aclosed)
* Assignee - [all issues mentioning the sidebar that were assigned to @mdo](https://github.com/twbs/bootstrap/issues?q=sidebar+is%3Aclosed+assignee%3Amdo)

If you'd like to read more about the search, you can do so in the official GitHub Article about [Using search to filter issues and pull requests](https://help.github.com/articles/using-search-to-filter-issues-and-pull-requests/)

## Other uses for Issues ##

Issues are not tied only for development purposes. In fact, they are quite useful to collaborate with your team on whatever issues you have. Here are some examples:

* [Bug tracker for your house](https://github.com/frabcus/house/issues?labels=building&state=open) including such gems as [the door being hung incorrectly](https://github.com/frabcus/house/issues/58)
* [Bug tracker for your open source projects](https://github.com/joyent/node/issues)
* [Request for recipes](https://github.com/newmerator/recipes/issues), maybe you have a good [gluten-free pizza dough recipe](https://github.com/newmerator/recipes/issues/3)?
* MostlyAdequate's [E-books](https://github.com/MostlyAdequate/mostly-adequate-guide/issues)
* [The French Civil Code](https://github.com/steeve/france.code-civil/issues), as unlikely as it may sound.

## Final ##

Whew! That was a long article, but you've learned how to manage and keep track of your issues.