Oh I am not saying that you are incorrect either.
About the ease of bugfixing. Let me give you an example from my life literally today:
I wrote bunch of vertex and fragment shaders code, and upgrade from basic shading to diffuse shading, so it can actually render surfaces according to light position.
I backed it up with bunch of C# changes required: changed vertex structure to contain normal vector, changed the size, changed primitives classes so they could contain and calculate normal vectors based on current positions of vertices, which is required to calculate diffuse shading. I also changed predetermined arrays of verticec and indices to provide correct calculations. Then, I created a wrapper class to contain a Vector3 object and pass it to shaders as a uniform. After all that I added some changes in rendering code.
Yet when I boot everything up, nothing was shown - even though silhouettes of my objects on scene should be shown, because ambient light was taken into account in calculations.
I spent 3 hours straight carefully examining my changes in code with debugger, checking if everything was correctly passed, if some calls to memory didn't overlap due to my overlook, stuff like that.
You know what was the cause of displaying fuck all on my scene?
In vertex shader code I assigned one of the output vectors as
vec3(modelMatrix * vec4(position, 1.0));
when the object containing position was called
vPosition not
position, so it should be
vec3(modelMatrix * vec4(vPosition, 1.0));
So yeah, I spent three hours to find the cause of problems, which fixing took me less than 5 seconds.
Also reverting GUI may or may not help, depending on what exactly is faulting
exactly. It may also create/bring back more problems.