Concepts, features, and interactions

Continuing the discussion from Concept anomalies in text formatting:

I recently ran into a different anomaly in text formatting: in Slack, the text properties of “inline code” and “link” are mutually exclusive (though I seem to recall this not always being the case), so I can’t, for example, link to a function’s documentation from its name if I want the name to be rendered in red monospace font on a grey background.

To me, this is clearly an implementation bug, and specifically a “feature interaction” bug[1]. Maybe the concept of “link” as a refinement of the concept of “text format” is relevant, but further experimentation leads me to believe that’s not the case[2].

(Aside: Combinatorial testing for implementation bugs due to interactions is a line of work I find interesting, and at least one resource uses text formatting as an example.)

I’ve also run into feature interaction bugs in specifications I’ve worked with (we decided to add one feature, but we didn’t consider how it would interact with an already existing feature until we got to the implementation, which led to delays). I’m wondering what the analogous “concept interaction bugs” would look like, and how to detect and fix them. It would arise from something like at two concepts A and B each of which has an explicitly specified interaction with a third concept C, and the implicit A <-> B interaction is

  • under-specified (multiple satisfying realizations of the spec)
  • over-specified (no way to satisfy the spec)
  • or mis-specified (unique realization which nonetheless is undesirable for some reason)

Is there any existing material I can look at to learn more?

  1. I haven’t really been able to understand the original literature on feature interactions, so my knowledge comes from this blog post and this paper. ↩︎

  2. I found that bold, strikethrough, and italics all work as expected with links and with inline code, so the bug seems to result specifically from this pairwise interaction and not either component individually. ↩︎