Chapter 47. The Fallacy of Perfect Knowledge
WE ALL KNOW IN OUR HEART OF HEARTS that we don’t know everything. Every day, hopefully, we learn a bit more about our profession, our society, and ourselves. But we simply can’t know it all. If we stop learning we fall behind rapidly, especially in the software industry. The idea that one can apprentice to a trade and practice that trade the rest of one’s life has gone the way of the dodo. Remember the dodo bird? No? That’s the point.
Technology, techniques, and the ideas upon which they are built change far too rapidly in our era for any practitioner to know all he or she needs to know at any point in time. We must constantly learn and we must equally adjust to a state of ignorance, which requires us to spend some portion of every project researching the knowledge we need. Why, then, do we persist in pretending that we must, or even can, know everything about a software project during its development phase?
The history of software engineering is replete with attempts to control software projects, through carefully bound development and maintenance activities to prevent buggy, failed software. Most such methodologies, such as the classic “waterfall” methodology, presume that with sufficient time and up-front diligence, a software project can be completely understood. Many demand that requirements be set in stone before a line of ...