Having worked a lot more with HTML and CSS the past decade, I think I see what you're missing. I think programmers of every language could leanr a lot from the philosophy that should drive interface development. One that the numbnuts who create half-assed garbage like frameworks and preprocessors flip the bird at.
It's a very simple concept. In HTML the rule is that your markup should say what things are or why they might recieve "some" sort of style, but NOT what that style is. This is because across different media targets it might get a different style entirely.
This is the same problem multiple user interfaces can have when doing things like changing colouration. Even though you're not using HTML or CSS, apply that same philosophy.
Start thinking of things like "blue-400" as ignorant dumbass garbage just like they are in CSS. Saying "component.flow.primary" makes a hell of a lot more sense because you're saying what the colour is for, not what colour to use.
It's a subtle philisophical difference, but one that makes things like multiskinning for user preference or media target a lot simpler/easier.
It's why codebases in garbage like SASS are such train wrecks of ineptitude, and part of why people unqualified to write HTML or CSS so often dive for them.
Because at the end of the day...
<div class="blue-400 text-center text-bold>
Is as mind-numbingly dumbass and ignorant as:
<ceter><font color="#008"><b>
You're just recreating everything that was wrong with HTML 3.2, pissing presentation into the markup and flippikng the bird at the sepaation of concerns. Anyone telling you to use classes -- or variables -- that way doesn't know enough about HTML or CSS to be flapping their yap on the topic!
See my article on this here: