Lessons learned: don't mix $timeout attributes and properties on queued Laravel jobs

Update: the fix described in this post has since been merged into Laravel and ships in the next 13.x release. From that release on, a child class&rsquo;s plain $timeout property correctly overrides an attribute inherited from a parent, so the specific footgun below no longer bites. This post stays up as a historical write-up: how the bug behaved, the subtle PHP reflection edge case behind it, and…