Talk:Project management tools/Review

Here's what we'd like to learn from you:
 * What are the main technical activities you're involved in in the Wikimedia community?
 * What are your workflows for those activities?
 * Can you tell us everything you must be able to do?
 * Similarly, can you tell us everything you would like to be able to do that would make your work easier?

You're more than welcome to share additional information. The more detailed your responses, the more likely it is that your needs will be met by the tool(s) we collectively end up choosing.

Use the button below to create your section, see examples and format your information more easily.

Technical activities
MediaWiki core development, Flow team.

Workflow
Currently, bugs and features are tracked simultaneously in Mingle (soon to be Trello), Bugzilla, and Gerrit. Discussions happen across all of these platforms, plus via mailing lists, hangouts, Flow pages, and IRC. This has the effect of making our conversations regarding any progress completely disjointed, especially for tasks that take weeks to complete, because the discussion history can be incredibly hard to track.

Must be able to do

 * Create new feature / refactor tasks, discuss them, and then create subtasks or task dependencies
 * Review and approve code before merging into master
 * Restrict user read and/or write access to certain tickets, groups, and repositories
 * Must be able to query tickets and commits by product, component, status, assignee, and keywords

Would like to be able to do

 * Be able to control an entire ticket flow from the git command line
 * Have commit and ticket hooks to report information to IRC

More information
Phabricator does everything we need.

GDubuc (WMF) (talk)
I can't really follow the template because I've just joined and my team (Multimedia)'s workflow is in the middle of a reorganization. We'll probably find a stable way of working in a few weeks, but what we're doing at the moment is a bit irrelevant. However I can comment on Phabricator, having worked with it for a year and a half at deviantART, whose engineering team has a similar size as the WMF.

When I brought up Phrabricator during my interview here I was told that it was initially ruled out because it's incompatible with the WMF workflow/the fact that volunteers submit code. Now that I've had more time to think about it and to see how the work is done here, I don't see why that would be the case.

If anyone has questions about specific things they wonder could/couldn't be done in phabricator, I can probably answer them.

Here's a tentative list of things Phabricator can and can't do that I think are relevant to the WMF:

What it can do

 * Tasks, not bugs. This is a critical distinction. Bugzilla is too focus on taking care only of bugs. Whereas phabricator can take care of tasks and bugs. In fact, UI teams could use phabricator to handle their task management. Product too. That's a huge difference. For example it was common for me at deviantART to have a general product ticket (assigned to product people) with many smaller dependencies that were actually workable by engineers. Basically it's a lot more freeform and it allows each team to organize their workload with the nature of the tasks being completely different. It also allows engineers to prioritize building tasks and bugs alongside each other.
 * Rich markup everywhere. Tasks, changesets, commits, etc. can all have rich markup, not just text. This is particularly useful for non-bug tasks.
 * Code review. The UI for it is just brilliant compared to gerrit. There's just no comparison, phabricator is in another league UI-wise. An example: https://secure.phabricator.com/D7691
 * Testing integration. Something Phabricator can do is have the local utility used for pushing (arcanist) run the same tests locally, in addition to having the server run automated testing. On this one you can see what it looks like when tests fail: https://secure.phabricator.com/D7691 Unlike jenkins, this is properly built-in and doesn't act as a fake user. It will block merging just the same.
 * Doesn't require having another remote in git. Changesets are hosted in phabricator itself. This makes a more simplified git experience (basically no need for something like gerrit/master).
 * Creating automated searches that adds one to reviewers. This is the sort of feature you don't know you needed until you have it. Basically you can track with regexps any changeset or commit. Which means that you can catch people making mistakes as they happen, even if they're being made in a project unrelated to yours. At deviantART this was a brilliant way to make sure that people being onboarded adapted quickly to our best practices.
 * Search. Uses elastic search, it's pretty good.
 * Track backlog/performance. The built-in tools are a bit crude but do the job: https://secure.phabricator.com/maniphest/report/burn/?project=PHID-PROJ-69c04afe1fb836349ccc In the case of my project at deviantART, we were one of the few "healthy" ones where the graph of tickets didn't grow permanently (we actually managed to keep it stable). Again, here the integration is really easy and anyone fancying doing more analytics on the raw data could easily do so.
 * Welcoming 3rd-party contributions. Anyone can push changesets, people with appropriate rights in the project can accept/reject them. Phabricator's own phabricator is a good example of this, many people contribute to it.
 * Paste. Not need to use pastebin anymore. https://secure.phabricator.com/paste/ And more importantly, pastes can easily be referenced in tasks/commits/diffs, etc.
 * The phabricator team is very reactive, it's easy to contribute a bugfix and have it merged quickly (in a matter of days).
 * It has a "serious" mode. By default phabricator has funny wording and encourages the use of macros (usually to include gifs, lolcats and the like), which can put people off. I think that phabricator's phabricator is in that mode. This can be turned off.
 * Slowvote, documentation, etc. Phabricator has many integration apps that may or may not be useful here. Point is, there is a ton of stuff and a lot of new things coming being actively developed.
 * It's written in PHP. Which means that pretty much all webdevs at the WMF can hack Phabricator and we could build custom apps to do what we need. For example while at dA, I wrote Skype integration to log our conversations in the "Chatlog" app.
 * A one-stop-shop overview of one's work. Tasks, code reviews, bugs all seen on an engineer's front page. This is a fantastic way of having visibility over one's own pile of work to do. This is something I really miss here, I find that it requires too much mental gymnastic to have a vision of how many things I have to do, because it's currently split across several tools.

What it can't do

 * Kanban board. However phabricator is easily extensible/pluggable. At this point, I don't think that Pabricator can replace what people are using Mingle for (organizing cards on a board and moving them). This is probably something we could build as a Phabricator app, though.
 * Tags. Particularly, sprint tags are missing, afaik. Which means that if you want to tag/search tasks by sprint you need to create virtual projects whose only purpose is to keep track of which sprints a given task has been worked on. Basically you have a year/week number project that all projects use in addition to their own. Eg. a task would be in the "Multimedia", "UploadWizard" and "2014/4", 2014/5" and 2014/6" projects. Meaning that it got worked on during the sprints of weeks 4, 5 and 6 of 2014. This workaround pollutes the "projects" area needlessly, though. That's probably the feature I miss most.
 * Suggesting tickets when people report an issue. This is actually one of the rare things that WMF's bugzilla instance does better. Phabricator doesn't offer similar tickets when you type a new one, which I guess can result into more dupes. However I've also seen the situation at the WMF where several bugs are being treated in the same long-running ticket, which is detrimental, imho. Coming in late on the bug ticket it's very hard to know what's still current or not. Maybe Phabricator's forced (by the lack of offering similar tickets) approach of having someone manually decide to merge new tasks or not is better than everyone adding comments to a ticket that might not be their exact issue. It does require that someone triages incoming tickets, though.

Technical activities
Technically, I'm just fundraising engineering. In practice, I've more or less taken ownership of our Mingle instance, and the working process it describes (we have had zero product people for about a year).

Workflow
Fundraising's Mingle Instance

Description of Mingle Usage

For those of you who don't have collab accounts (for some reason, this is Fundraising's preferred wiki, and we're trying not to fragment), I will attempt to nutshell below.

We currently have six main card types, that relate to eachother in a heirarchy. Briefly, they are:
 * Triage item: An acknowledgement of the idea that if you make it more difficult (or apparently difficult) to enter a piece of work (bug, feature, whatever) in a system than it is to write the same thing on a post-it note, it will end up on the post-it instead of the system. Triage items are as simple as they get: Just a title and description. It is up to the curator to review triage items and make sure they land in an appropriate place for the tech team (or whomever). Mostly, this item type was created to help bridge the gap between non-tech and tech in fundraising.
 * Business Goal: Large sweeping overarching goals with large sweeping overarching language. Nothing actually actionable.
 * Business Capabilities: Incredibly rough descriptions of things the system will have to be capable of, in order to meet our lofty goals. Business goals can contain multiple business capabilities.
 * Tech Supertask: A vague stab at solving the problem of grouping tasks together in a state of minimum usefulness. Nothing counts as "deployed" until everything in a supertask is deployed. Both business goals and capabilities can contain one or more tech supertasks.
 * Tech task: Finally, some actual engineering. A description of a defect, coding task, production issue (as in, an issue under the creative team's umbrella), ops action, spike, system upgrade, doc review request, 3rd party issue (tracking), documentation task, or dashboard (visualization) item.
 * Tech tasks can belong directly to any card type mentioned above, except for the triage item.
 * Tech tasks must belong to a business goal or capability (either directly or through a supertask), to be considered dev ready.
 * Tech tasks have priority ( based on our Priority Descriptions, and please disregard every other piece of that page because it's all terrible ), a point-based estimate, and a status that roughly corresponds to standard agile swim lanes.
 * Sprint: Exists mostly outside of the business value tree. We don't really think of sprints as being uninterruptable blocks of time (can't do it. Too many critical dependencies with third parties that need sudden maintenance with no notice), but rather as a way to filter what we are supposed to care about now, out of the rest of the backlog.

Business value cards are typically assigned to a campaign in the planner view (can't give access to people who aren't project admins) by someone not in tech. Then, sprints are teased out of the chaos based on (for example) the most pressing goals, what the highest priority items directly relate to in the backlog, how much service disruption will be tolerated in the next [time period], etc.

Must be able to do

 * Alter the workflow in relative significant ways at any time, to accomidate new needs and observations across the whole fundraising team.
 * See the current sprint's swim lanes, and manpiulate cards on the wall.
 * Non-tech must be able to enter and track items that only describe business value.
 * Associate business value items with a campaign / event
 * Associate technical items with business value items
 * See all technical items that associate with a specific business item
 * ...and generate the aggregate estimate
 * Track sprint velocity
 * Seperate planned velocity from emergency velocity (see priority description).
 * Generate burnup charts
 * ...and work in the emergency work trend
 * Query for the type of tech work
 * Query for the relevant codebase
 * Associate tasks with a larger task, with the implication that the smaller tasks would have no inherent value on their own
 * Create an ultra-simple (default?) item entry type, which ideally would not even present anything beyond title and description.
 * Keep track of who created the tech item, and who was working on it last
 * Mark a task as "blocked" (with comments)
 * Keep a date for item creation, and a date for every major lane move (particularly "Pending Code Review" and "Deployed")
 * Keep all our work history together
 * Create our own custom item views, and save them for future use
 * Tag items in a freeform way, and query on that tag

Would like to be able to do

 * Associate tech tasks with more than one business value item. Currently, the business value tree only allows each item to exist up to one time (so it ends up being 1:many on the way down, but only 1:0 or 1:1 for every type on the way up)
 * Have a tech trend graph that can be manipulated in realtime.
 * Display an icon next to the card in the swim lane view, if the card is tagged with "Special Deploy Instructions"
 * Granular security levels for team members - It would be nice if business was somewhat distinct from tech, and everybody could see the planner view without having to be a project admin.
 * Git commit hooks would be lovely.
 * Scripts to automatically correct the "Data Problems" that we find sometimes in our backlog.

More information
Maybe later.

Technical activities
Product management (previously for Mobile team projects, now for the Core features team/Flow project)

Workflow

 * Daily
 * create user stories and design tickets (in Mingle & Trello)
 * prioritize bugs that have been imported via Bingle from BZ to Mingle
 * monitor Gerrit patches via IRC bot to see what things people are working on, where things are blocked, etc.


 * Weekly
 * file and respond to bugs in Bugzilla and attach relevant bug #s to user story cards in Mingle
 * test stories/bugs, close bugs that have been resolved in both Mingle & Bugzilla (sometimes bothering to hunt down the Gerrit patch # if it wasn't added to the bug, but mostly not)
 * link end-users to issues being worked on in Mingle/BZ and update them when they've been resolved
 * look at files in Dropbox/Commons and attach assets to user stories


 * A few times a month
 * respond on Gerrit patches (when they pertain to user-facing copy or behavior)
 * respond to i18n feedback on translatewiki

Must be able to do
I must be able to:


 * assign tasks to users
 * define a task type (bug, feature, enhancement, etc.)
 * see & search code review, bugs, user stories, translation discussions
 * find all the above via product / component / status / assignee / sprint / keywords
 * edit priority, status, and assignees of items
 * create & save custom views of stories/bugs (e.g., "All reopened Flow bugs")
 * mark tasks as not actionable/invalid
 * mark task as "needs more input from person X" & CC those people (sending them notifications)
 * incorporate design assets into task tracking (add external links or attach files)

Would like to be able to do
I would like to:


 * get notifications when new tasks appear or task status changes
 * attach deadlines to tasks
 * attach checklists to tasks
 * have anyone – technical or non-technical, part of my project/team or not – file a new bug
 * have anyone – technical or non-technical, part of my project/team or not – generate an idea for a new user story
 * hunt down the actual human behind IRC/Gerrit/BZ/Mingle/Translatewiki username and be able to talk to him/her
 * do all the things I need to do in one place, not 6 (Mingle, Bugzilla, Gerrit, IRC, Translatewiki, Mediawiki.org) or more

I would like to not:


 * have long product/design/ideology arguments that belong on wiki/mailing list in any task tracking tool
 * have task type, status and/or priority changed by people who are not assigned to the task and/or working on the product in question
 * have to change the status/priority of items twice in two separate places
 * miss things because I forgot to log in to task tracking tool X and/or didn't notice new comment/notification Y
 * use a crappy, non-intuitive UI for simple everyday project management when there are so many nicer, more user-friendly alternatives out there :)
 * mistakenly think User:Foo is 2 people because her username onwiki and her username on Bugzilla are different
 * deal with rudeness or harassment or see it happen to others in any task tracking tool

More information
Just listing out all the tools I use daily/weekly/monthly made my brain hurt.

Technical activities
What are the main technical activities you're involved in in the Wikimedia community?

Wikimedia Mobile App Team. The team uses trello for all of our activities and we *love* it. Its simple, quick, and *never* gets in our way. Our bugs are fed in through bugello and we prioritize them during each standup.

Any new tool would have to work faster, have built in estimation, and be simpler for us to be motivated to switch. Simply put trello is great for us and we think other teams would benefit from using it.

Workflow
For each of those activities, can you describe the workflow you're using?


 * 1) Stories are drafted and placed onto the backlog board
 * 2) Stories are prioritized and flushed out by product ownder
 * 3) Stories are moved to a sprint board
 * 4) Acceptance criteria is defined
 * 5) Stories are estimated
 * 6) Stories are accepted by developers and move through dev stages
 * 7) After two weeks the sprint board is closed and a new one is opened fed by the backlog board

Must be able to do

 * I must be able to add stories through desktop, mobile, tablet
 * I must be able to see real time changes without reloading the web page for a sprint
 * I must be able to set story points and see velocity
 * I must be able to set custom swim lanes
 * I must be able to see everything that is happening within a sprint without scrolling the screen
 * I must have one area for the backlog, one area for the current sprint, and one area for the upcoming sprint

Would like to be able to do

 * I'd like to automatically see sprint velocity graphs without having to make a spreadsheet

More information
Mobile App Team page

Technical activities
Primarily, feature product management, some project management, and occasional coding for:
 * VisualEditor core
 * VisualEditor MediaWiki
 * OOjs
 * OOjs UI
 * UnicodeJS
 * Beta Features
 * … others

Workflow
For the product and project management sides:


 * Raising tickets : bugs, new features, enhancements, technical debt, and tasks [in Bugzilla]
 * Triaging incoming tickets : evaluating, confirming, prioritising, re-wording, adding detail, splitting/specifying, allocating to component/product, setting as blocking/depending on other ticket, accepting/rejecting, … [in Bugzilla]
 * Prioritising work for the team : assigning tickets to a developer's (prioritised) stack [mostly in stand-ups and in a tracking Google Doc]
 * Reviewing changes : consider and test changes made by developers for having met requirements [in Gerrit/Bugzilla]
 * Marking completed tickets : marking tickets that have been completed as done, assigning to the relevant (weekly) release milestone [in Bugzilla]
 * Writing release notes : collate all changes made in a given period, write and release [on-wiki, based on Gerrit and Bugzilla data]
 * Responding to queries : from end users, third party developers, third party sysadmins, etc. [mostly on IRC, by e-mail or on-wiki]

Must be able to do
I MUST be able to:


 * alter a task ticket to:
 * open or close it;
 * convert it to a different type;
 * change its title, product/component, priority, confirmation, wording;
 * be composed of "checklists" of blocking sub-tasks
 * add detail/comments to it;
 * merge, split, broaden or narrow it;
 * assign it to a person and so send them a notification;
 * assign it to a (dated) milestone ("sprint"?); and
 * accept/reject it (with justification)

The system MUST:
 * be able to have private/locked tickets for security-related issues
 * let anyone file a task ticket with a simple account
 * let anyone read any (non-private) task ticket and all statuses
 * and provide simple, short-as-possible- sharable URLs that uniquely identify tickets without login
 * be the only system we use for all projects, configurations, discussions, designs and others (no roll-your-own-process with Mingle, or github, or …)
 * allow cross-project dependencies and cleverness
 * provide a git instance that …
 * only allows team members to merge code
 * runs automated checks (linting etc.) and tests (unit, integration, browser, …) when code commits are submitted, amended, and approved (and blocks merge on this basis)
 * provide a dashboard for the review of incoming streams of, custom saved searches of, and individual …
 * task tickets
 * code commits
 * transmit all needed streams of tickets and code commits by e-mail to users that need it
 * store and display the history of a ticket to any interested users

Would like to be able to do
I SHOULD be able to:
 * alter a task to:
 * attach a file (e.g. a design image) to it; and
 * lock it from further discussion once closed
 * receive by e-mail and be able to review incoming streams of, custom saved searches of, and individual …
 * translation discussions
 * write a narrative of the important changes for a milestone (linking to tasks and commits alike) and series of milestones

The system SHOULD:
 * let anyone file a task using their SUL login transparently
 * prevent some fields of tickets be altered by non-team members (e.g. acceptance, type, priority)
 * lock tickets from further discussion once closed (maybe after some period of time?)
 * show store and display "in-line" the history of a ticket to all users

More information
I wouldn't want to replace IRC for this, but I'd love to junk Bugzilla and the Google Doc (I actually rather like gerrit, but I'm somewhat alone in this); we've previously used Trello, Mingle; Google Spreadsheet and other things for the task management side, and they all suck – it's just a question of how much less they suck.

Technical activities
What are the main technical activities you're involved in in the Wikimedia community?

MediaWiki core development, extension developer, tech ambassador, third-party wiki farm sysadmin

Workflow
For each of those activities, can you describe the workflow you're using?


 * Find a bug/feature I want, either manually or by observing a comment on w:VPT, IRC, or any other page
 * File the bug in bugzilla, maybe ping a few people in IRC to make sure its feasible (if I don't know that already)
 * cc the people who are best suited to fixing the bug if necessary
 * Submit patch in gerrit
 * Get reviews (usually bug a few people on IRC), patch is merged, yay!

Must be able to do
Using the workflow you've described above, can you tell us everything you must be able to do?


 * I must be able to view a list of bugs for a given component and filter them based on various fields/keywords
 * I must be able to set an assignee for a bug
 * I must be able to provide a stable permanent link for the issue
 * It must have a decent search engine
 * I must be able to cross-reference the bug in gerrit (or whatever code review tool) and vice-versa, preferably automatically
 * Anyone (who isn't a spammer/vandal) must be able to comment on the bug
 * I must receive email notifications whenever a bug I filed/am assigned to/cc'd on is updated
 * There must be some kind of real-time notifications feed, preferably IRC

Would like to be able to do
Similarly, can you tell us everything you would like to be able to do that would make your work easier?


 * I should be able to "mute" a thread (github has this feature) to stop receiving notifications about it, regardless of anything else
 * If a bug is linked on wiki, it's nice to be able to see the status/title of the bug (there is currently a gadget for this)

More information
More to come when I think of it. Legoktm (talk) 22:24, 14 January 2014 (UTC)

Technical activities

 * Mostly development on the CirrusSearch extension.
 * A good deal of monitoring it as it goes into production.
 * Some work on Mediawiki core and Elasticsearch.

Workflow
I make code changes because (in no particular order):
 * 1) We notice a bug during the roll out
 * 2) We notice a performance issue roll out
 * 3) Community member notices bug during roll out
 * 4) Community member has great idea
 * 5) We have great idea

3 & 4 sometimes come from Talk:Search or are filed directly in Bugzilla. Usually I file everything from a community member in Bugzilla for them if they don't file it and sent them a link.

I don't always create Bugzilla bugs for things from 1 & 2 & 5 but I certainly will if they are time consuming, high impact, or I can't solve them right now.

Regardless of whether we have a bug I then make the code change, run some portion of my regression tests, and then submit the change to review in gerrit.

Chad reviews my in changes typically in less than 24 hours and Jenkins merges the code. Normally I use the link in the automatic email to go and mark the bug resolved when the code is merged.

Bugs rarely require multiple change sets but when they do I tend to leave the bug in Assigned state even when one change set is waiting for review.

Sometimes I troll my bug list looking for something to knock out or something that has been merged but not marked as such.

When a bug is nasty I'll verify it in production after it has been deployed then mark it as verified. Sometimes I troll through my resolved unverified bugs and go verify them in production.

Often code changes have corresponding deployment activities and I generally execute those manually.

Must be able to do

 * File issues and features so other folks can see them or so I'll remember them later or both.
 * Correlate code changes with issues or features. We do this by adding "Bug: ####" to the commit message.
 * Mark code as requiring a deployment activity.
 * Know whenever code that requires a deployment activity goes to production. I deploy much of my code myself but I need to know if other people deploy it as well.
 * Keep a backlog of deployment activities that have yet to be run in production. Most deployment activities are optional but enable code cleanup or improve some behaviour.
 * Sweep issues and features from my "backlog" when their code is merged.

Would like to be able to do

 * Automatically RESOLVE bugs when the code is merged. Maybe I can mark my commit message as "Closes Bug: ####" rather than "Bug: ###".  Most commits that reference bugs RESOLVE them when merged.
 * Automatically mark issues and features as deployed to production when they are deployed. This would really help with manually verifying once it is deployed and notifying the community.