I did not publish this explicitly, although I do talk about it since some years.
You propose an interesting metaphor. I do not have any direct experience, but I find it interesting to see the parallel between “roughing&finishing” and the principles put forward by Tufte, namely “removing chart junk & increasing data ink”. In both cases, the former is about removing the unnecessary parts, while the latter is about adding value. Furthermore, in both cases, the latter is the one that requires the largest chunk of energy.
I like how the metaphor emphasizes the iterative nature of the work and how the deeper layer can only be uncovered after you revealed the shallower one. When approached like this, crafting cannot follow a predefined detailed plan. The real plan is discovered during crafting. I find that to be a key ingredient of programming. I look at programming as being a representation of thought that gets refined as we formulate it. From this perspective, programming becomes executable philosophy.
However, I do think that there exists at least one essential part that make programming distinct. A piece of wood has an intrinsic shape, and we interact with that shape both to figure the next step out and to create the new shape. The shape of the wood is essential for our ability to guide our actions, and in the case of the wood, the shape cannot be easily decoupled from the thing.
However, software does not have a shape. The typical textual shape is simply the shape we use to create software. Developers read text. But, code is not text. Text is but one of its shapes. For the longest time, visualization was used to represent maps, which are representation of the intrinsic shape of physical space. It was only recently that we use visualization to reason about abstract concepts. In the process we learnt that by affecting the shape we can increase the effectiveness of reasoning about both large data sets and abstract concepts with orders of magnitude. Interestingly, effectiveness is proportional with how custom the shape is to match the problem at hand. In other words, as data can have many shapes, it is essential to pick the one (or few) that matches the current context.
A software system is an abstract thing. It is a representation of thought in a data form. Its shape is given by tools. As shape is essential, it follows that tools are essential as well. For a long time, software was studied in isolation from tools. I believe this is misguided as it misses a significant part of the picture and it is prone to not produce satisfactory results. For example, we approach and measure the quality of code as being a property of the code itself. The assumption here is that certain measures indicate how well code lends itself for a human to reason about it. Indeed, if we assume that text is the only shape, then these measures can make sense. However, there is an increasing amount of evidence that shows that by changing the tool, we can affect the digestibility of code to a much higher degree than the satisfying of code metrics can. The existing of this very community is an argument to support exactly that thesis.
Our tools are essential. However, not any tools will do. Tools must be moldable enough so that we can quickly and inexpensively explore shapes that are appropriate. We call this property moldability.