A formal procedure for the life of a bug ticket is as follows:
- Reporting phase
- A concerned person ("reporter") discovers a bug.
- Reporter attempts to reproduce the bug. In the case of Errors, if it doesn't reproduce, continue anyways.
- Reporter files a ticket with as much information as possible. An outline of reporting tickets is documented at Bug reporting.
- Tech phase
- A tech lead receives the ticket.
- Tech lead attempts to reproduce the bug and fills out the ticket with any additional information and tags as appropriate. Note that at this point, there may be insufficient information, at which point the tech lead will attempt to collect more information from the reporter. Tickets like this should to be tagged as "Needs Information" or "Needs Feedback". If the tech lead is familiar with the problem/solution, he may give a rough outline of what work needs done.
- Generally the tech lead should also include a test case for QA. Usually this is just the steps to reproduce.
- Ticket is assigned a priority, which may fast-track it into development or may put it into the backlog, at which point it can be pulled into development whenever a new dev phase starts (in Agile, this is at the beginning of a "sprint", which is usually 2 weeks).
- Sprint phase
- Team lead reviews the ticket with the devs, gives an estimate, assigns the ticket, and effectively pulls it into the sprint (meaning it will be worked on this sprint).
- At this time, the ticket may be cleaned up a little to more accurately reflect the issue.
- Developer documents work and issues until the problem is fixed.
- Developer refactors code so that it's clean and in line with the philosophy of the product.
- Developer attempts to confirm that the issue is fixed. Updates the test case as necessary (including any exclusions for things that QA should not fail the ticket for - usually due to it being addressed in a separate ticket). Pushes code into review (this effectively closes the ticket as In Review and pushes the code into a team repository).
- QA phase
- Team lead and/or tech lead reviews the fix. Pushes the code into the global repository. Pushes it into QA (this effectively re-opens the ticket as Begin QA).
- QA tests the parts of the product relating to the ticket on their own, clean environment. This is outlined in the test case. Ultimately, the test case needs to pass for the ticket to pass. If the test case fails, the fix fails. If the test case passes, QA should also do a basic regression test, or a more thorough regression test for fixes that affect many aspects of the product - for fixes that it is unclear what they affect, it would generally warrant a Full regression test. If anything seems wonky, especially if any of the steps leading up to the test case cannot be followed, QA will fail the ticket. Failed tickets go back to dev (who may decide to exclude the reason of failure and/or clarify the test case, and push it back into QA. Alternatively, they may fix the regression and push it back into review).
- QA phase 2 repeats the QA process in a production environment. This step may be skipped if a "production environment" is the same as a development environment.
- QA passes the fix, formally closes the ticket as resolved.
This process is commonly followed in the industry, and can be found in use in many agile environments. As a small team, however, we do not have the resources to follow this formal procedure, although we acknowledge the high value of the procedure. We do not have nearly enough people to fill all the roles, and even if we did, the people we have are all volunteers, meaning they are under no obligation to fulfill their role, let alone to fulfill it in a reasonable time frame. Because of this, much of this process is expidited as much as possible, compressing several steps, and creating informal processes for these. Whatever the case, this formal procedure forms a guideline in what the procedure for a ticket should be, so that our informal processes may reflect this as best as possible with the resources we have.
Do realize that tickets and bugs do still fall through the cracks. To best expedite a ticket, we ask that reporters stick around and check up on the ticket throughout the life of the ticket, helping in whatever way they can. The reporter is also capable of closing their own tickets, should they feel they are invalid or resolved before the usual ticket process completes - that's perfectly fine. However, you are not required to close your tickets - they will follow their usual lifecycle and get closed off eventually anyways (hopefully by QA).