While the 187 constraint implementations we traced are different from one another, they share structural properties.
We grouped them into categories according to structural properties they share.
We used open coding [1]} to define these categories, based exclusively on the data (i.e., a descriptive approach as opposed to a prescriptive one).
