Direct answer. A hint is the right call for a critical query where you've already ruled out the underlying cause (bad statistics, a missing index) and confirmed, with evidence, that the optimizer is genuinely and repeatably choosing worse than an alternative you can specify; the maintenance risk is that the hint freezes today's decision even as the data, statistics, or engine version change, so a plan that was correct when you added the hint can silently become wrong later with no automatic recovery.
Structured elaboration. An optimizer picks a plan based on its current statistics and cost model; a hint overrides that decision with a fixed choice you specify. That's valuable exactly when you have specific knowledge the optimizer's general-purpose cost model can't capture (a business-logic guarantee about data shape that statistics won't reflect, or a case where the cost model itself is known to misjudge a particular pattern), and risky exactly because the hint doesn't get reconsidered as circumstances change the way a fresh cost-based decision would.
Before reaching for a hint: confirm statistics are current (a hint is frequently a workaround for a statistics problem that would resolve the issue more durably on its own), confirm the alternative plan you want to force is genuinely and consistently better (not just better for the one data snapshot you tested against), and consider whether a smaller, more surgical intervention (an index change, a query rewrite) would fix the root cause instead of papering over it. When a hint is genuinely the right call, treat it the same way you'd treat any other piece of code that encodes an assumption about current data: document why it's there, and revisit it periodically or when the underlying data characteristics are known to have shifted meaningfully.
Worked example. A reporting query whose optimal plan depends on a business fact the optimizer has no way to know (say, "this filter will always match under 1% of rows because of an application-level invariant, even though the column's general statistics don't obviously suggest that") is a reasonable candidate for a hint; a query that's merely slow because statistics happen to be stale THIS week is not, since refreshing statistics is the more durable fix and the hint would just hide that underlying problem until it resurfaces in a different, more confusing way later.
Trade-offs and pitfalls. A codebase that reaches for hints as a first resort, rather than a documented last resort, tends to accumulate a growing set of frozen decisions nobody remembers the reasoning behind, several of which quietly stop being correct as the data evolves; a lightweight guardrail (a comment explaining the specific evidence that justified the hint, plus periodic review) is cheap insurance against that decay.