(Through me is the way into the city of woe,
through me is the way to eternal sorrow,
through me is the way to an abandoned people.
Sacred justice moved my creator:
I was made by divine omnipotence,
the highest wisdom, and the original love.
Before me there was nothing made
But things eternal, and I eternal endure.
All hope abandon ye who enter here.)
The Divine Comedy, Inferno, Canto iii
Dante Aligheri (1265-1321)*
Dante was not a software engineer, but perhaps he had prescience of the circles of hell found in modern software development. Of course, even with Virgil (Reason) by his side, Dante chose to enter the Inferno regardless of the stern warning at the gates of the vestibule of hell.
The question for us software engineering mortals is what can we do when we find ourselves similarly at such hellish junctures. Well, we can always choose to pray and request divine intercession. Helping us to achieve such a grace is part and parcel of the role of saints. The question for us, then, is straightforward: To which saint(s) should we turn for the most efficacious assistance? That is, who might be the patron saints of software engineers as we toil away in the muck and mire of our pitiable project existences? Who are the saints that might take on this onerous burden?
Luckily for us, saints are saintly and hence willing to accept without hesitation even the most impossible challenge. Also, fortunately, there is a multitude of working patron saints assigned across a vast array of occupations, conditions, and locales. However, since most canonized saints pre-date the notion of software, we must adopt an approach based on analogical reasoning to find our intercessors; and, again, happily for us, analogies are something with which we software developers are experienced.
Since this is a problem in the domain of software, it should be unsurprising that we can fashion a solution via a venerable design technique: top-down functional decomposition. While other approaches may also work, we shall not dawdle; after all, surely we have some very demanding schedule to meet. So let us dive in where angels fear to thread.
That is, let us begin by naming a patron saint whose role will be that of the generalist to intercede for any and all of our projects; and the choice here is very clear given the starkness of the warning writ at the gates of hell: St. Jude (d. first century), the patron saint of Lost or Desperate Causes. Honestly, to whom else could we possibly turn? What makes St. Jude especially apt for this role is that he has several aliases: Simon, Simon the Zealot, and Thaddeus. Considering how often aliasing in programming languages leads to unexpected and obstreperous bugs, we sense that St. Jude would understand us and commiserate with us in our entreaties. So, with St. Jude lined up, we have purchased ourselves some time, our most prized commodity, to allow us to flesh out the rest of the saintly panoply in an calm and orderly manner.
Software engineering is a field that requires a wide assortment of skills, and over the years it has of necessity evolved an interesting collection of sub-specialties. Hence, it seems reasonable for us to base our decomposition on some arrangement of these special skill sets.
Since software engineers are frequently badgered by hawkers of the One True Way, the first specialist saint we will line up is one who might save us from the dangers of methodological singularities and yet still help us ensure a method to our madness. Marshaling candidates is straightforward; since Dante’s Divine Comedy is said to have summed up the Middle Ages, we can turn to three contemporary medieval Doctors of the Church: St. Albertus Magnus (1206-1280), St. Bonaventure (1221-1274), and St. Thomas Aquinas (1225-1274). All three studied and worked at one time or another at the University of Paris. Albertus was even Thomas’ teacher. But if we had to choose only one, then St. Thomas, the author of the Summa Theologica, it should be, but perhaps not precisely for the reason we might suspect.
St. Thomas was a very large man, with a large and organized intellect and execrable handwriting. Shortly before he died, it is said he hit his head on a low-hanging branch while he was out riding on a donkey. Quite possibly that injury resulted in a subdural hematoma that caused Thomas to experience a mystical vision and renounce all his work as utterly worthless, asking that they be burned. Hence, in his regrets, he seems to be the ideal saint to help foster humility in those aspiring to spread the next great method and salvation for those of us seeking refuge from the same.
Even if the One True Method is generally not conducive to our well-being, we do find that we are devoted to process and must expend energy developing sane processes. So we wish to have a patron saint to help us develop rational processes and maintain rational expectations about those processes. Again, with the many canonized saints who founded religious orders and specified Rules for those orders, we have a large pool from which to draw. But, rather than attempting to define an elaborate process for selecting our patron saint here, let us instead adopt a FIFO queuing process and nominate the saint recognized as the Rule originator: St. Benedict (480-543). Our process can be tailored, however, and our decision is not absolute; we will allow others to modify the decision process as they see fit and produce a different candidate.
With that acknowledgement, it should be pointed out that there are reasons other than his being first for selecting St. Benedict. His monastic rule evolved when he attracted a community of followers and realized that what might be acceptable for a hermit would not be practical for a group. He also realized that an atmosphere filled only with prayer was too rarefied. So he developed a rule that divided the day into hours and emphasized daily work tasks as the seasons demanded, a fair division of labor among all monks and communal self-sufficiency. In fact, since the monasteries he founded faced many practical problems, St. Benedict and his monks are credited with preserving engineering practices from the Romans and Greeks through the Dark Ages; they likewise discovered new technologies and infused Western culture with a strong technical bent from which ultimately arose all that technological gadgetry so dear to us now.
Processes, naturally, lead to thoughts of project management, at which point we briefly pause to shudder. Yes, we need quickly to find a patron saint to help guide us through the perils of management, including one for those who become managers and one for those who work for managers. Since managers are leaders, we might first think of assigning some kingly saint to this role. However, some saint kings, such as St. Stephen of Hungary (975-1038), are so honored because they forced their people into accepting Christianity (the Magyars in the case of St. Stephen). Or there is the example of St. Louis of France (1226-1270). He led his armies on two failed Crusades, allowing his second Crusade to be diverted abruptly to Tunisia to rescue his brother where his army was decimated within a month and St. Louis himself died. Neither of these management styles is exactly an ideal model for our patron saint for project management.
Instead, we would like to find a saint whose demeanor might be more in harmony with modern humane managerial practices. Well, we do not have a saint for that, but we do have Blessed John XXIII (1881-1963), the modern pope known for his ecumenism, humor, openness and compassion for all people. He let the breath of fresh air of Vatican II into the church, allowing much needed modernization to take place in a stagnant bureaucratic enterprise. More importantly he was gentle and wise. One day when architects were showing him plans for refurbishing parts of the Vatican, he calmly and patiently listened as they explained their plans. When they finished, he said with a laugh, “We are not angels.” What he meant to point out without blaming anyone was that the plans had not included restrooms. Blessed John XXIII may or may not eventually be canonized, since success in that process is not guaranteed; but it would appear for now at least he would be the best candidate for the role of patron saint for project managers. We can pray that they might all be so wise!
The field we labor in has a robust theoretical base maintained these days by many with more academic inclinations. It is important not to overlook this group since they are one source of innovations that affect our profession, sometimes profoundly so. If we were to assign a patron to this group, it would seem obvious that we should choose a saintly educator. However, we will take a tangential view and nominate two Spanish mystics: St. Teresa of Avila (1515-1582) and St. John of the Cross (1541-1591). St. Teresa was a commonsense woman. She is especially known for her work Interior Castles, which is rich with maxims for those seeking a higher good. St. John of the Cross was a poet who is most famous for his work “The Dark Night of the Soul” and his treatise “The Ascent of Mount Carmel.” His works are filled with deep psychological insight. It is these works as well as their desire to educate others about the most abstruse notions that seem to suggest St. Teresa and St. John as the appropriate patron saints for those soaring to the heights and plumbing the depths of the theory of something as mystical and intangible as software and its engineering.
Software development begins with requirements, and we all realize how demanding gathering requirements can be. Given the overwhelming evidence of the impact requirements gathering on project success and given the realization that requirements are intrinsically inconstant, we need a saint to pray to for any assistance we can muster. Since requirements for software systems most frequently end up being stated in natural language, it would appear we need a saint blessed with the gift of eloquence. St. Bernard of Clairvaux (1091-1153) is one such saint. He was an adviser to popes, defender of the faith, consummate debater (his debate with Abelard is legendary), healer of a schism, monastic reformer, and intrepid preacher whose eloquence launched the Second Crusade.
However, for all his accomplishments, there are unsavory aspects to St. Bernard’s career and perhaps just a bit too much rigid dogmatism. So, we continue our search by considering two earlier saintly preachers: St. John Chrysostom (d. 407), whose last name means “golden-mouthed,” and St. Peter Chrysologus (406-450), whose last name means “golden words.” Both saints were known for their eloquence. But St. John’s life is filled with courtly intrigue and hints of scandal in his relationship with the rich widow Olympia. So, St. Peter is likely the better candidate especially when we consider that his sermons are characterized as being short and without great originality in thought, but full of moral application, sound in their doctrine and replete with historical insight. If anyone shall, St. Peter Chrysologus shall help requirements analysts.
Software and system requirements are meant to provide the base on which a sound system architecture can rest. Three saints are associated with architects: St. Barbara (died c. 235), St. Thomas the Apostle (died c. 72), and St. Bernward of Hildesheim (born c. 960-1022). Unfortunately, St. Barbara has been removed from the canon of saints for lack of historical authenticity. St. Thomas is associated with architects based on this story: a king in India gave Thomas a large sum of money to build a palace, for which he had produced plans. Instead Thomas spent the money on the poor, “thus building a palace in heaven.” However, this connection is only a colorful legend and that would not seem to be a proper basis for designating him patron saint for architects. So we will elect St. Bernward, a member of a noble Saxon family. Even though he is less well known, his existence is documented and he was indeed a practicing architect who created new works, refurbished old works, worked with gold and silver but did not eschew working with iron. Also, his rule as bishop of Hildesheim was marked with peace and progress. These are all practical qualities for any software system architect.
There are reasons in any software projects why consultants may be needed: staff may be in short supply, independent advice may be desired, or special expertise may be required. While consultants are brought into help, we must not overlook that there are times consultants themselves need help navigating the danger-filled waters of consultancy. Certainly, they too need a patron saint, and two contemporaneous humanist and advisors to the same king come to mind: St. John Fisher (1469-1535) and St. Thomas More (1478-1535). St. Thomas More is, of course, the better known. Nevertheless, both were asked to consult about and render opinions on the marriages of the Tutor King Henry VIII; and both held steadfast to their principles, even as they tried to find some way to bridge the conflicts between their religious beliefs and the king’s desires. Of course, in the end they both lost their heads; but, then, what consultant is not prepared, at least figuratively, for a similarly ignoble end? The prayer for consultants is likely very much like St. Thomas’ words on ascending the scaffold: “See me up safe, and for the coming down, let me shift for myself.”
To find a patron saint for designers, we must work a bit on faith. We wish to distinguish software design work from architecture even if we accept their close relationship in our profession. Since we know that St. Joseph, the husband of Mary the mother of Jesus, was a carpenter and that good carpenters are careful to design and plan first, it does not seem too great a leap for us to adopt St. Joseph as the patron saint for designers. In addition, we know that St. Joseph was a just man who faithfully did what he was asked to do by God. And he was quiet. The bible does not record one word that he uttered. Such is often the characteristic of the work of designers: it is faithful to the requirements, elegant and justly measured but, realizing it is not the ultimate end, it is quiet and unassuming.
When it comes to programming and the actual writing of code, Pope John Paul II elected to name for us the patron saint for computer programmers: St. Isidore of Seville (c. 560-636). This act was not ex cathedra, which means the pope is making no claims to infallibility. However, St. Isidore was a learned man and is credited with producing the first encyclopedia; thus John Paul’s selection is not without merit. With that said, programming is such a multi-faceted discipline that we may wish to indicate briefly here some specialist patron saints:
– Compilers, interpreters and translators: St. Jerome (347-419). St. Jerome’s impressive linguistic skills leading to his production of the translation of the Latin Vulgate edition of the bible supports this nomination.
– Database systems: St. Theodosius of Cappadocia (423-529). He is the patron saint of file makers. Although the reasons for this designation are obscure and even though it is very unclear what “file” means in this context, we will assign this holy hermit this task because he helped suppress heresies and thereby in some sense protected the integrity of the persistent data.
– Network systems: St. Peter the Apostle (died c. 64). He was the first pope and an apostle, but before that he was a fisherman. Hence, among other duties, he is the patron saint of net makers. So, by analogy we give him this additional role.
– Communication and interface systems: Gabriel the Archangel is the patron of messengers, even though he is not a literally a saint but rather an archangel. If we want an actual saint, then St. Bernadine of Siena (1380-1444) might do. He was a peacemaker and reconciler and is not that often exactly the central issue with which these branches of software engineering grapple?
– Real-time and embedded systems: St. Eligius (588-660). The choice here of St. Eligius is not motivated by his fame as television’s St. Elsewhere. Rather, he is the patron saint of clock and watchmakers, which is the primary reason to consider him for the role of patron saint of real-time and embedded systems given the constant concern in those disciplines with precise timing.
– Graphical user interfaces: St. Catherine of Bologna (1413-1463). St. Catherine was an artist, visionary, prophet and mystic. She is one of several patron saints of artists. Among other things, she was well known for the quality of her painted manuscript illuminations, which for that day and age was akin to the work of user interface developers. Hence we can render her as the patron saint for GUI developers.
– System crashes: Here we would like a patron saint to help protect us against the worst mishaps that may befall developers. St. Barbara was mentioned above. Even though her authenticity is in doubt, she is the patron saint who protects us from fires, lightening, explosions and bombs. These protective attributes would seem to make it worth our risking assigning her this role.
By no means is this list exhaustive; but it is sufficient for now. As with most development work, time presses on and we must forego continuing to play with the code base lest we get ourselves into deeper trouble.
Our coding artifacts, of course, must be tested to verify that each works properly. Testing software is a challenging discipline filled with many trials and thus requires the utmost courage from its practitioners. In the canon of saints, there are many martyrs who had their faith tested most severely. So it would appear reasonable for us to look to martyrs as candidates for patron saint of testers. Two saints and martyrs of special significance to France come readily to mind: St. Denis (died c. 258) and St. Joan of Arc (1412-1431). St. Denis (did anyone honestly think I was not going to work my namesake saint into this discussion?) was the first bishop of Paris. His success roused the anger of pagans, who had the Roman governor imprison, torture and behead him. Legend speaks of his having carried his severed head some distance after his execution. Hence, St. Denis is the patron saint to pray to against headaches, strife and frenzy-all conditions most testers would attest to being common hazards of their profession. St. Joan of Arc heard voices and fought valiantly to save France from the English. For her selfless efforts, she was rewarded with betrayal. She was sold to the enemy, who accused her, tried her and convicted her of heresy and who then burned her at the stake. Twenty-three years later she was posthumously acquitted in a second trial. It seems likely that most testers would have a strong sense of empathy for both St. Denis and St. Joan and that St. Denis and St. Joan would likewise empathize with the testy world of testers.
Quality assurance (QA) is often an aspect of software production that is given short shrift by developers or even worse excluded and forgotten. From that perspective, we can assign the QA team St. Patrick (c. 388-462), who is the patron saint of Ireland and excluded people, and St. Jeanne de Chantal (1572-1641), who is the patron saint of forgotten people. From the viewpoint of the work that QA members of the team perform, we can suggest a lesser-known saint. St. Guntramnus (d. 592). He is the patron saint of guardians. He was the King of Orleans and Burgundy who worked diligently to enforce laws strictly and justly, while forgiving those who tried to assassinate him. Since guardianship of quality and assessing adherence to process are roles of QA, St. Guntramnus may help assure them.
Configuration management (CM) is a fundamental practice software development teams must master. Scarcely no software developer has escaped the horrors of work lost due to faults in the process of CM. But even discounting disasters that seem to arise from acts of God, we all know well the great challenges associated with maintaining a workable CM process. For the part of CM that focuses on recoverability, St. Anthony of Padua (1195-1232) is an apropos intercessor since he is the patron saint of those looking for lost items. For the rest of CM, which focuses on maintaining well-managed archives, St. Catherine of Alexandria (died c. 310) seems a fair candidate. She is a patron saint of libraries and archivist, along with St. Lawrence (d. 258). St. Catherine was beheaded during the persecution of Maximus, and St. Lawrence was grilled to death on a gridiron during the persecution of Valerian. Relating these gruesome details is not meant to suggest that those who fail in their responsibilities with respect to CM will necessarily suffer similar fates. On the other hand, . . .
Software delivered without good documentation is problematic. So, we do not wish to overlook those who toil to provide well-written documentation both internal to the software and its design and external in the form of user manuals and training or administrative guides. Since documentation is often the last thing addressed in software projects, we will nominate as patron saint the reputed author of the Book of the Apocalypse, the final book of the bible: St. John the Apostle (died c. 101). This selection is appropriate for two reasons. First, it is unlikely John of Patmos is St. John the Apostle, which is consistent documentation where authorship is itself rarely well documented. Second, the Book of the Revelations has the startling image of the Four Horsemen of the Apocalypse: War, Famine, Pestilence and Death. Surely this is what we are unleashing if we fail to include the necessary documentation with our software.
We now arrive at the point where we deliver and deploy our software. Again, from experience we know that this is infrequently a carefree process; in fact, it is all too often very tension packed. Who better to turn to then at such times than St. Nicholas of Myrna (died c. 346) who we know as Santa Claus? Consider his reputation: After accepting everyone’s requirements, he has his shop of happy elves design, build and package quality goods as he with perfect aplomb makes his list and checks it twice. He then delivers at no cost to his clientele quietly and with great cheer on a very precise and tight schedule-as needed adapting delivery dates to and customizing delivery routes for different cultures-brightly wrapped packages whose contents when opened never fail to delight. (We will simply choose to ignore the part about the occasional lump of coal.) Could we possibly deliver a better-suited patron saint for deployment?
With the software now delivered, we find that the system must be maintained. Here is where we often find hidden the true saints of software engineering: the maintainers. It is these team members who labor in the deepest pits of hell, and they surely need a saint to turn to for intercession. A candidate for this role is St. Martha (died c. 80). In the gospels, she is the sister to St. Mary of Bethany and St. Lazarus. When Jesus was visiting Mary and Martha, Martha was the one who provided food and who was attending to the necessary household chores while Mary listened to Jesus. When Martha grumbled some about this arrangement, Jesus gently rebuked her saying that Mary had chosen a wiser course. The rebuke likely resonates with maintainers, and St. Martha would surely understand their plight and feelings of neglect.
Finally, we arrive at the very end of software development projects where we should allocate time to examine ourselves and see what we have learned. We need a saint to assist us in these retrospectives: one who can help us when we struggle to get permission to hold one and one who might help us as we work through one. St. Ignatius of Loyola (1491-1556) is just such a saint, since he is the patron saint of retreats. Retreats are times set aside for individual spiritual renewal and self-examination. Teams also require such times if they wish to foster an environment in which improvements can happen. Even though St. Ignatius is the founder of the Jesuits, a rather action-oriented and martial order, he was concerned that his followers never lose sight of the importance of their inner spirit. Certainly, he would want to help those of us caught in the whirl of endless deadlines to take time to reconnect to ourselves.
The topic of retrospectives brings us to end of our hagiographical journey through software engineering. Certainly, there are many other saints we could name since the field of software development is indeed eternally evolving. But taking a cue from retrospectives, we may ask ourselves what has this imaginative exercise really taught us: To pray for miracles? No, surely that cannot be the lesson. Rather, we need look at what prayer often is-asking for help. What listing patron saints can reveal to us is that our profession is filled with such complex challenges that no one person can expect to know and to master its entirety. Hence, it is no sign of weakness to need to ask for help now and then; and, yes, asking for divine help is possible. But maybe there is some other message we draw from this. Can’t we also learn simply to ask each other for help? One of the miracles of miracles is that they are all around us. The help we need is so often there if we but learn to stop, look, listen, ask and accept what sits right before us.
Which brings us back to Dante and what he saw at the gates of hell: All hope abandon ye who enter here. We software engineers complain frequently about our projects from hell. But is the message that Dante saw really a warning? Might it not be something else, such as reasonable advice? Is it not the foolishness of hope that gets us into so much trouble in our work? All hope abandon ye who enter here. If we choose, like Dante, to enter anyway without abandoning hope, then be prepared to descend through the circles of hell. Even with reason (Virgil) by our side to guide us through, we will not escape hell easily; and if we do escape, it will be as Dante wrote in one of the most bold and explicit images in Western literature. At the bottom of hell, at the nadir of the universe, embedded in ice is Satan. Dante and Virgil climb down the flank of Satan to his backside and out his ass.
Yes, abandon all foolish hope. But do not abandon all reason. More importantly, do not abandon your heart or your soul or your body. There is little profit for anyone in allowing mere software projects to inflict harm as great as that. Pray for your own continued well being as you work and the well being of those with whom you work. Such prayers are never a foolish waste of time, let us pray.
* Per me si va ne la città dolente,
per me si va ne l’etterno dolore,
per me si va tra la perduta gente.
Giustizia mosse il mio alto fattore:
fecemi la divina podestate,
la somma sapienza e ‘l primo amore.
Dinanzi a me non fuor cose create
se non etterne, e io etterno duro.
Lasciate ogne speranza, voi ch’intrate.