TL;DR You should allow client to configure every direct output to him. At Oxipit a simple email notification feature produced 6 essential email settings and 7 extra settings regarding email content and attachments.

Just had a quick exchange under the merge request between me and colleague Gediminas. The problem - how fine grained should the settings be to allow you to customize every little detail of the software all by yourself.

GZ: makes me wonder whether we need these settings at this point. There's only a single client using emails and they would have them both enabled, so there is no demand for customization. YAGNI in some sense.

  • Perhaps all clients who use emails will be okay with feature X?
  • How about promoting some of the existing settings to control certain concerns/aspects of the application?
  • On the other hand I suppose it is a legit strategy to have many fine grained settings.

: Here's a direct quote from a client:

But for now, bigger is better. How easy is it to build in a switch not to attach the image [to an email] in case size became a problem?

Reusing other settings sounds like a trouble, could get ambiguous fast. Philosophically, it's easier for us developers to have everything customizable, I think the definition of a good software is "how easy it is to make changes/it's behavior" (Martin Fowler: Is High Quality Software Worth the Cost?)

OTOH, yes, I understand that too many settings makes software confusing and complicated. Especially if we were to add settings that change some internal pathways, e.g. first you do B, then C, and only then A. However, in this case we are customizing a direct output to a client - so I believe we should make it as customizable as possible.