Check out how Blender’s entire UI (menus, buttons, hotkeys, pie menus, toolbar tools, context menus, etc) is built on a single abstraction: operators -- universal command objects that can be used in many contexts.
Every operator has:
Identifier: mesh.extrude_region_move
Label: human-readable string, like "Extrude Region"
Description: tooltip text, like "Extrude selected vertices, edges or faces along their normals"
Icon: optional enum from Blender’s built-in icon set, like ICON = 'MESH_EXTRUDE_REGION'
RNA properties: parameters / flags like direction, axis, booleans
Poll function: whether it is available in current context, like only enabled when a mesh is in edit mode
Execution logic: the actual command code
Blender’s designers generally follow these principles:
Operators always have labels. Icons are optional. Most menu items use no icon by default. Only well-established visual operations (cursor, transform tools, viewport shading modes, etc.) get icons.
Unlike macOS Tahoe’s vague "everything gets an icon" ideology, Blender uses icons when they convey meaning, but not when they’re decorative filler.