|
| 1 | + |
| 2 | +> The one bit that worries me is that *fMRIPrep* may become a Swiss army knife. I think instead it should just be a paring knife (small, efficient, and works for many things). |
| 3 | +> |
| 4 | +> -- <cite>Satra ([source](https://github.com/poldracklab/fmriprep/issues/1963#issuecomment-584455061))</cite> |
| 5 | +
|
| 6 | +When projects grow large, many forking paths created by newly implemented features start |
| 7 | +to open up. |
| 8 | +To account for this, the *NiPreps* community was created with the vision of building |
| 9 | +tools like *fMRIPrep* and *MRIQC* covering new imaging modalities, while keeping |
| 10 | +existing *NiPreps* tightly within scope. |
| 11 | +Defining such a scope also aids the implementation of the ease-of-use principle: |
| 12 | + |
| 13 | +> The same way the scanner does not offer an immense space of knobs to turn |
| 14 | +> in the acquisition, *NiPreps* should not add many additional knobs to those |
| 15 | +> for them to be considered a viable *augmentation* or extension of the scanner hw/sw. |
| 16 | +> |
| 17 | +> -- <cite>Oscar ([source](https://github.com/poldracklab/fmriprep/issues/1963#issuecomment-584455061))</cite> |
| 18 | +
|
| 19 | +## The problem of feature creep |
| 20 | +To avert [feature creep](https://en.wikipedia.org/wiki/Feature_creep) and |
| 21 | +to serve each individual *NiPrep*, we developed the following |
| 22 | +guidelines, with the hopes of keeping these tools in a healthy state. |
| 23 | + |
| 24 | +> I'm worried *fMRIPrep* is catching a case of featuritis |
| 25 | +> |
| 26 | +> -- <cite>Mathias ([source](https://github.com/poldracklab/fmriprep/issues/1985#issuecomment-588493059))</cite> |
| 27 | +
|
| 28 | +These guidelines should also serve the community to transparently drive the process |
| 29 | +of including proposals into the road-map, set the ground for healthy conversation, |
| 30 | +and establish some patterns when accepting new-feature contributions. |
| 31 | +Before proposing new features, please be mindful that a road-map may not exist |
| 32 | +for a particular *NiPrep*. |
| 33 | +Even when a development road-map exists, please understand that it is not always |
| 34 | +possible to rigorously follow them: |
| 35 | + |
| 36 | +> I think something like this is what we tried to start sketching out with |
| 37 | +> the development roadmap. The concern, as I remember it, was that we couldn't |
| 38 | +> guarantee (or rule out) specific features when working with a small |
| 39 | +> development team. |
| 40 | +> |
| 41 | +> -- <cite>Elizabeth ([source](https://github.com/poldracklab/fmriprep/issues/1963#issuecomment-582453941))</cite>. |
| 42 | +
|
| 43 | +## Proposing a new feature |
| 44 | + |
| 45 | +### Why the new feature is requested? |
| 46 | +Before going ahead and proposing a new feature, please take some time to |
| 47 | +learn whether the topic has been covered in the past and what decisions |
| 48 | +were made and why. |
| 49 | +This should be reasonably easy to do with the search tool of GitHub on the |
| 50 | +particular *NiPrep* repository. |
| 51 | + |
| 52 | +If no previous discussion about the new idea is found, |
| 53 | +the next step is ensuring the new feature aligns with the vision and |
| 54 | +the scope of the target tool, as |
| 55 | +[Elizabeth points out](https://github.com/poldracklab/fmriprep/issues/1963#issuecomment-582453941). |
| 56 | +Taking a look into the Development Road-map of the particular project |
| 57 | +(if it exists), may help finding an answer. |
| 58 | + |
| 59 | +If the new feature still seems pertinent after this preliminary work |
| 60 | +or you are unsure about whether it falls within the scope, then |
| 61 | +go ahead and post an issue requesting feedback on your proposal. |
| 62 | +Please make sure to clearly state why the new feature should be considered. |
| 63 | + |
| 64 | +### Some questions will always be asked about a new feature |
| 65 | +[These questions by James](https://github.com/poldracklab/fmriprep/issues/1963#issuecomment-582220173) |
| 66 | +will certainly help build up the discourse in support of the new feature, |
| 67 | +as the *NiPreps* maintainers will consider them: |
| 68 | + |
| 69 | + * **Is the user interface affected?** |
| 70 | + Because *NiPreps* generally expose a *command-line interface (CLI)* for the |
| 71 | + interaction with the user, new features involving changes to the CLI must be |
| 72 | + considered with caution as they may harm the ease-of-use: |
| 73 | + |
| 74 | + > It also seems that some new features add more confusion than others. |
| 75 | + > Especially when the CLI is affected, and yet another option is added, |
| 76 | + > that makes the tool more complex to use. |
| 77 | + > |
| 78 | + > -- <cite>Alejandro ([source](https://github.com/poldracklab/fmriprep/ issues/1963#issuecomment-582174814))</cite>. |
| 79 | +
|
| 80 | + * Does the new feature substantially **increase the internal complexity**? |
| 81 | + Maintainers and developers will attempt to consolidate tools and lower the internal |
| 82 | + complexity whenever possible. |
| 83 | + This effort usually competes with the addition of new features as they typically will |
| 84 | + address particular use-cases rather than general improvements. |
| 85 | + However, that doesn't need to be the case, as some sections of the code might be |
| 86 | + objectively improvable and the integration of a new feature revising those might |
| 87 | + also lower complexity. |
| 88 | + Lowering the internal complexity will always be considered a great incentive |
| 89 | + for a new feature to be accepted. |
| 90 | + |
| 91 | + * Is there **a standard procedure** for the proposed feature in the literature? |
| 92 | + |
| 93 | + * if so, could we just use that procedure/value? |
| 94 | + |
| 95 | + * Is the **feature dependent** on some attribute of the input data? (e.g., TR, duration, etc.) |
| 96 | + |
| 97 | + * if so, can the procedure/value be determined algorithmically? |
| 98 | + |
| 99 | + * Does the feature **interact with other settings**? |
| 100 | + For instance, [fmriprep#1962](https://github.com/poldracklab/fmriprep/pull/1962) |
| 101 | + interacts with the a/tCompCor implementation. |
| 102 | + |
| 103 | + * What is the **difficulty of implementing the procedure outside** of a *NiPrep*? |
| 104 | + In other words, does the *NiPrep* provide all the necessary outputs for a |
| 105 | + user to perform the non-standard analysis? |
| 106 | + |
| 107 | + |
| 108 | + |
| 109 | +### How the integration of the new feature will/can be validated? |
| 110 | + |
| 111 | +Please propose ways to validate the new feature in the context of |
| 112 | +the workflow. Meaning, the objective here is to validate that the new |
| 113 | +feature works well within the pipeline, rather than validating a specific |
| 114 | +algorithm. |
| 115 | +To ensure the sustainability of *NiPreps*, the onus of this validation |
| 116 | +should be on the person/group requesting the feature. |
0 commit comments