The server side events for Pipeline jobs fire immediately. If the user presses the "Build Now" from Classic UI eight times, the Blue Ocean UI will receive events showing status of "QUEUED", "ALLOCATED" and "RUNNING" for all eight jobs immediately. Meanwhile the classic UI shows six of the jobs as queued, while two are running (what the user would expect with only two executors active.
Some implementation ideas, from cliffmeyers
Introduce custom logic in "pubsub-light" SyncRunListener to not fire start events for Pipeline jobs. Create some kind of new listener - "PipelineSyncRunListener, possibly in a new module like pipeline-pubsub-light" - when receives notification of Pipeline's step/stage start and then produces the proper start event as in SyncRunListener.
and impl ideas from tfennelly
Keep the existing "started" event but add a new event called "running" which the Blue Ocean UI would use to transition the job from "queued" to "running"