It is not enough for code to work.
― Robert C. Martin
One of the big selling points for high performance computing is real world impact. A focus for this impact revolves around computer codes with the capability to produce answers for people working on real world problems. In organizations such as mine where modeling and simulation produces analysis used to assist decision-making, these codes are known as production codes, or the production codes. As these codes provide real value to our applied programs, and with this value provides generous financial support. This support is necessary for the codes to do their job and creates financial stability. With this support comes acute responsibility that needs to be acknowledged and serious effort needs to apply to meeting these.
Being a production code means producing results that are meaningful. The results are important by virtue of their utility in decision-making that impacts the real world. In the past those using production codes as expert users provided the credibility needed to make these codes important. In other words credibility was granted by the weight of the expertise of the users. This element in expertise-based credibility is still alive today, but increasingly being replaced by systematic approaches to bolster the purely human element. The appropriate and proper use of verification, validation, and uncertainty quantification along with software quality assurance provides a system for assessing credibility and constructing evidence. More and more this evidence is demanded to document credibility and reassure decision makers.
One of the main things production codes give is the ability to model important problems in the real world. This is the primary characteristic of production codes, modeling capability for real problems. While this character is primary in defining production codes everything else important in high performance computing is eclipsed by the modeling imperative. These codes are essential for the utility of high performance computing resources and often become the first codes to make their way and use high-end resources. They quite often are the explicit justification for the purchase of such computing hardware. This character usually dominates and demands certain maturity of software professionalism.
On the flipside there are significant detrimental aspects of such codes. For example the methods and algorithms in production codes are often crude and antiquated in comparison to state of the art. The same can be said for the models, the algorithms and often the computer code itself. The whole of the production code credibility is deeply impacted by these pedigrees and their impact on real World programs and things. This issue comes from several directions; the codes are often old and used for long periods of time. The experts who traditionally define the credibility drive this to some extent. It often takes a long time to develop the code to the level needed to solve the hard real world problems as well as the expertise to navigate the code’s capability into results that have real world meaning. Older methods are robust, proven and trusted (low order, and dissipative is usually how robust happens). Newer methods are more fragile, or simply can’t deal with all the special cases and issues that threaten the solution of real problems. Again, the same issues are present with models, algorithms and the nature or quality of the computer code itself.
Knowledge is something which you can use.
Belief is something which uses you.
― Idries Shah
In the final analysis the production code status must be earned and can not granted by fiat. Generally one might intend for a code to become a production code, but it only becomes a production code when it begins to produce. That production must be delivered with credibility and trust. It is an utterly organic process that cannot be forced. While significant support comes with production code status, it also comes with responsibilities as well. Increasingly in a modern context these responsibilities include software quality, verification and validation to be executed in a serious professional manner. Hopefully the “customers” for production code analysis will be more demanding and insistent on a more systematic pedigree. Even today this pull for systematic pedigree is poorly supported by the customers of production code results creating an environment where counter-productive practices and results continue to supported.
In far too many instances, the systematic pedigree defining steps are being skipped for the old system of person-centered credibility. The old person-centered system is simple and straightforward. You trust somebody and develop a relationship that supports credibility. This person’s skills include detailed technical analysis, but also inter-personal relationship building skills. If such a system is in place there is not a problem as long as the deeper modern credibility is also present. Too often the modern credibility is absent or shorted and effectively replaced by a cult of personality. If we put our trust in people who do not value the best technical work available in favor of their force of personality or personal relationships we probably deserve the substandard work that results.
Tell me what you pay attention to and I will tell you who you are.
― José Ortega y Gasset