Page MenuHomePhabricator

Why not just add an option/setting/preference?
Open, WishlistPublic

Description

I almost always reject changes which add a new configuration option, setting or preference. It is usually much easier to get a change upstream if it does not add an option than if it does.

Options make the software harder for me to test. I have to go fiddle with the options every time I touch related code and make sure all of the branches work.

Options are often a symptom of poor product design. Designing a good software product is hard; building a lowest-common-denominator product with a lot of options is relatively easy. But this is a worse product, and worse for everyone in the long run, and not the kind of software I want to build. In my experience, it is rare that adding an option is the best solution to a problem.

Options make the software worse for most other users, too -- particularly, they make it harder for new users to install and configure the software. We have too many options today and intend to reduce the number of options over time.

Generally, changes which introduce options are really easy to write and really hard to maintain. Since I will be the one maintaining them, changes which introduce options face an exceedingly high barrier to upstream adoption.

Related Objects

Mentioned In
T4926: When emails are sent to new people (or lists) they should contain the change description and patch
D18636: Add the repository name to revisions in Differential list view.
T1246: Intraline diff bailout at 80 characters is inflexible and undesirable
D19372: Add a rough "!history" email command to get an entire object history via email
T7895: Make HIGHLIGHT_BYTE_LIMIT configurable
T12792: Consider an option to disable all popup notifications
T12778: Repository mirroring is much more frequent than necessary
T12771: Users can mistakenly create revisions with no repository through confusion or misconfiguration
T12733: (2017 Week 20) Inline Comments Errata / Feedback
T12703: When integrated, CircleCI and Harbormaster can send redundant notifications
T6400: Option to disable Phabricator comment hiding/collapsing
T12468: Make subcription on comment optional
M1473: Home PanelEngine
T7643: Improve prose diffs (was: description changes don't generate usable diffs)
T11921: Set mail sender name as "<User> via <Configurable name>".
T8238: Formally support side-band change handoff in external repositories
T11621: View full commit message in diffusion query results
T11532: Replace paste language selection dropdown with a typeahead
T4322: Diffusion show folders first
T11453: Increase storage size of "summary" column on DiffusionRepositoryCommit
T10915: Allow story points to just be task count
T7047: Add user preference for diffs in emails
T11151: Commit emails have broken formatting
T3025: Detect when browser and account timezone settings differ and prompt user to reconcile them
T10984: arc diff to put Revision URI into clipboard
T10700: Disable a Username change for the Registration via a Provider
T10600: Add a Custom Name to Authentication Methods
T10262: Scramble file secrets when attached objects change their view policies
T10584: Allow users to amend revisions they don't own, without commandeering them
Q335: Is it possible to set a default # of points on Maniphest tasks...
T10506: Use size=full by default for gifs
T10412: Change Milestone sort options
T10416: 7b8d38cd causes hangs with SSH master connection
T10274: Did arc land --hold change behavior?
T10199: NSS on Red Hat derivative OSes does not support ECC cipher-suites and can not connect to CloudFlare HTTPS
Q285: Customize (or disable) paging for Diffusion browse (Answer 315)
T10204: Sort Comments by "Newest First"
T10000: Consider restoring Clowncopterize
T9657: Upgrading: arc land flow has been rewritten in git
D10176: Add server-side-encryption support to S3StorageEngine
D14528: Increase the maximum size eligible for image transforms configurable from 4MB->16MB
T9815: Fast repository polling on multiple repositories causes 2Hz polling of remote host
Z1336: General Chat
T9688: Option to show Real Name instead of username
T9592: "Create subtask" is not greyed out for logged-out users
T4213: Provide custom themes, skinning, or custom CSS
D14273: Skip pygmentize for large source and too long lines
T9166: Option to set/override email notification preferences on a self-hosted Phabricator instance
rP2bdb5404c7e9: Implement new profile transform with amazing "error handling" feature
T1735: Improve implementation of "Re:" prefix by dropping it from messages which are unambiguously first-in-thread
T8709: arc diff: option to just add Differential ref to commit message (middle ground between mutable and immutable workflows)
T5296: Allow user-defined date format
D11819: Add phd.umask option to set umask for phd daemons
D9990: Option to allow tab key to indent text [T3965]

Event Timeline

epriestley raised the priority of this task from to Wishlist.
epriestley updated the task description. (Show Details)
epriestley added a project: Guides.
epriestley added a subscriber: epriestley.