24
6
Code Reuse as a Problem
I was thinking about this question on software delivery, and I kept coming back to the issue of repeatability and / or reproducibility. They matter, because if you don’t repeat a project then it becomes more difficult to improve the process you used to build the project. Engineering involves constantly improving the processes involved with design and construction in order to produce higher quality projects.
Software can rely heavily upon reuse due to its digital form. Instead of rewriting a module, we just call it again or copy it to the other system. Some examples are authentication / login or perhaps a logging function. There are many well known examples for those categories, and conventional wisdom is to reuse what exists instead of rolling your own.
Some Comparisons to Other Disciplines
Construction
In contrast, construction of physical systems (buildings, bridges) is nowhere near as reusable. It’s true that the blueprint of a house can be reused many times to build the same copy of the house, but the construction must be performed each time. Cut & paste doesn’t work like that in the analog world. Bridge blueprints are less reusable that houses because site conditions will vary.
Master builders are experts recognized for having designed and / or built tens, hundreds, or thousands of things in their area. For example, Frank Lloyd Wright, a world renowned architect and designer designed more than 1,000 structures and completed 532 works. Contrast that with Anders Hejlsberg who has designed “just” five languages (Turbo Pascal; Delphi; J++; C#; Typescript). In many ways, it’s an unfair comparison because the domains are different. But at a broad level, the quantifiable production from two very intelligent people is vastly different.
Martial Arts
Martial artists will say that mastery of a move comes only from thousands of repetitions. After a good portion of those repetitions have been put in, many martial artists are surprised at how a previously perceived to be complex kata or form has become simple. Instructors of those students will also notice how the motion becomes more fluid and purposeful as well as having an economy of motion. Likewise, experienced martial artists are able to pick up more complex katas more quickly than less experienced students. Experience from repetition has given them a framework or process that allows them to learn more quickly.
Woodworking
Woodworkers experience a similar transformation. Hobbyist woodworkers always refer back to their first project that required a lot of drawers. If they complete the project, they gain a new appreciation for the efficiencies that assembly lines produce. There are other benefits such as a better understanding of how to lay out the drawers parts on the sheet stock in order to maximize use of the wood. Compared to hobbyists, professional woodworkers are able to more quickly design, start, and construct items that they have made many times before. They also gain an ability to see inherent issues within someone else's design having made that mistake in their work.
So, does software reuse prevent software developers from becoming more proficient?
In many ways, software design and construction is always new. We don’t repeat past works, because if we can reuse a module, library, or system then we do. We’ll preferentially extend an existing system before rewriting the entire thing from scratch. But repetition is what allows us to find efficiency in the design and the construction. Anyone who has practiced a sport or physical activity will tell you that repetition is the key to becoming a good practitioner.
My question: Does software’s ability to be reused prevent the necessary process improvement and efficiency that comes from repeating a project?

If you've written a piece of code, you've essentially solved a problem. If you are good at it, this piece solves a CLASS of problems. If you are really good, it is extensible to a metaclass of problems. And then you lose interest: there is no need to perfect one bicycle if there are unsolved design problems lying around. The thrill of problem solving comes from shining new stuff, not from polishing old problems into perfection. – Deer Hunter – 2013-07-14T19:12:40.953
2good software projects "shift" a lot of repeatability into QA. When I was a tester in 1,5 year long project, we run test cycles at weekly "checkpoint" releases, about 70 times total through the project. That was... quite repeatable, softly speaking (not much things change in a week). Testing nightly builds has been, naturally, even more repeatable - about 500 times through the project (few entertaining showstopper bugs were too rare to make a difference). Now, tell me a construction company that has built 500 bridges - all with the same team – gnat – 2013-07-16T23:23:40.080
@gnat - that's an excellent insight and a perspective I hadn't pondered yet. Other aspects of the SDLC become much more efficient due to that repetition. – GlenH7 – 2013-07-16T23:58:01.730
1
@GlenH7 expanded it into the answer, mostly to include pictures of bridges :)
– gnat – 2013-07-17T00:58:18.190How many problems did Frank Lloyd Wright have to solve in his 1000 structures versus Anders Hejsberg in defining his mere 5 languages? Wright got to make decisions by decree, Anders had to justify decisions to many people just as smart and knowledgeable as him. I'll bet that Anders had to solve many, many more issues. So your throwing numbers in the mix is merely on what you are choosing to count and not any REAL quantifiable comparable numbers. So I like the question, I just don't like the reasoning/examples inspiring the question. SW efficiency has improved tremendously over the years. – Dunk – 2013-07-22T14:46:32.917
@Dunk - consider expanding that line of thought into a full answer. It's reasonable / acceptable to state "Your question is based upon a faulty premise. This is what you should be looking at, and this is the answer you should find." – GlenH7 – 2013-07-22T15:19:48.483