(Referring to my former environment, where I managed endpoints)
We used custom constraints based on client settings via “Run only when”. The main reason for doing that was to delegate the maintenance window management to individual system owners.
We would action our patch baseline(s) as a single action targetted to all computers (within a given cycle of development/integration/test by computer group). This reduced the number of actions our central IT org had to issue.
Separate from the patch baselines themselves, we also issued an Offer action to the endpoints, with the Offer being to “open” the maintenance window. The individual system owners, knowing their busy/not-busy times, and what kind of server redundancy they provided better than the central IT group, could accept the “Open my maintenance window” offer at whatever time was good for them. Once they opened their maintenance window, our patching / software deployment actions were free to execute.
We also send a separate “Deadline” maintenance window action. If the system owner did not open their maintenance window through the Offer, this separate Deadline action would force the maintenance window to open sometime over the weekend.
It was kind of the best of both worlds - I had a smaller of patch actions to maintain & report status, and the system owners controlled their own outage timings (within reason). It drastically reduced the time my team spent negotiating outages or service migration schedules.
We didn’t use the maintenance window dashboard because our schedules varied from one week to another, and because we only wanted to constrain our patching actions - aside from patching, we issued a lot of Software Deployment and custom preventative maintenance actions, that we wanted to execute on separate schedules aside from maintenance windows.