aria-label vs. aria-describedby
aria-label and aria-describedby are both ARIA attributes, but they do different jobs: aria-label overrides or supplies the accessible name of an element, which screen readers announce first, whereas aria-describedby provides an additional accessible description that is announced afterwards as supplementary information. Neither replaces visible, readable text; they fill gaps where labelling is missing or unclear.
In practice
An icon button with no visible text sensibly gets an aria-label such as "Close search" so that it has a name at all. An input field with a visible label can additionally point to an error message or hint text via aria-describedby without altering the label. Note that aria-labelledby takes precedence over aria-label when both are set, and that descriptions are not read out automatically in every screen reader navigation mode – they should add information, not replace mandatory details.