Introduction
The title sounds like a far-fetched ideal. (Just like the caption of this blog post generated from Microsoft’s Copilot, powered by DALL.E 3) For some, it is inconceivable to associate two words from seemingly different domains of life. Most times, people associate holiness to saints and people devoted to their religion. In our world today, and for some people, it is inconceivable, or at least impractical, to achieve the zenith of our career and still be devoted to our religion. For others, because we are at the zenith of our career and live in comfort, we see no need to embark on such a journey.
Misconceptions about Holiness
What thought crosses your mind when you hear that someone is holy? The person spends an inordinate amount of time in a religious institution? The person prays a lot? The person always talks about spiritual things and reads a lot of spiritual books? Or perhaps the person is frequently mentioned in religious circles. Some people go as far as to think that because these people spend so much time devoted to their religion, they possible cannot have a thriving career.
It is easy to think and postulate about matters we have little or no experience with and it is often easy to judge people by external appearances. But by careful consideration of the concept of holiness, one would realize that the topic is much more profound and vital to everyday living.
What is Holiness?
The oxford dictionary give us something that is not entirely helpful – “The state of being Holy”. With “Holy” meaning “dedicated or consecrated to God or a religious purpose; sacred”. In the simplest term, it is state of realizing that you are meant for something and you give your whole self for that purpose. One who recognizes that his life has meaning does well to find and fulfil that meaning to which he found. And like any other endeavor in life which requires skills, there are some skills that are required for you to faithfully achieve your life’s goal. I’m not talking about career skills this time, because our lives are much greater than our careers. I am talking about fundamental skills – virtues.
The Pursuit of Virtue can be applied to every aspect of our lives
I recently came across a book titled “The Art of Living” by Dr Edward Sri. It made me aware that basic virtues are needed in all aspects of our lives, even in our careers. After that, I attended some project management courses, and to my amazement, these same concepts (albeit talked about limitedly in different lexicon) were discussed as fundamental to managing teams, individuals and one’s self. I will try to explain how virtues are vital with a story.
I have so much experience in software development and people usually encourage me to write about what I know and I actually know that it will help others if I do so. With the virtue of prudence, I am able to evaluate the benefits of documenting my knowledge. This virtue also makes it possible to listen to my peers and take this advice. Also, looking back at my career, I have benefitted from the mentorship and guidance of so many great individuals, and used numerous resources (I cannot imagine my career without google and stackoverflow). The virtue of justice makes me understand that because I have received so much, I ought to give back the same way I received.
Knowing that I need to write to help others is not enough. This knowledge does not actually help anyone. I’ve known this, but because I lacked two other fundamental virtues, I have not been able to successfully and continuously document my experiences in a manner that will truly inspire and help others. With the virtue of fortitude, I would be able to persevere in my writings even when the topic I am writing on seems difficult; able to be patient and continue my blogs even when my kids distract me, or I am heartbroken, or grieving the death of a loved one; with fortitude, I can be free to dedicate my effort to writing great pieces that would inspire, inform and educate my readers and not settle for mediocre blog posts. With the virtue of temperance, I will be able to overcome distractions that get in the way of my completing this blog posts like food, amusement, sex and so on ( which of their own, are not bad). With this virtue, I will also avoid excusing myself from writing my blog post because I have another (still legitimate) responsibility.
When I am able to write blog posts easily, consistently, promptly and with joy, then I have attained a level of perfection what will ensure that my efforts truly make a difference to people’s lives. Note that this perfection does not concern itself with the work in its nature but to the manner at which the work is done. Attaining this level of perfection, through the study of these virtues and the practice of attaining these virtues, in every aspect of our lives including our careers is the basis of holiness.
The Virtuous Architect
There can never be a perfect software architect. But that shouldn’t stop us from studying and practicing to be. If we set our aim to the cosmos and fall short of it by landing on the sky, then we have done something exceptional. However, if we tell ourselves: “we cannot attain the cosmos” and settle for a “more realistic” goal as the sky, we might find ourselves falling smack on the ground. And like all life’s endeavors, the cardinal virtues – prudence, justice, temperance and fortitude – are the basic skills every software architect needs to design useful systems, collaborate with clients and stakeholders to own their vision and work with the team to make this vision a reality.
Prudent Architecture
Prudence generally means applying the right reason to things. Prudence helps the architect determine the right course of action based on the given context. This context can be gotten from the careful consideration of the data and metrics surrounding that endeavor – for example telemetry data for performance enhancement , business capability use cases and statistics for feature elucidation, or bug report data and tests for bug fixing. Experiences should also be sought from best practices. This can be in the form of external global standards, or internal company adopted standards. Standards not only ensure inter-operability, but encourage architects to rely and build upon the knowledge and wisdom of their predecessors and counterparts.
Listening and seeking advice from mentors and other professionals who have had similar experiences is also key to making the right decision. No matter how knowledgeable you think you are, you have a lot more to learn. This realization is a major catalyst for your growth, not only as a software architect, but as a person. Common ways to seek advice is to participate in software development communities like stackoverflow; searching for answers in search engines; talking to someone you know has more experience; or even talking to your peers. You might be surprised that by just talking, you find the solution to your problem.
A prudent architect carefully collects data – being mindful of, and guarding against, biases in data collection. It is so easy for us humans to be biased and not even know about it. Last year, when I wanted to get a car, I began to notice cars similar to the one I was about to purchase. Weird right?
Once we have carefully considered the options and data involved, we need to make a decision. We can be prudent architects and avoid making decisions based on impulse and feelings and take time to consider all information. But by delaying decisions or being indecisive, we end up undoing what we have done and causing harm. A prudent architect makes a decision in a timely manner after weighing the context surrounding it. And after making that decision, the architect sticks to it because he knows that the decision was carefully made considering the available context. This does not mean that the architect is obstinate or does not update his position based on new information or data. Because we are all imperfect beings, we should always be open to correction.
There are common reasons that make us indecisive. The most common one is anxiety. We are worried about the future and whether this solution will stand the test of time. To this I answer that no temporal thing in this world is worth being anxious about. What’s the worst that could happen? Critically think about it. Secondly, as architects, especially in agile development, we don’t expect to deliver the perfect solution in the first iteration. As long as we are honest with ourselves; listen to our stakeholders and our team; and keep track of improvements and feedback, we will surely get the job done.
Responsibilities of an Architect
The virtue of justice makes us aware of our responsibilities and what we owe others. We owe our client transparency and honesty. We need to be able to listen to and provide solutions to the concerns of stakeholders. We need to be accountable to our managers and ensure that we do everything in our power to execute quality deliverables in a timely manner. We owe our team mates guidance and leadership and we need to be a rock for our team in times of crisis and uncertainty. This virtue motivates us and drives us to be excellent individuals. We often feel disillusioned or discouraged because we have lost sight of the true reason we do things. The virtue of justice pins the true essence of our actions on our foreheads that we may not lose sight of the true reason for our endeavors.
Navigating through Troubled Waters
Now we have the developed the best architecture. We are able to answer all the questions our stakeholders throw at us. We present our architecture to the governance team and they applaud. Awesome! Then what next? What happens when it’s time to implement and we meet a few hiccups? We see that things don’t go according to plan and stakeholders become worried and start questioning our abilities. What happens when the realization that the implementation is taking longer than expected and we receive immense pressure from management? In my circle we call these “fires”.
It’s in these common situations that we need perseverance which is an aspect of fortitude. With perseverance, we can wade the muddy waters of difficulty calmly, think clearly and come up with solutions, under pressure, that will get you and your team to the finish line. With perseverance we can objectively work at the solution to a problem and seek to solving the root cause instead of taking the short cut or the easy way out.
Constancy is the third aspect of fortitude that enables us to continue working to solve a problem and not abandon it for a lesser or more trivial task. We have all faced that situation where we have a critical bug to fix or some part of the architecture to figure it out, and because it is too difficult at the time we tell ourselves “oh let me go and do PR reviews”.
Sometimes, the work is not difficult and the challenges we face are internal. We feel disappointed because we were just passed off for a promotion; we feel heart broken when a loved one leaves us; or grief when someone we love dies. We can also feel anxious about being a husband, wife or father and so on. A lot of factors, apart from the nature of the task itself, can contribute, and make the execution of our tasks difficult and the virtue of patience helps us carry these burdens effectively and achieve great things despite them.
And when I mention great things, I do mean them. This is because magnanimity, the fourth aspect of fortitude helps us aspire for greatness in everything we do. A magnanimous architect is not just content with implementing something that “works”, but designing a system that is truly beautiful, magnificent, scalable and efficient given the resources at his disposal.
Avoiding Distractions
Anything that will prevent us from achieving our task as software architects are distractions and should be avoided. It doesn’t matter if they are good or evil. The virtue of temperance helps us regulate our passions in order to focus on what is truly important.
One of such common passions as software architects is that of novelty – the desire to try new things and work with new tools. Seeking the latest technological advancements and the latest trends in the software development world. Seeking the best tool, within reason is the prudent approach as discussed, but seeking them for the sake of having them in our system, yields to unnecessary change and introduces unwanted behaviors in or system.
The Proud and Vain Architect
It is amazing what the vices of pride and vanity can do to a software architect. A proud architect believes that he is better than he actually is and above everyone else in his team. A humble architect knows what he truly is in relation to his team and stakeholders and strives for greatness given that knowledge. A vain architect does everything for his own glory. A humble architect seeks progress of the project, and the team and the satisfaction of stakeholders. Because a proud architect thinks himself better than others, he refuses to listen, spends a lot of time talking in team meetings and makes everything about himself. The proud architect does the team a great harm because he causes discord and strive in the team and goes through great length to impose his will on the team. More importantly the proud architect does himself a great harm by shutting himself from the team and depriving himself of the opportunity to grow and learn. Finally, because a vain architect seeks his own glory, he is afraid of making mistakes, he is always worried about his image and tries to make everyone happy instead of doing the right thing.
It is important to understand that a humble architect is not indecisive or timid or shy. In fact, because a software architect knows what he truly is – a human being with faults, a team member, an advisor to stakeholders – he knows that he can make mistakes and is not afraid to do so. He knows that he can say wrong things from time to time and so, he has confidence to talk because he is willing to accept corrections. He is not indecisive and anxious but full of great confidence because he knows that although he is a lowly human being, he places his trust in The One Who Knows.
Leave a comment