mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-13 00:56:15 +01:00
bce83bf844
Summary: Ref T9908. No more callsites. Also: - Phurl a couple of documentation URIs. - Get rid of "task:" in the global search since it doesn't really make sense anymore. Test Plan: `grep`, edited/created tasks. Reviewers: chad Reviewed By: chad Maniphest Tasks: T9908 Differential Revision: https://secure.phabricator.com/D14716
243 lines
11 KiB
Text
243 lines
11 KiB
Text
@title Contributing Feature Requests
|
|
@group detail
|
|
|
|
Describes how to file an effective Phabricator feature request.
|
|
|
|
Describe Your Problem!
|
|
======================
|
|
|
|
IMPORTANT: When filing a feature request, you **MUST** describe the root
|
|
problem you are facing. We will not accept feature requests which do not
|
|
include a problem description. See below for details.
|
|
|
|
Overview
|
|
========
|
|
|
|
Have a feature you'd like to see in Phabricator? This article describes how
|
|
to file an effective feature request.
|
|
|
|
The most important things to do are:
|
|
|
|
- understand the upstream;
|
|
- make sure your feature makes sense in the project;
|
|
- align your expectations around timelines and priorities;
|
|
- describe your problem, not your solution; and
|
|
- file a task in
|
|
[[ http://secure.phabricator.com/u/newfeature/ | Maniphest ]].
|
|
|
|
The rest of this article walks through these points in detail.
|
|
|
|
If you have a bug report (not a feature request), see
|
|
@{article:Contributing Bug Reports} for a more tailored guide.
|
|
|
|
For general information on contributing to Phabricator, see
|
|
@{article:Contributor Introduction}.
|
|
|
|
|
|
Understanding the Upstream
|
|
==========================
|
|
|
|
Before filing a feature request, it may be useful to understand how the
|
|
upstream operates.
|
|
|
|
The Phabricator upstream is [[ https://www.phacility.com | Phacility, Inc ]].
|
|
We maintain total control over the project and roadmap. There is no democratic
|
|
process, voting, or community-driven decision making. This model is better
|
|
at some things and worse at others than a more community-focused model would
|
|
be, but it is the model we operate under.
|
|
|
|
We have a cohesive vision for the project in the long term, and a general
|
|
roadmap that extends for years into the future. While the specifics of how
|
|
we get there are flexible, many major milestones are well-established.
|
|
|
|
Although we set project direction, the community is also a critical part of
|
|
Phabricator. We aren't all-knowing, and we rely on feedback to help us identify
|
|
issues, guide product direction, prioritize changes, and suggest features.
|
|
|
|
Feature requests are an important part of this, but we ultimately build only
|
|
features which make sense as part of the long term plan.
|
|
|
|
Since it's hard to absorb a detailed understanding of that vision, //describing
|
|
a problem// is often more effective than //requesting a feature//. We have the
|
|
context to develop solutions which fit into our plans, address similar use
|
|
cases, make sense with the available infrastructure, and work within the
|
|
boundaries of our product vision. For more details on this, see below.
|
|
|
|
|
|
Target Audiences
|
|
================
|
|
|
|
Some feature requests support very unusual use cases. Although we are broadly
|
|
inclusive of many different kinds of users and use cases, we are not trying
|
|
to make the software all things to all users. Use cases which are far afield
|
|
from the things the majority of users do with Phabricator often face substantial
|
|
barriers.
|
|
|
|
Phabricator is primarily targeted at software projects and organizations with
|
|
a heavy software focus. We are most likely to design, build, and prioritize
|
|
features which serve these organizations and projects.
|
|
|
|
Phabricator is primarily targeted at software professionals and other
|
|
professionals with adjacent responsibilities (like project management and
|
|
operations). Particularly, we assume users are proficient computer users and
|
|
familiar with software development concepts. We are most likely to design, build
|
|
and prioritize features which serve these users.
|
|
|
|
Phabricator is primarily targeted at professionals working in teams on full-time
|
|
projects. Particularly, we assume most users will use the software regularly and
|
|
are often willing to spend a little more time up front to get a more efficient
|
|
workflow in the long run. We are most likely to design, build and prioritize
|
|
features which serve these use cases.
|
|
|
|
Phabricator is not limited to these kinds of organizations, users and use cases,
|
|
but features which are aimed at a different group of users (like students,
|
|
casual projects, or inexperienced computer users) may be harder to get
|
|
upstreamed. Features aimed at very different groups of users (like wedding
|
|
planners, book clubs, or dogs) will be much harder to get upstreamed.
|
|
|
|
In many cases, a feature makes something better for all users. For example,
|
|
suppose we fixed an issue where colorblind users had difficulty doing something.
|
|
Dogs would benefit the most, but colorblind human users would also benefit, and
|
|
no one would be worse off. If the benefit for core users is very small these
|
|
kinds of features may be hard to prioritize, but there is no exceptional barrier
|
|
to getting them upstreamed.
|
|
|
|
In other cases, a feature makes something better for some users and worse for
|
|
other users. These kinds of features face a high barrier if they make the
|
|
software better at planning weddings and worse at reviewing code.
|
|
|
|
|
|
Setting Expectations
|
|
====================
|
|
|
|
We have a lot of users and a small team. Even if your feature is something we're
|
|
interested in and a good fit for where we want the product to go, it may take
|
|
us a long time to get around to building it.
|
|
|
|
We work full time on Phabricator, and our long-term roadmap (which we call our
|
|
[[ https://secure.phabricator.com/w/starmap/ | Starmap ]]) has many years worth
|
|
of work. Your feature request is competing against thousands of other requests
|
|
for priority.
|
|
|
|
In general, we try to prioritize work that will have the greatest impact on the
|
|
most users. Many feature requests are perfectly reasonable requests, but have
|
|
very little impact, impact only a few users, and/or are complex to develop and
|
|
support relative to their impact. It can take us a long time to get to these.
|
|
|
|
Even if your feature request is simple and has substantial impact for a large
|
|
number of users, the size of the request queue means that it is mathematically
|
|
unlikely to be near the top.
|
|
|
|
You can find some information about how we prioritize in
|
|
[[ https://secure.phabricator.com/w/planning/ | Planning ]]. In particular,
|
|
we reprioritize frequently and can not accurately predict when we'll build a
|
|
feature which isn't very near to top of the queue.
|
|
|
|
As a whole, this means that the overwhelming majority of feature requests will
|
|
sit in queue for a long time without any updates, and that we won't be able to
|
|
give you any updates or predictions about timelines. One day, out of nowhere,
|
|
your feature will materialize. That day may be a decade from now. You should
|
|
have realistic expectations about this when filing a feature request.
|
|
|
|
If you want a concrete timeline, you can work with us to pay for some control
|
|
over our roadmap. For details, see
|
|
[[ https://secure.phabricator.com/w/prioritization/ | Prioritization ]].
|
|
|
|
|
|
Describe Problems
|
|
=================
|
|
|
|
When you file a feature request, we need you to describe the problem you're
|
|
facing first, not just your desired solution. Describing the problem you are
|
|
facing is the **most important part** of a feature request.
|
|
|
|
Often, your problem may have a lot in common with other similar problems. If we
|
|
understand your use case we can compare it to other use cases and sometimes find
|
|
a more powerful or more general solution which solves several problems at once.
|
|
|
|
At other times, we'll have a planned solution to the problem that might be
|
|
different from your desired solution but accomplish the same goal. Understanding
|
|
the root issue can let us merge and contextualize things.
|
|
|
|
Sometimes there's already a way to solve your problem that might just not be
|
|
obvious.
|
|
|
|
Finally, your proposed solution may not be compatible with the direction we
|
|
want to take the product, but we may be able to come up with another solution
|
|
which has approximately the same effect and does fit into the product direction.
|
|
|
|
If you only describe the solution and not the problem, we can't generalize,
|
|
contextualize, merge, reframe, or offer alternative solutions or workarounds.
|
|
|
|
You must describe the problem you are facing when filing a feature request. We
|
|
will not accept feature requests which do not contextualize the request by
|
|
describing the root problem.
|
|
|
|
If you aren't sure exactly what we're after when we ask you to describe a root
|
|
problem, you can find examples and more discussion in
|
|
@{article:Describing Root Problems}.
|
|
|
|
|
|
Hypotheticals
|
|
=============
|
|
|
|
We sometimes receive hypothetical feature requests about anticipated problems
|
|
or concerns which haven't actually occurred yet. We usually can't do much about
|
|
these until the problems actually occur, since the context required to
|
|
understand and properly fix the root issue won't exist.
|
|
|
|
One situation where this happens is when installs are thinking about adopting
|
|
Phabricator and trying to guess what problems users might encounter during the
|
|
transition. More generally, this includes any request like "if users do **X**,
|
|
they might find **Y** confusing", where no actual users have encountered
|
|
confusion yet.
|
|
|
|
These requests are necessarily missing important context, maybe including the
|
|
answers to questions like these:
|
|
|
|
- Why did users do **X**?
|
|
- What were they trying to do?
|
|
- What did they expect to happen?
|
|
- How often do users do this?
|
|
|
|
The answers to these questions are important in establishing that the issue is
|
|
really a problem, figuring out the best solution for it, and prioritizing the
|
|
issue relative to other issues.
|
|
|
|
Without knowing this information, we can't be confident that we've found a good
|
|
solution to the problem, can't know if we've actually fixed the problem, and
|
|
can't even know if the issue was really a problem in the first place (some
|
|
hypothetical requests describe problems which no users ever encounter).
|
|
|
|
We usually can't move forward without this information. In particular, we don't
|
|
want to spend time solving hypothetical problems which no real users will ever
|
|
encounter: the value of those changes is zero (or negative, by making the
|
|
product more complex without providing a benefit), but they consume development
|
|
time which could be better spent building much more valuable features.
|
|
|
|
Generally, you should wait until a problem actually occurs before filing a
|
|
request about it.
|
|
|
|
|
|
Create a Task in Maniphest
|
|
==========================
|
|
|
|
If you think your feature might be a good fit for the upstream, have reasonable
|
|
expectations about it, and have a good description of the problem you're trying
|
|
to solve, you're ready to file a feature request.
|
|
|
|
It is **particularly critical** that you describe the problem you are facing,
|
|
not just the feature you want. We will not accept feature requests which do
|
|
not describe the root problem the feature is intended to resolve.
|
|
|
|
(NOTE) https://secure.phabricator.com/u/newfeature/
|
|
|
|
|
|
Next Steps
|
|
==========
|
|
|
|
Continue by:
|
|
|
|
- learning about @{article: Contributing Bug Reports}; or
|
|
- reading general support information in @{article:Support Resources}; or
|
|
- returning to the @{article:Contributor Introduction}.
|