When you compare it to the reference photo you can see that our render is significantly darker than the reference photo.

At this point most of us would start doing some "cheating". Like adding extra lamps to exaggerate bounce lighting, or increasing the sky light to fill the room with light.

But this makes no sense.

In the reference photo, the room is lit with the sunlight only. No cheats required. So why doesn't this work in blender?

It doesn't work due to the poor dynamic range:

The reason the room is too dark is because the sunlight isn't bouncing enough, The reason the sunlight isn't bouncing enough is because the sunlight isn't bright enough, The reason the sunlight isn't bright enough is because the sunlight was already blowing out The reason the sunlight was blowing out was because of having only 8 stops of dynamic range to work with!

So if you can increase the dynamic range, you can increase the sunlight, which will increase the bounce lighting, which will give us perfect lighting without any workarounds!

The Cause of the Poor Dynamic Range

Thankfully Blender's poor dynamic range isn't due to the actual renderer. And for that matter, many external renderers suffer from the same problem.

The cause is the Color Management configuration that Blender is using.

Because just like a camera, when blender renders something it's storing the information of the final render as 0s and 1s. In order to see the information on a display, it needs to be converted. And for that it uses a color transform.

But the problem is that blender is using the sRGB color transform! Which was originally designed to approximate the response of a CRT monitor. It was never designed for rendering, nor should it ever be used for rendering!