First cut of an 'info panel' for phabricator. Basic concept is for display a list of items with a bit more info and depth and an object item list. Projects could be a good first example.
Details
- Reviewers
epriestley btrahan - Commits
- Restricted Diffusion Commit
rPe4787067695c: PHUIInfoPanel
UIExamples
Diff Detail
- Lint
Lint Skipped - Unit
Tests Skipped
Event Timeline
I like the header and progress bar a lot.
I'm less sold on the "grid of numbers", at least for projects (did you have other plans/intents?), for several reasons:
- I think we will rarely have 4 or 6 items, and often have infinite items.
- In the case of Priority, it's configurable now, so an install can have an arbitrary number of priority levels and/or make priority meaningless.
- Visually, it's hard for me to parse meaningful information out of it. The element is attractive, but I don't get a sense of the overall project status by looking at it, and can't easily compare projects. In comparison, the progress bar is easy for me to parse and compare.
- I'm not sure it communicates important information. I don't think priority buckets are especially important, except maybe the "triage/backlog" size and the "Unbreak Now" count, if the project defines one, and in both cases the most important information is "are there any at all?". For Differential on this host, here's the data:
| 6 | 0 | 0 | | Needs Triage | Unbreak Now | High | |--------------+-------------+----------| | 35 | 28 | 17 | | Normal | Low | Wishlist |
I'm not sure when I'd look at that or what it tells me. I can't use it to distinguish between active and inactive projects, I can't use it to get a sense of project progress, I can't even easily use it to compare the rough size of projects because I have to add up a bunch of numbers.
I'm not sure I have any great ideas for this, but conceptually I'd like this view to answer questions like:
- Does this project need attention?
- How is the project proceeding, overall?
- How much progress has been made recently?
- When will the project be complete?
I think the number grid is only helpful for answering the first question, and isn't great at that.
Some maybe-ideas for approaching this:
For milestone and sprint projects, focus on the current sprint/milestone and its overall completion.
{F74962}
To keep the height fixed, we could always show 2 or 3 of these (current, next, next-next) or something like that. The progress bar could be color-coded like this, maybe:
|AAAAAAAAAAAABBCCDDyyyyxxz|
Where "A" is completed work 72 hours ago, BB is the work completed 3 days ago, CC is the work completed 2 days ago, DD is the work completed yesterday, yyyy is remaining work, xx is work assigned to you, and z is unassigned work.
The idea being that you could look at the different bar colors and get a sense of project velocity, remaining work, stuff that needed assignment, etc.
Github-style histogram, or sparkline:
{F74965}
...either showing completed work or open work, or both? I like the idea of coloring progress bars more than this and this is harder to scale across projects, but either of these views seem more useful to me than the bucket counts, since it can help answer questions like "how are things going?".
Explicit callout for triage/unbreak:
{F74967}
My drawing is dumb, but the number-panel view doesn't make it easy to scan for tasks with triage vs tasks without triage, since "0" has about the same visual weight as "9". I think the two most important pieces of information are "does this project have triage tasks" and "does this project have unbreak tasks". Two other possibly-important pieces are "does this project have non-backlog, unassigned tasks" and "does this project have tasks assigned to me". Calling these out explicitly and primarily having the element communicate "Yes" or "No" seems more useful to me than the grid, although the grid could also just have a clearer distinction between "0" and "not 0".
Not sure I understand the 'rarely have 4 or 6' in relations to projects, especially to infinity (and beyond!). Are there examples on Phabricator's install? These are meant to be mini-boards, and be a parallel to them, so it would seem boards are likely to have the same issue?
Oh, I mean that the examples bucket things into "Priorities", and by default we define 6 (Unbreak, Triage, High, Normal, Low, Wish). However, the priorities are user-configurable (by setting maniphest.priorities), so installs can have a different number of priorities, and that number can be arbitrarily large. Even before the configuration landed, I believe Disqus renamed the priorities to "In Progress", "Planned", "Later", "Unused", "Unused", "Unused" or something, although they could now implement that properly (and maybe have). If the design relies on installs having 6 meaningful priorities, it won't work well for many installs.
I do plan for boards to have infinite columns -- Milestone and Sprint boards, particularly, have a column per milestone/sprint. I assume most Kanban/Whiteboard boards will have about 5-6 columns so that everything fits on one screen, but I think we'll get into trouble if we assume 6 of anything is a reasonable number for most installs.
I imagine Sprint/Milestone looking something like this (I think they're basically the same, except that one is called "Sprints" and one is called "Milestones"):
{F74971}
These are flexible enough to 12 and 16, and beyond if you really like. I did plan that out, though yes it might get silly at some point - but no more silly than 16 priority levels :). I had also thought these might be generally useful in harbormaster/releeph, but I haven't spent time in either to really know. My general thought was there are cases I wanted more information that ObjectList provided - but I see your point on Projects specifically.
I think this unit overall could have some generaly use in Phabricator if not Projects, maybe commit and see if we need it in the future?
There are a lot of conversations about Projects (Sprints, Boards, etc) and logged out homepages I wonder might be best to occur in person with a whiteboard. I shudder to think a real meeting room might be useful, but getting everyone on one gameplan seems like that could be the quickest route.
Sure, works for me.
src/view/phui/PHUIInfoPanelView.php | ||
---|---|---|
74 | We should cast this to (int) or (float) to prevent accidents with: ->setProgress('" onclick="javascript:derp()"') ...and such. |