You need watermarks whenever you do event time windowing on an unbounded stream: per minute counts, sessionization, joining two streams within a time bound, or any aggregation that must emit before the stream ends. If you only group by processing time or run pure batch jobs over a fixed dataset, watermarks do not apply because there is no straggler problem to solve.
The core tension is latency versus completeness. A tight watermark delay, like 1 second, gives fast results but discards more late data. A loose delay, like 5 minutes, captures almost everything but holds window state in memory longer and delays every result by that amount. There is no universally correct setting; it depends on how out of order your source really is and how much lateness your business logic can stomach.
Watermarks also cost memory. A window must keep its accumulator alive until the watermark plus allowed lateness clears it. If watermarks advance too slowly, for example because one partition is idle and never emits new timestamps, windows pile up and state grows. Idle source detection and per partition watermarks exist to handle exactly that stall.