Process, Art, and Embedded Systems Engineering
Hammers - like a lot of other tools - have been around for centuries. And while there are different kinds of hammers for different purposes, in general there isn't much difference between two hammers with the same purpose. Why should there be? A hammer is a simple tool and its general makeup fits its function.
More complex tools and systems have more variation. Consider cars. Again, some cars are for racing and some cars are for transporting families, while others specialize in gas mileage. Yet even among cars meant for transporting families, there is a fairly broad range of choices - minivans vs. station wagons, for example. Buildings come to mind, too. There is probably some optimal layout you could decide on for, say, an airport or a hospital and yet there too there is wide variation.
Why should this be? Why aren't homes, hospitals, airports, and cars using a common ";best"; design with only moderate alterations between any two instances? The reason is there is no way to define ";best"; for everyone on things this complex. In addition, there is an element of art to these items. Suburbia apart, no one actually wants to live in an exact replica of their neighbor's house (especially replicated to their neighborhood, their town, and their country).
In fact, art is another good example. You honestly don't expect that you could open a factory to produce, say, fine art or hit music, right? While both of these have some technical aspect, the formulaic part only gets you so far. Nearly anyone can learn to do some sort of painting or play ";Chopsticks"; on the piano. But only a few people can paint like Picasso or compose like Bach.
What's this got to do with programming or engineering? I think we don't like to admit it, but what we do is similar to music composition. Yes, there is mathematical basis - you can't just string tones together at random and expect it to be harmonious (although judging by some popular music, you might guess this is the case). While anyone can be taught to bang out a simple tune - or rather program - only a select few really create masterpieces.
At some point during my career there has been a lot of emphasis on process in development. Largely, I do think its a good thing if you keep the proper perspective. You can't study how a great programmer writes code and then use that process to make others write great code any more than you can you can decompose how Picasso painted and then have just anyone churn out Picasso-like works.
I realize this doesn't seem to be a very popular position. I know a lot of folks that swear by pattern books and who think the process is the end product. I just can't accept it. Patterns are a great tool and processes can help developers make sure they cover all the bases, keep to schedule, and other good things. But again, you have to keep perspective. Just like cars and buildings, computer systems are part engineering and part art. You simply can't replicate art on an assembly line no matter how much you try.