š Issue TrackingĀ¶
SummaryĀ¶
Issue tracking is a great tool to track pending work and improve the overall communication within a project. But similar to every other tool, it needs to be used with care.
āA fool with a tool is still a foolāā Grady Booch
This guide will try to help you to get the best out of the issue tracking for you, your teammates and the project(s) you are working on, by answering the following questions:
When to create an issue?
What makes a good issue?
How to maintain an issue?
When to create an issue?Ā¶
Let me start by saying there is no perfect and one size fits all ruleset to decide this question, otherwise there would be some code doing that for us. The good thing though is, humans are great in dealing with fuzzy problems. Still most people want to have something to orient themselves. Asking more specific questions often helps in this situation.
The following question(s), helped us in the past, to get a better handle on this:
- What is the cost/benefit ratio of creating an issue?
cost being mainly time and effort
benefit being the upsides we gain from having an issue
- What is the signal to noise ratio?
signal being the actual code/change bringing some benefit/value to the project
noises being the overhead
- Is the user (api or product) impacted by this change?
Is it an āinternal improvementā quality of life and/or code quality
ExamplesĀ¶
Fixing a couple of typosĀ¶
You stumble upon a couple of typos in a Project.
Possible Action(s)Ā¶
You fix the typos without creating an issue
Suspicious amount of typosĀ¶
You stumble upon a various typos within a piece of documentation you are reading. Because of the vast amount of typos and the overall structure you expect the whole documentation to contain a substantial amount of typos.
Possible Action(s)Ā¶
If the documentation is not to big and you can make the time to fix the typos right away without creating an issue.
If the documentation is quite big, and fixing this e.g. would take you more than 1/2 a day you definitely should create an issue.
You are unsure how long it will take to address and check the documentation and you currently canāt spent time for detours create an issue.
What makes a good issueĀ¶
TL;DR: An good issue describes a piece of work, itās context and itās assumption in a way, any person capable of working on the project, can understand it, based on the information referenced and within the issue.
To begin with, we want to make sure you understand that creating good a issue is not a zero effort action. Various things like issue templates, can remove tedious boilerplate work, but still creating a good issue is some actual work. It is crucial to have well crafted issues, because bad issues do way more harm than good. So letās take a step back and letās think about why we need to have good issues, in order to better understand what actually makes a good issue.
Boiled down to itās core issue tracking is just a list of pieces of work which are needed to be done. This list in turn, then can be used to plan, organize and track āprogress/workā.
Broken down to an individual issue, this means an issue should provide all relevant information about a āsingleā piece/unit of work.
Even though the part what an issue is about is well understood, by most people, this is also where it goes wrong.
Why? Because we as humans tend to use and assume context implicitly. Assuming context implicitly already can be a problem when communicating with people we meet on a regular basis, but is a huge problem when you communicate with people which we meet rarely or even never.
This is somewhat obvious when you think about the fact that 60-70 % of human communication is non verbal communication. This most likely also part of the reason so many people use emojies, a picture says more than a 1000 words and therefore can help transport context more easily š. But even those helpers arenāt perfect and it very often depends on the mood and the other persons perception (context) of you how they interpret a specific emoji you have sent.
To take on a more computer science specific example:
Information |
Context |
Value |
---|---|---|
65 |
ASCII |
āAā |
65 |
Hex |
101 |
65 |
Decimal |
65 |
As you may have realized by know our point being how information is understood and processed highly depends on the context.
To come back now to the topic of āWhat makes a good issueā, a major part of it is to make context and assumptions an explicit part of your information you are providing. Write the issue in such a way, that a person working on the project, now or in the future can precisely understand the task, the context and assumptions of it.
Attention
You may inclined to think, you gonna address this task anyway or it is just for āyourā book keeping, but then this is nothing for the issue tracker rather something for your personal todo list. If you decide it is important enough for the issue tracker than treat it as such.
So what does this mean in more practical actionable terms?
- Make your context explicit
Add links and references to spec you may already know
Add information e.g. from discussion, meetings, mails ā¦
- Make your assumptions explicit
Write them down also note e.g. if you are not sure if it is the right decision but what you have taken into account at the point in time when you wrote it down
- Add SubTasks regarding āstandardā processes which people may not necessarily know about
This can be simplified e.g. by providing issue templates
update documentation
update changelog
ā¦
- Make it easy to answer the following questions for the person working/reading the issue
Is this issue still relevant, or is it obsolete by now?
Are the assumptions still valid today?
Did they have more or less context than we have today?
Did I consider the assumptions and context of the one writing the issue?
Attention
More details on a specific issue type you will find in the corresponding subsection(s) of this guide.
How to maintain an issueĀ¶
As you already know an issue does not only keep track of what needs to be done, but also about itās context (how, why, etc.). This context can be a quite dynamic though, especially for tasks which bare a larger amount of uncertainty (e.g. bugs). So a huge part of keeping an issue up to date, is keep updating itās context. The following scenarios will try to give you an idea on how to update and maintain an issue in various scenarios.
TL;DRĀ¶
- Keep the issue and itās context up to date
Keep the status up to date [Backlog, In Progress, ā¦]
Update tickets which are actively worked on regularly (at least every 2-3 days)
Try to communicate new information via comments (e.g. status updateās)
Report important changes because of internal and external events
- Comments
Respond to comments in a timely manner
Stay friendly and focused on the issue when responding to comments
ScenariosĀ¶
A developer picks up the issue from the backlog and starts working on itĀ¶
Assign the ticket to the developer working on it
Change the state of the issue to āIn Progressā
Note
Most issue tracking system already take care of this if you move it to the appropriate category in the issue(s) overview.
The Issue Receives a commentĀ¶
Make sure to reply to a comment in a timely manner
- If it is the first contribution/comment of the contributor on this issue, show appreciation for the contribution.
If the comment canāt be addressed right away, at least acknowledge the comment and communicate some timeframe
- Make sure the comment can be understood in the context of the issue
If needed ask for clarification
If needed ask follow up questions
- Be clear in your response(s)
Make sure relevance, importance, course of action and timeframe are communicated if necessary
The Developer stopās/postpones working on the issue, e.g. due to re prioritizationĀ¶
Remove assignee on the ticket
Change the state of the issue to āBacklogā
Note
Most issue tracking system already take care of this if you move it to the appropriate category in the issue(s) overview.
Make sure all current context information is updated or added as status comment to the issue
- Add information about why working on the issue have been postponed/stopped (e.g. blocked)
Except if this would disclose information to the wrong audience
- Communicate when work on the issue will be picked up again
Communicating that it is unclear when the work will be continued, is also fine
Stalled issue (e.g. root cause of bug is hard to find)Ā¶
Note
Very rarely the issue (work) is really stalled, often it just feels like this. When you canāt report on explicitly achieved task(s), provide context information about your work (journey). This can help you and others to pickup on it latter or at least it help to understand the current state more clearly.
- Regularly post a status update on the issue (every 2-3 days)
What issues/problems already have been ruled out and why?
What is the current strategy to find the culprit?
What is the current strategy to resolve roadblocks?
What are the current assumptions and hunches?
Are there any further leads to be investigated in the future?
Describe the current roadblocks
Report sub partial successes
Add scriptās and context information which helps to reproduce and/or trigger the bug
Example: Status Update on Bug Issue
# Status Update
Further investigation's have shown that the basic SQLA test suite mostly is intact after the upgrade to `1.4` (14 failures), when run in "isolation". Various exasol specific test suites:
* test/test_get_metadata_functions.py
* test/test_large_metadata.py
* test/test_regression.py (TranslateMap)
seem to have negative side effects which cause 100+ tests to :boom: fail/crash, if run after those test suites.
This further strengthens the case for the **assumptions** mentioned in the previous update:
* Setup/Teardown mechanic of `testing.fixtures.TablesTest` has changed
* Setup/Teardown mechanic fails due to leftovers in tests DB
Also, this narrows down the potential root cause(s).
## Remark(s)
Common to all those test suites to be that they add/remove schemas.
For `test/test_regression.py` it have been proven that the schema manipulating test (`TranslateMap`) causes some negative side effect on following test suits.
## Notes & Ideas (from discussion with @tkilias )
* Is schema inference still working correctly?
* Does the "disabled" caching cause side effects?
* Do implicit schema open and closes affect the current schema for follow up tests?
## Next Steps
* Analyze effects of implicit open/close of schema(s)
* A more in depth analysis regarding side effects and cleanup of the mentioned test suites will be done
To see the example update in itās full context look here.