-
Notifications
You must be signed in to change notification settings - Fork 451
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Improvement request: Milestones and Estimation #5558
Comments
I agree that we should split our big milestones into smaller ones. But then, how do we do release planning? |
I think there are two ways to do releases:
The first way has a tendency to include too many features into the release, which then turns out to be delayed. The second way looks more manageable. So, how about the following approach:
What do you think, does it look real? |
@kozlovsky , I like your idea. However, GitHub does not allow to assign an issue to more than a single milestone. Milestones have dues dates. So we should probably use milestones as you suggested (for time-boxed releases), but use some other GitHub feature (tags? projects?) to track progress on sub-tasks as required by methodology suggested by @drew2a |
At first glance, I do not see significant contradictions with the @drew2a approach, as he does not mention sub-tasks. I think we can add dedicated projects for different Tribler components, like "Tribler-Search", "Tribler-UI", "Tribler-Channels" and organize sub-tasks within these projects. In each such project, subtasks can belong to different milestones. |
Great in-depth discussion people! My proposal would be to do time-boxed releases. We are often too ambitious with changes. They rarely finished on time. Bugs take considerable amount of time to find in huge code changes. To ensure we keeps bugs more manageable and keep matters rock stable we will do monthly releases. We used to require at least 6 RC releases, 4 Beta release and lots of manual testing before we could ship code. Invest a lot of time in automated unit test, integration tests and multi-platform install testers. This means all "big epic changes" need to be broken up into manageable chunks. That might feel like extra effort.. Big plans need to be broken up in parts. That is hard for tasks like moving to ASync or replaceing database. thoughts? How do we use Github in a good manner? What are good policies for commits to "devel"? Is there a volunteer to act as "Stability Chief" role or we rotate that responsibility; depending on whose commit broke matters? Fully agree with the "rough estimation" and starting to use well-known practice "estimation in story points" (rough in days/weeks) |
@kozlovsky I'm thinking more about "every month" release than "every half a year" release :) but the rest is correct (from my point of view). I'm not sure about projects. Of course we can use it, but let's try to keep it simple :) do we really need it? On the other hand, we can use Projects instead of Milestones. My point here: organizational tool should be helpful and make life easier (not the opposite). @ichorid what a particular case do you imagine, when thinking about assigning issue to multiple milestones? GitHub doesn't have a sub-tasks. Only issues. You can just emulate subtasks by linking one issue to another. |
Each SCRUM cycle we usually need to divide our attention to: invest (test) infrastructure, address users features, try to reproduce reported bugs, improve PopularityCommunity Vn to Vn+1. Or we can opt to dedicate our cycles to 1 out of 4.
Lets try one for a while and evaluate. No preference from my side. |
We did quite some refactoring efforts this year (e.g., moving to Python 3 and asyncio). We also did a full channels redesign. These changes, unfortunately, could not have been applied incrementally. Since I do not think that there are any major refactoring efforts soon, I'm highly in favour of the incremental changes approach.
Sadly yes. Our 7.5.2 milestone is due to by two months.
We still require this. Our first release with asyncio required more than 6 RC versions if I remember correctly.
Ideally, we should all be part of the "Stability Task Force" :). Not sure how this role would be fulfilled by an individual. |
There are two distinct things we need our project management system to do for us:
The reason we want (2) is because it is the only way to track the liveliness of some sub-project. And we need that if we want to tolerate half-complete inactive code in the main codebase. This is the only alternative to merge/rebase hell. Let's illustrate the problem with an example:
The first choice is going to bring rebase hell to me and PR review hell to my colleagues (the change is going to be much more than 500 lines). The second is going to bring a lot of unnecessary work and instability to 7.6 requiring to undo the unfinished changes on 7.6 branch. There is an alternative way to do things, though. We can start to tolerate unfinished features on |
@ichorid probably, you are talking about Feature Flags? |
Yes. Everyone in the team should read the link you provided. That's an excellent write-up on how to safely and gradually introduce big changes into a codebase. |
Please document the existing .mdblob format, existing protocol, and specify your ideas. I will reserve some time improving this first design and simplifying it with the whole development team. Each improvement to our work needs to fit in the release cycle, otherwise the design will need to be altered to take smaller steps. Channels are now the key part of Tribler that is not working (got 3x Traceback out of it today and crash of the core). |
@synctext , that was a hypothetical example 🤦 I'm not planning to work on any Channels-related changes right now, except for some smallier GUI-related changes, bug fixes and minor performance improvements. Also, not every design can both fit into release cycle and be immediately useful. That's why I'm talking about Feature Flags. |
As I see, we can use GitHub in a fairly efficient manner. Scientists and Developers have different goals and different workflows. We can separate two flows inside Tribler:
Rule:
Thus we will have two trackable flows:
Good side-effect from using projects: scientists can use "notes" instead of "issues". |
Currently, our scientific process takes place in Github issues. Master and PhD students get a new issue assigned or take over an existing issue. For example, this issue was my main focus during the first years of my PhD. You can find an example of a master thesis project here. Meeting notes are included as separate comments in these issues, as well as progress updates. Do you think it would be a good idea to move students thoughts/progress updates/meeting notes to projects? |
@drew2a Please only focus on what the development team needs. Master students are no longer allowed to contribute code to Tribler. Code quality was always too poor. Phd students and also master students have their dedicated "Epic issues". This is listed in this table, I try to keep it always up-to-date. The Phd students/scientists currently don't need more of Github I think.
Sounds good. |
I think yes. But my point of view is just a developer's point of view. Ok, let's focus on dev team needs, as @synctext said. In an attempt to keep a balance between theory and practice:
Or another way. We will wait until all team members can gather in the office (next week) and then will make plans for October. |
The upcoming bugfix release is 7.5.3 BTW |
We have a complete lack of top-level documentation:
|
We do have a ReadTheDocs https://tribler.readthedocs.io/en/devel/introduction.html. But, it's not linked on the GitHub frontpage and I doubt it's fully up-to-date. Also, a mutation test run for IPv8's 5-second unit test suite takes 5 hours. If we extrapolate that for Tribler, one mutation test run would take a bit over a week. Probably best to put that all the way down on the priority list. |
So, your proposed solution to this is to dedicate some issue at GitHub, create a table in it, and maintain the table by hand? |
True, that is not the way to do it. Draft priorities of the lab for discussion:
|
I've added labels for estimation: https://github.com/Tribler/tribler/labels?q=estimation |
Introduction
Below will be described thoughts on how we can implement "Epic Sprint" mentioned here #143 (comment) and have fun with it.
When I was thinking about it, I imagined small team (3 people) working on a relatively short feature.
I start from the core idea, described in the issue above: "to move forward step by step and achieve the goal after 6 months".
It means we should move forward by small iterations (in scrum methodology it is called sprints).
To start doing this in a more predicted way I propose the following:
Why milestones
GitHub provides two native tools to keep the track of a project: Projects and Milestones.
Since we are moving from one date to another, and don't have a heavy workflow, Milestones suit our needs better than Projects.
https://docs.github.com/en/github/managing-your-work-on-github/about-milestones
Good explanation "Projects vs Milestones" from stackoverflow:
Note
Milestones naming convention
To reduce entropy I'll suggest the following milestone's name convention:
Team MAJOR.MINOR.PATCH: description
, where:Team
is a team nameMAJOR.MINOR.PATCH
it is SemVer notationDescription
is a goal of the milestone or it's core concept, or even description :)for example, first milestone may looks like:
Search 0.1.0: plots in Jenkins
Why labels for rough estimation
If we want to deliver the product by the scheduled date, we should estimate all tasks needed to accomplish the work.
Without estimation it looks like https://github.com/Tribler/tribler/milestone/35 or https://github.com/Tribler/tribler/milestone/31.
Of course it is much better than nothing.
But the question is "How can we be sure that all these tasks will be completed?"
Very often estimation (or planning) means to discuss tasks in detail and to make a sufficiently accurate estimation.
Not for us at this point, I think.
Instead of "accurate estimation" I propose to use "rough estimation".
When making a rough estimation, the developer has to check the issue briefly and set "rough estimation" based on his feelings. This estimation can be changed during the work on the task.
No magic.
There is a well-known practice "estimation in story points", see effort-vs-time. And again, I think, it is not for our team, because it too heavy to implement and hard to maintain
and hard to understandand not funInstead of
story points
and evenhours
, I propose to use:less than day
1 day
2 days
3 days
1 week
2 weeks
1 month
more than month
unknown
Conclusion
It is my opinion the project could benefit from a bit of organisation.
I tried to offer "minimal effort" to "achieve maximum benefits".
Please, feel free to comment and discuss it.
My main concern is to make our work easier and more predictable.
Not the opposite.
The text was updated successfully, but these errors were encountered: