Discussion:
[teampractices] How to best track the work within Phabricator Epic tasks
Joel Aufrecht
2016-09-29 23:13:54 UTC
Permalink
TPG is struggling with practices for having lists of sub-tasks within
Phabricator tasks. So far we have used two approaches, neither fully
satisfactory, and we are looking for approaches that solve all of the
problems with none of the drawbacks.

The most common example of this problem is a complex piece of work, e.g. an
"Epic" task, which has many subcomponents and which may take months to
complete in full. We generally create a Phabricator task to track this work
as a whole, tagged as "Epic". Then, we have two different approaches to
decomposition.


*Approach 1: Pure subtasks*

For each divisible piece of work within this Epic, we create a separate
Phabricator task as a subtask of the Epic. The Epic task itself has a brief
description. An example of this is T137479: [EPIC] Provide support to
people in design-related roles <https://phabricator.wikimedia.org/T137479>.

What works well:

- All divisible work is tracked as subtasks, so they can be properly
tracked (status is clear, responsibility is clear, history is logged, etc.)

What works poorly:

- All work must be decomposed into sub-tasks (as opposed to being left
in outline form)
- The relative order of sub-tasks cannot be modified.
- The list of subtasks is presented in the Task Graph, which is not as
familiar or legible as an indented bullet list
- Sub-tasks may have multiple parents, which is confusing to users
expecting pure trees. For example:


​*Approach 2: Manual subtask tree*

The work comprising the Epic is documented in the Phabricator Description
field as a list or tree of subcomponents, which may be either lines of text
or links to Phabricator sub-tasks. Example: T122839: A documented and
agreed upon definition of ‘core work’ exists
<https://phabricator.wikimedia.org/T122839>.

What works well:

- The order of subtasks can be edited
- Small pieces of work can be documented as lines of text instead of
complete Phabricator tasks
- The work breakdown is more legible to those expecting a checklist or
tree
- Sub-tasks can be documented using the {T######} shortcut, which
auto-updates title and status.
- Changes to the Description are well-highlighted in update emails.

What works poorly:

- The subtasks in Phabricator inevitably get out of sync with the list
of subtasks in the Description.
- The status of checkboxes in the description inevitably gets out of
sync with the status of subtasks
- The history of text-only tasks in the description is not easily
accessible in the web interface.

Example:

Should we commit to Approach 1 or 2, or are there other approaches which
provide the benefits of both?



*-- Joel Aufrecht*
Team Practices Group
Wikimedia Foundation
Kevin Smith
2016-10-07 20:59:50 UTC
Permalink
If my years of programming taught me anything, it is the evil of
duplication. There needs to be one authoritative source of information. Any
copy is at high risk of being out-of-date or out-of-synch, either of which
make it misleading. For me, misleading information is (much) worse than
none at all.

In approach 1:

- Sequencing can be handled by creating sub/parent task dependency
chains among the children. It's ugly, and the new phab terminology really
sucks for this use case, but it is possible, if it's important. Or we could
adopt a convention of putting sequence numbers at the start of each subtask
title, in cases where sequencing matters and is not obvious.
- I agree that the graphic presentation is horrible, although the more I
stare at the little spaghetti mazes, the more I start to believe that I
might be starting to understand them.

I think this issue intersects with:

Should we "explode" tasks pro-actively/early? I am increasingly thinking
the answer is "no".

Should we use phabricator as our primary tool for learning the status and
​next steps of an epic? I'm also leaning toward "no", because the epic
owner/shepherd should serve as a reasonable source of that information.




Kevin Smith
Agile Coach, Wikimedia Foundation
Post by Joel Aufrecht
TPG is struggling with practices for having lists of sub-tasks within
Phabricator tasks. So far we have used two approaches, neither fully
satisfactory, and we are looking for approaches that solve all of the
problems with none of the drawbacks.
The most common example of this problem is a complex piece of work, e.g.
an "Epic" task, which has many subcomponents and which may take months to
complete in full. We generally create a Phabricator task to track this work
as a whole, tagged as "Epic". Then, we have two different approaches to
decomposition.
*Approach 1: Pure subtasks*
For each divisible piece of work within this Epic, we create a separate
Phabricator task as a subtask of the Epic. The Epic task itself has a brief
description. An example of this is T137479: [EPIC] Provide support to
people in design-related roles <https://phabricator.wikimedia.org/T137479>
.
- All divisible work is tracked as subtasks, so they can be properly
tracked (status is clear, responsibility is clear, history is logged, etc.)
- All work must be decomposed into sub-tasks (as opposed to being left
in outline form)
- The relative order of sub-tasks cannot be modified.
- The list of subtasks is presented in the Task Graph, which is not as
familiar or legible as an indented bullet list
- Sub-tasks may have multiple parents, which is confusing to users
​*Approach 2: Manual subtask tree*
The work comprising the Epic is documented in the Phabricator Description
field as a list or tree of subcomponents, which may be either lines of text
or links to Phabricator sub-tasks. Example: T122839: A documented and
agreed upon definition of ‘core work’ exists
<https://phabricator.wikimedia.org/T122839>.
- The order of subtasks can be edited
- Small pieces of work can be documented as lines of text instead of
complete Phabricator tasks
- The work breakdown is more legible to those expecting a checklist or
tree
- Sub-tasks can be documented using the {T######} shortcut, which
auto-updates title and status.
- Changes to the Description are well-highlighted in update emails.
- The subtasks in Phabricator inevitably get out of sync with the list
of subtasks in the Description.
- The status of checkboxes in the description inevitably gets out of
sync with the status of subtasks
- The history of text-only tasks in the description is not easily
accessible in the web interface.
Should we commit to Approach 1 or 2, or are there other approaches which
provide the benefits of both?
*-- Joel Aufrecht*
Team Practices Group
Wikimedia Foundation
_______________________________________________
teampractices mailing list
https://lists.wikimedia.org/mailman/listinfo/teampractices
Mukunda Modell
2016-10-12 07:47:38 UTC
Permalink
For tasks with many tiny subtasks, I choose to outline them in the
description and avoid creating separate subtasks.

For bigger 'epic' tasks, it might be better to collect them together under
a milestone in the parent project.

For tasks with several interdependent sub-tasks I think the phabricator
task dependency tree works pretty well for understanding the order and
status of tasks. Sure the presentation could use a lot of improvement but
it doesn't seem that terrible to me (especially after recent updates to fix
horizontal scrolling issues)

The biggest failure in the subtask graph, IMO, is when you have more than
say 10 direct subtasks and the thing starts to get really wide.
Post by Kevin Smith
If my years of programming taught me anything, it is the evil of
duplication. There needs to be one authoritative source of information. Any
copy is at high risk of being out-of-date or out-of-synch, either of which
make it misleading. For me, misleading information is (much) worse than
none at all.
- Sequencing can be handled by creating sub/parent task dependency
chains among the children. It's ugly, and the new phab terminology really
sucks for this use case, but it is possible, if it's important. Or we could
adopt a convention of putting sequence numbers at the start of each subtask
title, in cases where sequencing matters and is not obvious.
- I agree that the graphic presentation is horrible, although the more
I stare at the little spaghetti mazes, the more I start to believe that I
might be starting to understand them.
Should we "explode" tasks pro-actively/early? I am increasingly thinking
the answer is "no".
Should we use phabricator as our primary tool for learning the status and
​next steps of an epic? I'm also leaning toward "no", because the epic
owner/shepherd should serve as a reasonable source of that information.
Kevin Smith
Agile Coach, Wikimedia Foundation
Post by Joel Aufrecht
TPG is struggling with practices for having lists of sub-tasks within
Phabricator tasks. So far we have used two approaches, neither fully
satisfactory, and we are looking for approaches that solve all of the
problems with none of the drawbacks.
The most common example of this problem is a complex piece of work, e.g.
an "Epic" task, which has many subcomponents and which may take months to
complete in full. We generally create a Phabricator task to track this work
as a whole, tagged as "Epic". Then, we have two different approaches to
decomposition.
*Approach 1: Pure subtasks*
For each divisible piece of work within this Epic, we create a separate
Phabricator task as a subtask of the Epic. The Epic task itself has a brief
description. An example of this is T137479: [EPIC] Provide support to
people in design-related roles
<https://phabricator.wikimedia.org/T137479>.
- All divisible work is tracked as subtasks, so they can be properly
tracked (status is clear, responsibility is clear, history is logged, etc.)
- All work must be decomposed into sub-tasks (as opposed to being
left in outline form)
- The relative order of sub-tasks cannot be modified.
- The list of subtasks is presented in the Task Graph, which is not
as familiar or legible as an indented bullet list
- Sub-tasks may have multiple parents, which is confusing to users
​*Approach 2: Manual subtask tree*
The work comprising the Epic is documented in the Phabricator Description
field as a list or tree of subcomponents, which may be either lines of text
or links to Phabricator sub-tasks. Example: T122839: A documented and
agreed upon definition of ‘core work’ exists
<https://phabricator.wikimedia.org/T122839>.
- The order of subtasks can be edited
- Small pieces of work can be documented as lines of text instead of
complete Phabricator tasks
- The work breakdown is more legible to those expecting a checklist
or tree
- Sub-tasks can be documented using the {T######} shortcut, which
auto-updates title and status.
- Changes to the Description are well-highlighted in update emails.
- The subtasks in Phabricator inevitably get out of sync with the
list of subtasks in the Description.
- The status of checkboxes in the description inevitably gets out of
sync with the status of subtasks
- The history of text-only tasks in the description is not easily
accessible in the web interface.
Should we commit to Approach 1 or 2, or are there other approaches which
provide the benefits of both?
*-- Joel Aufrecht*
Team Practices Group
Wikimedia Foundation
_______________________________________________
teampractices mailing list
https://lists.wikimedia.org/mailman/listinfo/teampractices
_______________________________________________
teampractices mailing list
https://lists.wikimedia.org/mailman/listinfo/teampractices
Max Binder
2016-10-21 00:42:29 UTC
Permalink
Post by Mukunda Modell
For bigger 'epic' tasks, it might be better to collect them together under
a milestone in the parent project.
I agree with this. I think for sagas, you can have a whole dedicated
project, and for epics, you can have Milestones. If the Milestones are a
problem (they don't allow relative prioritization of tasks on the same
board, they create #toomanycolumns, etc) then you can create a dedicated
Milestone board, and Herald tag everything on that board with the parent
project.

This approach doesn't preclude Epics. Indeed, you'll find yourself with
tasks that you didn't realize were as big as they turned out to be, or that
get scope creep. That's fine. If that's the case, though, ruthless grooming
into dedicated projects and Milestones seems appropriate.

Regardless, it seems like all of these approaches benefit from having
someone who pays attention to the growing task list and constantly sorts
and prioritizes.
Post by Mukunda Modell
For tasks with many tiny subtasks, I choose to outline them in the
description and avoid creating separate subtasks.
For bigger 'epic' tasks, it might be better to collect them together under
a milestone in the parent project.
For tasks with several interdependent sub-tasks I think the phabricator
task dependency tree works pretty well for understanding the order and
status of tasks. Sure the presentation could use a lot of improvement but
it doesn't seem that terrible to me (especially after recent updates to fix
horizontal scrolling issues)
The biggest failure in the subtask graph, IMO, is when you have more than
say 10 direct subtasks and the thing starts to get really wide.
Post by Kevin Smith
If my years of programming taught me anything, it is the evil of
duplication. There needs to be one authoritative source of information. Any
copy is at high risk of being out-of-date or out-of-synch, either of which
make it misleading. For me, misleading information is (much) worse than
none at all.
- Sequencing can be handled by creating sub/parent task dependency
chains among the children. It's ugly, and the new phab terminology really
sucks for this use case, but it is possible, if it's important. Or we could
adopt a convention of putting sequence numbers at the start of each subtask
title, in cases where sequencing matters and is not obvious.
- I agree that the graphic presentation is horrible, although the
more I stare at the little spaghetti mazes, the more I start to believe
that I might be starting to understand them.
Should we "explode" tasks pro-actively/early? I am increasingly thinking
the answer is "no".
Should we use phabricator as our primary tool for learning the status and
​next steps of an epic? I'm also leaning toward "no", because the epic
owner/shepherd should serve as a reasonable source of that information.
Kevin Smith
Agile Coach, Wikimedia Foundation
Post by Joel Aufrecht
TPG is struggling with practices for having lists of sub-tasks within
Phabricator tasks. So far we have used two approaches, neither fully
satisfactory, and we are looking for approaches that solve all of the
problems with none of the drawbacks.
The most common example of this problem is a complex piece of work, e.g.
an "Epic" task, which has many subcomponents and which may take months to
complete in full. We generally create a Phabricator task to track this work
as a whole, tagged as "Epic". Then, we have two different approaches to
decomposition.
*Approach 1: Pure subtasks*
For each divisible piece of work within this Epic, we create a separate
Phabricator task as a subtask of the Epic. The Epic task itself has a brief
description. An example of this is T137479: [EPIC] Provide support to
people in design-related roles
<https://phabricator.wikimedia.org/T137479>.
- All divisible work is tracked as subtasks, so they can be properly
tracked (status is clear, responsibility is clear, history is logged, etc.)
- All work must be decomposed into sub-tasks (as opposed to being
left in outline form)
- The relative order of sub-tasks cannot be modified.
- The list of subtasks is presented in the Task Graph, which is not
as familiar or legible as an indented bullet list
- Sub-tasks may have multiple parents, which is confusing to users
​*Approach 2: Manual subtask tree*
The work comprising the Epic is documented in the Phabricator
Description field as a list or tree of subcomponents, which may be either
lines of text or links to Phabricator sub-tasks. Example: T122839: A
documented and agreed upon definition of ‘core work’ exists
<https://phabricator.wikimedia.org/T122839>.
- The order of subtasks can be edited
- Small pieces of work can be documented as lines of text instead of
complete Phabricator tasks
- The work breakdown is more legible to those expecting a checklist
or tree
- Sub-tasks can be documented using the {T######} shortcut, which
auto-updates title and status.
- Changes to the Description are well-highlighted in update emails.
- The subtasks in Phabricator inevitably get out of sync with the
list of subtasks in the Description.
- The status of checkboxes in the description inevitably gets out of
sync with the status of subtasks
- The history of text-only tasks in the description is not easily
accessible in the web interface.
Should we commit to Approach 1 or 2, or are there other approaches which
provide the benefits of both?
*-- Joel Aufrecht*
Team Practices Group
Wikimedia Foundation
_______________________________________________
teampractices mailing list
https://lists.wikimedia.org/mailman/listinfo/teampractices
_______________________________________________
teampractices mailing list
https://lists.wikimedia.org/mailman/listinfo/teampractices
_______________________________________________
teampractices mailing list
https://lists.wikimedia.org/mailman/listinfo/teampractices
Mukunda Modell
2017-01-06 01:27:22 UTC
Permalink
Post by Mukunda Modell
For bigger 'epic' tasks, it might be better to collect them together under
Post by Mukunda Modell
a milestone in the parent project.
I agree with this. I think for sagas, you can have a whole dedicated
project, and for epics, you can have Milestones. If the Milestones are a
problem (they don't allow relative prioritization of tasks on the same
board, they create #toomanycolumns, etc) then you can create a dedicated
Milestone board, and Herald tag everything on that board with the parent
project.
I try to very gently discourage using herald to tag everything with a
parent project. It hasn't become a problem yet but ultimately herald rules
do not scale. The herald rules themselves are tedious to create and
maintain and they are slow for phabricator to process. If we get too many
herald rules then phabricator will be slow and fixing it will be tedious.
The overhead is in the range of 10ms to 100ms per herald rule.

I didn't start out to be a naysayer though. I am really replying to to
share some team practices with the group based on experience with the
#Scap3 project.

https://phabricator.wikimedia.org/project/board/1449/ is the parent
project. It could be a sub-project under our team project but it's
currently a top-level project. The top level workboard is mostly for
backlog and high-level categorization of the tasks. We have created
milestones that approximately correspond to quarterly goals. When something
moves from backlog it can go into a future milestone, the current milestone
or into the "debt" column for a future tech debt sprint. Further
prioritization and progress tracking happens within each milestones'
workboard:

https://phabricator.wikimedia.org/project/subprojects/1449/

We still end up with epic tasks and the phabricator task graph helps with
those but I think milestones are nice for this sort of thing. Milestones
could represent any amount of work, not just quarterly goals, however, the
key advantage in keeping them small is that you can easily see everything
on one screen. So I would recommend scoping your milestones so that they
are limited to whatever you feel is a manageable set of tasks that doesn't
become overwhelming to look at.

The line between manageable and overwhelming is obviously subjective but I
think it's useful to think of milestones in this way.

Anyway that's my $0.02 about milestones.

Happy Practicing,
Mukunda
Post by Mukunda Modell
This approach doesn't preclude Epics. Indeed, you'll find yourself with
tasks that you didn't realize were as big as they turned out to be, or that
get scope creep. That's fine. If that's the case, though, ruthless grooming
into dedicated projects and Milestones seems appropriate.
Regardless, it seems like all of these approaches benefit from having
someone who pays attention to the growing task list and constantly sorts
and prioritizes.
Post by Mukunda Modell
For tasks with many tiny subtasks, I choose to outline them in the
description and avoid creating separate subtasks.
For bigger 'epic' tasks, it might be better to collect them together
under a milestone in the parent project.
For tasks with several interdependent sub-tasks I think the phabricator
task dependency tree works pretty well for understanding the order and
status of tasks. Sure the presentation could use a lot of improvement but
it doesn't seem that terrible to me (especially after recent updates to fix
horizontal scrolling issues)
The biggest failure in the subtask graph, IMO, is when you have more than
say 10 direct subtasks and the thing starts to get really wide.
Post by Kevin Smith
If my years of programming taught me anything, it is the evil of
duplication. There needs to be one authoritative source of information. Any
copy is at high risk of being out-of-date or out-of-synch, either of which
make it misleading. For me, misleading information is (much) worse than
none at all.
- Sequencing can be handled by creating sub/parent task dependency
chains among the children. It's ugly, and the new phab terminology really
sucks for this use case, but it is possible, if it's important. Or we could
adopt a convention of putting sequence numbers at the start of each subtask
title, in cases where sequencing matters and is not obvious.
- I agree that the graphic presentation is horrible, although the
more I stare at the little spaghetti mazes, the more I start to believe
that I might be starting to understand them.
Should we "explode" tasks pro-actively/early? I am increasingly thinking
the answer is "no".
Should we use phabricator as our primary tool for learning the status
and ​next steps of an epic? I'm also leaning toward "no", because the epic
owner/shepherd should serve as a reasonable source of that information.
Kevin Smith
Agile Coach, Wikimedia Foundation
Post by Joel Aufrecht
TPG is struggling with practices for having lists of sub-tasks within
Phabricator tasks. So far we have used two approaches, neither fully
satisfactory, and we are looking for approaches that solve all of the
problems with none of the drawbacks.
The most common example of this problem is a complex piece of work,
e.g. an "Epic" task, which has many subcomponents and which may take months
to complete in full. We generally create a Phabricator task to track this
work as a whole, tagged as "Epic". Then, we have two different approaches
to decomposition.
*Approach 1: Pure subtasks*
For each divisible piece of work within this Epic, we create a separate
Phabricator task as a subtask of the Epic. The Epic task itself has a brief
description. An example of this is T137479: [EPIC] Provide support to
people in design-related roles
<https://phabricator.wikimedia.org/T137479>.
- All divisible work is tracked as subtasks, so they can be
properly tracked (status is clear, responsibility is clear, history is
logged, etc.)
- All work must be decomposed into sub-tasks (as opposed to being
left in outline form)
- The relative order of sub-tasks cannot be modified.
- The list of subtasks is presented in the Task Graph, which is not
as familiar or legible as an indented bullet list
- Sub-tasks may have multiple parents, which is confusing to users
​*Approach 2: Manual subtask tree*
The work comprising the Epic is documented in the Phabricator
Description field as a list or tree of subcomponents, which may be either
lines of text or links to Phabricator sub-tasks. Example: T122839: A
documented and agreed upon definition of ‘core work’ exists
<https://phabricator.wikimedia.org/T122839>.
- The order of subtasks can be edited
- Small pieces of work can be documented as lines of text instead
of complete Phabricator tasks
- The work breakdown is more legible to those expecting a checklist
or tree
- Sub-tasks can be documented using the {T######} shortcut, which
auto-updates title and status.
- Changes to the Description are well-highlighted in update emails.
- The subtasks in Phabricator inevitably get out of sync with the
list of subtasks in the Description.
- The status of checkboxes in the description inevitably gets out
of sync with the status of subtasks
- The history of text-only tasks in the description is not easily
accessible in the web interface.
Should we commit to Approach 1 or 2, or are there other approaches
which provide the benefits of both?
*-- Joel Aufrecht*
Team Practices Group
Wikimedia Foundation
_______________________________________________
teampractices mailing list
https://lists.wikimedia.org/mailman/listinfo/teampractices
_______________________________________________
teampractices mailing list
https://lists.wikimedia.org/mailman/listinfo/teampractices
_______________________________________________
teampractices mailing list
https://lists.wikimedia.org/mailman/listinfo/teampractices
_______________________________________________
teampractices mailing list
https://lists.wikimedia.org/mailman/listinfo/teampractices
For bigger 'epic' tasks, it might be better to collect them together under
Post by Mukunda Modell
a milestone in the parent project.
I agree with this. I think for sagas, you can have a whole dedicated
project, and for epics, you can have Milestones. If the Milestones are a
problem (they don't allow relative prioritization of tasks on the same
board, they create #toomanycolumns, etc) then you can create a dedicated
Milestone board, and Herald tag everything on that board with the parent
project.
This approach doesn't preclude Epics. Indeed, you'll find yourself with
tasks that you didn't realize were as big as they turned out to be, or that
get scope creep. That's fine. If that's the case, though, ruthless grooming
into dedicated projects and Milestones seems appropriate.
Regardless, it seems like all of these approaches benefit from having
someone who pays attention to the growing task list and constantly sorts
and prioritizes.
Post by Mukunda Modell
For tasks with many tiny subtasks, I choose to outline them in the
description and avoid creating separate subtasks.
For bigger 'epic' tasks, it might be better to collect them together
under a milestone in the parent project.
For tasks with several interdependent sub-tasks I think the phabricator
task dependency tree works pretty well for understanding the order and
status of tasks. Sure the presentation could use a lot of improvement but
it doesn't seem that terrible to me (especially after recent updates to fix
horizontal scrolling issues)
The biggest failure in the subtask graph, IMO, is when you have more than
say 10 direct subtasks and the thing starts to get really wide.
Post by Kevin Smith
If my years of programming taught me anything, it is the evil of
duplication. There needs to be one authoritative source of information. Any
copy is at high risk of being out-of-date or out-of-synch, either of which
make it misleading. For me, misleading information is (much) worse than
none at all.
- Sequencing can be handled by creating sub/parent task dependency
chains among the children. It's ugly, and the new phab terminology really
sucks for this use case, but it is possible, if it's important. Or we could
adopt a convention of putting sequence numbers at the start of each subtask
title, in cases where sequencing matters and is not obvious.
- I agree that the graphic presentation is horrible, although the
more I stare at the little spaghetti mazes, the more I start to believe
that I might be starting to understand them.
Should we "explode" tasks pro-actively/early? I am increasingly thinking
the answer is "no".
Should we use phabricator as our primary tool for learning the status
and ​next steps of an epic? I'm also leaning toward "no", because the epic
owner/shepherd should serve as a reasonable source of that information.
Kevin Smith
Agile Coach, Wikimedia Foundation
Post by Joel Aufrecht
TPG is struggling with practices for having lists of sub-tasks within
Phabricator tasks. So far we have used two approaches, neither fully
satisfactory, and we are looking for approaches that solve all of the
problems with none of the drawbacks.
The most common example of this problem is a complex piece of work,
e.g. an "Epic" task, which has many subcomponents and which may take months
to complete in full. We generally create a Phabricator task to track this
work as a whole, tagged as "Epic". Then, we have two different approaches
to decomposition.
*Approach 1: Pure subtasks*
For each divisible piece of work within this Epic, we create a separate
Phabricator task as a subtask of the Epic. The Epic task itself has a brief
description. An example of this is T137479: [EPIC] Provide support to
people in design-related roles
<https://phabricator.wikimedia.org/T137479>.
- All divisible work is tracked as subtasks, so they can be
properly tracked (status is clear, responsibility is clear, history is
logged, etc.)
- All work must be decomposed into sub-tasks (as opposed to being
left in outline form)
- The relative order of sub-tasks cannot be modified.
- The list of subtasks is presented in the Task Graph, which is not
as familiar or legible as an indented bullet list
- Sub-tasks may have multiple parents, which is confusing to users
​*Approach 2: Manual subtask tree*
The work comprising the Epic is documented in the Phabricator
Description field as a list or tree of subcomponents, which may be either
lines of text or links to Phabricator sub-tasks. Example: T122839: A
documented and agreed upon definition of ‘core work’ exists
<https://phabricator.wikimedia.org/T122839>.
- The order of subtasks can be edited
- Small pieces of work can be documented as lines of text instead
of complete Phabricator tasks
- The work breakdown is more legible to those expecting a checklist
or tree
- Sub-tasks can be documented using the {T######} shortcut, which
auto-updates title and status.
- Changes to the Description are well-highlighted in update emails.
- The subtasks in Phabricator inevitably get out of sync with the
list of subtasks in the Description.
- The status of checkboxes in the description inevitably gets out
of sync with the status of subtasks
- The history of text-only tasks in the description is not easily
accessible in the web interface.
Should we commit to Approach 1 or 2, or are there other approaches
which provide the benefits of both?
*-- Joel Aufrecht*
Team Practices Group
Wikimedia Foundation
_______________________________________________
teampractices mailing list
https://lists.wikimedia.org/mailman/listinfo/teampractices
_______________________________________________
teampractices mailing list
https://lists.wikimedia.org/mailman/listinfo/teampractices
_______________________________________________
teampractices mailing list
https://lists.wikimedia.org/mailman/listinfo/teampractices
_______________________________________________
teampractices mailing list
https://lists.wikimedia.org/mailman/listinfo/teampractices
Max Binder
2017-01-06 21:20:06 UTC
Permalink
Thanks, Mukunda! Good stuff. :)

I try to very gently discourage using herald to tag everything with a
Post by Mukunda Modell
parent project. It hasn't become a problem yet but ultimately herald rules
do not scale.
Thanks for the reminder. I definitely guilty of thinking about this stuff
more theoretically sometimes, and it's easy to say "Herald will fix it"
without acknowledging the practical aspects.

When something moves from backlog it can go into a future milestone, the
Post by Mukunda Modell
current milestone or into the "debt" column for a future tech debt sprint.
I really dig the idea of collecting tasks under a Tech Debt Milestone and
then tackling it when it reaches a certain size. It's sort of like filling
up a bucket with water from a leak, and then emptying it when it reaches
your established limit. Works with existing mountains of debt, too, but I
think it just requires more discipline.

So I would recommend scoping your milestones so that they are limited to
Post by Mukunda Modell
whatever you feel is a manageable set of tasks that doesn't become
overwhelming to look at.
An analogy for many things in our line of work. :-D
Post by Mukunda Modell
Post by Mukunda Modell
For bigger 'epic' tasks, it might be better to collect them together
Post by Mukunda Modell
under a milestone in the parent project.
I agree with this. I think for sagas, you can have a whole dedicated
project, and for epics, you can have Milestones. If the Milestones are a
problem (they don't allow relative prioritization of tasks on the same
board, they create #toomanycolumns, etc) then you can create a dedicated
Milestone board, and Herald tag everything on that board with the parent
project.
I try to very gently discourage using herald to tag everything with a
parent project. It hasn't become a problem yet but ultimately herald rules
do not scale. The herald rules themselves are tedious to create and
maintain and they are slow for phabricator to process. If we get too many
herald rules then phabricator will be slow and fixing it will be tedious.
The overhead is in the range of 10ms to 100ms per herald rule.
I didn't start out to be a naysayer though. I am really replying to to
share some team practices with the group based on experience with the
#Scap3 project.
https://phabricator.wikimedia.org/project/board/1449/ is the parent
project. It could be a sub-project under our team project but it's
currently a top-level project. The top level workboard is mostly for
backlog and high-level categorization of the tasks. We have created
milestones that approximately correspond to quarterly goals. When something
moves from backlog it can go into a future milestone, the current milestone
or into the "debt" column for a future tech debt sprint. Further
prioritization and progress tracking happens within each milestones'
https://phabricator.wikimedia.org/project/subprojects/1449/
We still end up with epic tasks and the phabricator task graph helps with
those but I think milestones are nice for this sort of thing. Milestones
could represent any amount of work, not just quarterly goals, however, the
key advantage in keeping them small is that you can easily see everything
on one screen. So I would recommend scoping your milestones so that they
are limited to whatever you feel is a manageable set of tasks that doesn't
become overwhelming to look at.
The line between manageable and overwhelming is obviously subjective but I
think it's useful to think of milestones in this way.
Anyway that's my $0.02 about milestones.
Happy Practicing,
Mukunda
Post by Mukunda Modell
This approach doesn't preclude Epics. Indeed, you'll find yourself with
tasks that you didn't realize were as big as they turned out to be, or that
get scope creep. That's fine. If that's the case, though, ruthless grooming
into dedicated projects and Milestones seems appropriate.
Regardless, it seems like all of these approaches benefit from having
someone who pays attention to the growing task list and constantly sorts
and prioritizes.
Post by Mukunda Modell
For tasks with many tiny subtasks, I choose to outline them in the
description and avoid creating separate subtasks.
For bigger 'epic' tasks, it might be better to collect them together
under a milestone in the parent project.
For tasks with several interdependent sub-tasks I think the phabricator
task dependency tree works pretty well for understanding the order and
status of tasks. Sure the presentation could use a lot of improvement but
it doesn't seem that terrible to me (especially after recent updates to fix
horizontal scrolling issues)
The biggest failure in the subtask graph, IMO, is when you have more
than say 10 direct subtasks and the thing starts to get really wide.
Post by Kevin Smith
If my years of programming taught me anything, it is the evil of
duplication. There needs to be one authoritative source of information. Any
copy is at high risk of being out-of-date or out-of-synch, either of which
make it misleading. For me, misleading information is (much) worse than
none at all.
- Sequencing can be handled by creating sub/parent task dependency
chains among the children. It's ugly, and the new phab terminology really
sucks for this use case, but it is possible, if it's important. Or we could
adopt a convention of putting sequence numbers at the start of each subtask
title, in cases where sequencing matters and is not obvious.
- I agree that the graphic presentation is horrible, although the
more I stare at the little spaghetti mazes, the more I start to believe
that I might be starting to understand them.
Should we "explode" tasks pro-actively/early? I am increasingly
thinking the answer is "no".
Should we use phabricator as our primary tool for learning the status
and ​next steps of an epic? I'm also leaning toward "no", because the epic
owner/shepherd should serve as a reasonable source of that information.
Kevin Smith
Agile Coach, Wikimedia Foundation
On Thu, Sep 29, 2016 at 11:13 PM, Joel Aufrecht <
Post by Joel Aufrecht
TPG is struggling with practices for having lists of sub-tasks within
Phabricator tasks. So far we have used two approaches, neither fully
satisfactory, and we are looking for approaches that solve all of the
problems with none of the drawbacks.
The most common example of this problem is a complex piece of work,
e.g. an "Epic" task, which has many subcomponents and which may take months
to complete in full. We generally create a Phabricator task to track this
work as a whole, tagged as "Epic". Then, we have two different approaches
to decomposition.
*Approach 1: Pure subtasks*
For each divisible piece of work within this Epic, we create a
separate Phabricator task as a subtask of the Epic. The Epic task itself
has a brief description. An example of this is T137479: [EPIC]
Provide support to people in design-related roles
<https://phabricator.wikimedia.org/T137479>.
- All divisible work is tracked as subtasks, so they can be
properly tracked (status is clear, responsibility is clear, history is
logged, etc.)
- All work must be decomposed into sub-tasks (as opposed to being
left in outline form)
- The relative order of sub-tasks cannot be modified.
- The list of subtasks is presented in the Task Graph, which is
not as familiar or legible as an indented bullet list
- Sub-tasks may have multiple parents, which is confusing to users
​*Approach 2: Manual subtask tree*
The work comprising the Epic is documented in the Phabricator
Description field as a list or tree of subcomponents, which may be either
lines of text or links to Phabricator sub-tasks. Example: T122839: A
documented and agreed upon definition of ‘core work’ exists
<https://phabricator.wikimedia.org/T122839>.
- The order of subtasks can be edited
- Small pieces of work can be documented as lines of text instead
of complete Phabricator tasks
- The work breakdown is more legible to those expecting a
checklist or tree
- Sub-tasks can be documented using the {T######} shortcut, which
auto-updates title and status.
- Changes to the Description are well-highlighted in update emails.
- The subtasks in Phabricator inevitably get out of sync with the
list of subtasks in the Description.
- The status of checkboxes in the description inevitably gets out
of sync with the status of subtasks
- The history of text-only tasks in the description is not easily
accessible in the web interface.
Should we commit to Approach 1 or 2, or are there other approaches
which provide the benefits of both?
*-- Joel Aufrecht*
Team Practices Group
Wikimedia Foundation
_______________________________________________
teampractices mailing list
https://lists.wikimedia.org/mailman/listinfo/teampractices
_______________________________________________
teampractices mailing list
https://lists.wikimedia.org/mailman/listinfo/teampractices
_______________________________________________
teampractices mailing list
https://lists.wikimedia.org/mailman/listinfo/teampractices
_______________________________________________
teampractices mailing list
https://lists.wikimedia.org/mailman/listinfo/teampractices
For bigger 'epic' tasks, it might be better to collect them together
Post by Mukunda Modell
under a milestone in the parent project.
I agree with this. I think for sagas, you can have a whole dedicated
project, and for epics, you can have Milestones. If the Milestones are a
problem (they don't allow relative prioritization of tasks on the same
board, they create #toomanycolumns, etc) then you can create a dedicated
Milestone board, and Herald tag everything on that board with the parent
project.
This approach doesn't preclude Epics. Indeed, you'll find yourself with
tasks that you didn't realize were as big as they turned out to be, or that
get scope creep. That's fine. If that's the case, though, ruthless grooming
into dedicated projects and Milestones seems appropriate.
Regardless, it seems like all of these approaches benefit from having
someone who pays attention to the growing task list and constantly sorts
and prioritizes.
Post by Mukunda Modell
For tasks with many tiny subtasks, I choose to outline them in the
description and avoid creating separate subtasks.
For bigger 'epic' tasks, it might be better to collect them together
under a milestone in the parent project.
For tasks with several interdependent sub-tasks I think the phabricator
task dependency tree works pretty well for understanding the order and
status of tasks. Sure the presentation could use a lot of improvement but
it doesn't seem that terrible to me (especially after recent updates to fix
horizontal scrolling issues)
The biggest failure in the subtask graph, IMO, is when you have more
than say 10 direct subtasks and the thing starts to get really wide.
Post by Kevin Smith
If my years of programming taught me anything, it is the evil of
duplication. There needs to be one authoritative source of information. Any
copy is at high risk of being out-of-date or out-of-synch, either of which
make it misleading. For me, misleading information is (much) worse than
none at all.
- Sequencing can be handled by creating sub/parent task dependency
chains among the children. It's ugly, and the new phab terminology really
sucks for this use case, but it is possible, if it's important. Or we could
adopt a convention of putting sequence numbers at the start of each subtask
title, in cases where sequencing matters and is not obvious.
- I agree that the graphic presentation is horrible, although the
more I stare at the little spaghetti mazes, the more I start to believe
that I might be starting to understand them.
Should we "explode" tasks pro-actively/early? I am increasingly
thinking the answer is "no".
Should we use phabricator as our primary tool for learning the status
and ​next steps of an epic? I'm also leaning toward "no", because the epic
owner/shepherd should serve as a reasonable source of that information.
Kevin Smith
Agile Coach, Wikimedia Foundation
On Thu, Sep 29, 2016 at 11:13 PM, Joel Aufrecht <
Post by Joel Aufrecht
TPG is struggling with practices for having lists of sub-tasks within
Phabricator tasks. So far we have used two approaches, neither fully
satisfactory, and we are looking for approaches that solve all of the
problems with none of the drawbacks.
The most common example of this problem is a complex piece of work,
e.g. an "Epic" task, which has many subcomponents and which may take months
to complete in full. We generally create a Phabricator task to track this
work as a whole, tagged as "Epic". Then, we have two different approaches
to decomposition.
*Approach 1: Pure subtasks*
For each divisible piece of work within this Epic, we create a
separate Phabricator task as a subtask of the Epic. The Epic task itself
has a brief description. An example of this is T137479: [EPIC]
Provide support to people in design-related roles
<https://phabricator.wikimedia.org/T137479>.
- All divisible work is tracked as subtasks, so they can be
properly tracked (status is clear, responsibility is clear, history is
logged, etc.)
- All work must be decomposed into sub-tasks (as opposed to being
left in outline form)
- The relative order of sub-tasks cannot be modified.
- The list of subtasks is presented in the Task Graph, which is
not as familiar or legible as an indented bullet list
- Sub-tasks may have multiple parents, which is confusing to users
​*Approach 2: Manual subtask tree*
The work comprising the Epic is documented in the Phabricator
Description field as a list or tree of subcomponents, which may be either
lines of text or links to Phabricator sub-tasks. Example: T122839: A
documented and agreed upon definition of ‘core work’ exists
<https://phabricator.wikimedia.org/T122839>.
- The order of subtasks can be edited
- Small pieces of work can be documented as lines of text instead
of complete Phabricator tasks
- The work breakdown is more legible to those expecting a
checklist or tree
- Sub-tasks can be documented using the {T######} shortcut, which
auto-updates title and status.
- Changes to the Description are well-highlighted in update emails.
- The subtasks in Phabricator inevitably get out of sync with the
list of subtasks in the Description.
- The status of checkboxes in the description inevitably gets out
of sync with the status of subtasks
- The history of text-only tasks in the description is not easily
accessible in the web interface.
Should we commit to Approach 1 or 2, or are there other approaches
which provide the benefits of both?
*-- Joel Aufrecht*
Team Practices Group
Wikimedia Foundation
_______________________________________________
teampractices mailing list
https://lists.wikimedia.org/mailman/listinfo/teampractices
_______________________________________________
teampractices mailing list
https://lists.wikimedia.org/mailman/listinfo/teampractices
_______________________________________________
teampractices mailing list
https://lists.wikimedia.org/mailman/listinfo/teampractices
_______________________________________________
teampractices mailing list
https://lists.wikimedia.org/mailman/listinfo/teampractices
_______________________________________________
teampractices mailing list
https://lists.wikimedia.org/mailman/listinfo/teampractices
Joel Aufrecht
2017-01-11 18:40:34 UTC
Permalink
Post by Mukunda Modell
I didn't start out to be a naysayer though. I am really replying to to
share some team practices with the group based on experience with the
#Scap3 project.
https://phabricator.wikimedia.org/project/board/1449/ is the parent
project. It could be a sub-project under our team project but it's
currently a top-level project. The top level workboard is mostly for
backlog and high-level categorization of the tasks. We have created
milestones that approximately correspond to quarterly goals. When something
moves from backlog it can go into a future milestone, the current milestone
or into the "debt" column for a future tech debt sprint. Further
prioritization and progress tracking happens within each milestones'
https://phabricator.wikimedia.org/project/subprojects/1449/
We still end up with epic tasks and the phabricator task graph helps with
those but I think milestones are nice for this sort of thing. Milestones
could represent any amount of work, not just quarterly goals, however, the
key advantage in keeping them small is that you can easily see everything
on one screen. So I would recommend scoping your milestones so that they
are limited to whatever you feel is a manageable set of tasks that doesn't
become overwhelming to look at.
There may be two separate issues worth considering here: How we use epics
or other tools to groups bundles of tasks "tactically", at the range of
about 3 to 15 tasks, for daily management, and how we group tasks for
longer-term and bigger planning. Once we get beyond one screen-ful of
tasks, we need aggregate reporting to effectively track them.

[image: Inline image 1]
​
Andre Klapper
2017-01-12 03:02:01 UTC
Permalink
Post by Joel Aufrecht
[image: Inline image 1]
Seems like the image supposed to be displayed here did not make it.

andre
--
Andre Klapper | Wikimedia Bugwrangler
http://blogs.gnome.org/aklapper/
Joel Aufrecht
2017-01-17 17:45:59 UTC
Permalink
Trying image attachment again.

I didn't start out to be a naysayer though. I am really replying to to
Post by Mukunda Modell
Post by Mukunda Modell
share some team practices with the group based on experience with the
#Scap3 project.
https://phabricator.wikimedia.org/project/board/1449/ is the parent
project. It could be a sub-project under our team project but it's
currently a top-level project. The top level workboard is mostly for
backlog and high-level categorization of the tasks. We have created
milestones that approximately correspond to quarterly goals. When something
moves from backlog it can go into a future milestone, the current milestone
or into the "debt" column for a future tech debt sprint. Further
prioritization and progress tracking happens within each milestones'
https://phabricator.wikimedia.org/project/subprojects/1449/
We still end up with epic tasks and the phabricator task graph helps with
those but I think milestones are nice for this sort of thing. Milestones
could represent any amount of work, not just quarterly goals, however, the
key advantage in keeping them small is that you can easily see everything
on one screen. So I would recommend scoping your milestones so that they
are limited to whatever you feel is a manageable set of tasks that doesn't
become overwhelming to look at.
There may be two separate issues worth considering here: How we use epics
or other tools to groups bundles of tasks "tactically", at the range of
about 3 to 15 tasks, for daily management, and how we group tasks for
longer-term and bigger planning. Once we get beyond one screen-ful of
tasks, we need aggregate reporting to effectively track them.

So, Milestones are good for looking at a countable number of tasks (~7 or
less) as a group. For managing larger quantities of tasks, aggregate
reports are essential. For example:


​

Loading...