It is from experience. When I was a junior programmer, I overly focused on the end goal, coding until "things worked". Projects got finished, but the internals had cruft and parts were poorly understood. I was not mastering anything. Now I do more thinking, parts that are poorly understood are mapped out with unit and integration tests. Those tests are just little scientific confirmations of how universe of the application works.