Fred Brooks really did tell us most of what we need to know about software; we just weren't paying attention. Dare Obasanjo quotes this piece of brilliance from "The Mythical Man Month" - and it's something that I see all the time:
As he designs the first work, frill after frill and embellishment after embellishment occur to him. These get stored away to be used ânext time.â Sooner or later the first system is finished, and the architect, with firm confidence and a demonstrated mastery of that class of systems, is ready to build a second system.
This second is the most dangerous system a man ever designs. When he does his third and later ones, his prior experiences will confirm each other as to the general characteristics of such systems, and their differences will identify those parts of his experience that are particular and not generalizable.
It's humbling to realize just how long ago Brooks wrote that, and how many of us have spent years learning it "for the first time" ourselves. We Smalltalkers like to say that most of the cool things in languages like Java and C# have been done before. What we forget is that the larger lessons have been learned (and forgotten) before as well.