The day-of-month / day-of-week trap
When both fields are restricted, cron fires when EITHER matches, not both. So 0 0 1 * 1 runs on the first of the month AND on every Monday - which is almost never what the person writing it had in mind.
Write the expression or build it field by field, read it back as a sentence, and check it against the next eight times it will actually run. The run times are the point: two expressions can read almost identically and fire on completely different days.
Five fields, or an @shorthand such as @daily.
Every 15 minutes between 09:00 and 17:59 on Monday, Tuesday, Wednesday, Thursday and Friday.
Fires about every 15 minutes. Check the dates below against what you meant.
When both fields are restricted, cron fires when EITHER matches, not both. So 0 0 1 * 1 runs on the first of the month AND on every Monday - which is almost never what the person writing it had in mind.
A cron daemon fires in the machine's local timezone; most cloud schedulers default to UTC. That difference moves a nightly job by hours, and moves it again when daylight saving starts. Check both columns here before shipping a schedule.
Quartz, Spring and some cloud schedulers take a leading seconds field and extras such as L, W and #. Standard cron does not. This page rejects them rather than guessing, because a field a scheduler silently ignores is a schedule that quietly runs at the wrong time.