The utility API generates what you were writing by hand

A project with forty hand-written utility classes can generate them from a map instead, with responsive and state variants included.

$utilities: map-merge(
  $utilities,
  (
    "opacity": (
      property: opacity,
      class: opacity,
      responsive: true,
      values: (0: 0, 25: .25, 50: .5, 100: 1)
    ),
  )
);

// generates .opacity-25, .opacity-md-50, and so on

The generated variants are the value: writing the responsive forms by hand means four breakpoints per utility and nobody does it consistently. The risk is generating hundreds of classes nobody uses, which is invisible in development and measurable in the stylesheet — the utilities map is also the place to remove what the project does not need, which is the half of the API people skip.