I’ve had plenty of breakthroughs at 9PM, but most of those could have been gotten at 11AM the next day without neglecting my family.
You're a better coder than I am/was then. Everytime, without fail, if I took that break at 9pm, left work, and came back the next day, I never solved that problem.
You come into the office the next day and you have more/new problems to solve on top of the one you were trying to solve the night before, and you have to try to get back 'into the zone' of the problem solving for that one single problem (especially when you've had to do a bunch of configurations to your IDE for the last-night problem being worked on), very problematic to do when the office is busy.
Speaking of, forgot to mention that point, but working late usually gives you a quieter office environment to work in. Its always why I would try to start work at 10am (or later) on any project I was one, give me an hour or three of "quiet' at the end of the day to wrap up work uninterrupted.
Edit: Forgot to mention in my reply, but ...
without neglecting my family
I made sure to never do that. Balancing Life/Work is always tough, but staying employeed with a great income sometimes takes better care of your family than being home late for dinner one evening.