What is the general verb to use when a developer does his job? Does he 'create' software? 'build'? 'engineer'? In recent years, the word 'craft' has become more fashionable. We are all 'software craftsmen', and the craftsmanship movement has gained enormous momentum. It is definitely an apt description. We focus on quality, creativity and mastery of the skill of programming. Like craftsmen in the past, every line is bespoke, every function something toiled over.
The desk my computer is on was not 'crafted'. Neither was the chair I sit in, or the computer itself. Not even complex machinery, like my car, was crafted. It was manufactured and assembled. Somewhere along the line from idea to my driveway came engineers and designers, but they would be hard-pressed to describe themselves as craftsmen. None of them worried about how to build the screws that hold it together, and yet it will work for years in changing conditions and constant use, with minor maintenance. Why is that so hard for software?
History, when seen through a vague enough lens, is fractal in nature. Parts of it repeat the whole, on shorter time scales. Until about 350 years ago, assembly lines and manufacturing processes hadn't been invented yet. The world was filled with craftsmen. Artisans, experts at their job, knew everything there is to know about their subject. They crafted products of amazing quality and beauty, some that still last to this day. What they couldn't do, was handle complexity. They were unable to produce complex machinery reliably. Does that ring a bell?
All of that changed with the Industrial Revolution. Suddenly, all kinds of products flooded the market. They were cheap and reliable, and the longer time went on, the more intricate and well-designed they were. Economics of scale started playing, and it was suddenly possible to afford conveniences nobody could before. The complexity of available products shot up, but economics of scale and progressing knowledge meant they could be cheap and reliable on a level no craftsman could even imagine. Workers became able to build those complicated products, even without much schooling or in-depth knowledge of the underlying physics. The craftsmen of before morphed into engineers and designers. They did not build anything beyond prototypes themselves, they laid out plans and defined techniques. While the current generation of products are being produced and work, they invent the next. Workshops with a master and his apprentices ceased to exist, replaced by Research and Development, and production divisions.
Software is on the verge of the industrial revolution. Several of the important steps have already been taken, others are being worked on. In part 2, I will try to examine if a few of the most important factors in the Industrial Revolution are at play in the software industry, and what the missing factors might look like.
(read part 2 here!