WHAT WRITING CODE HAS TAUGHT ME ABOUT DEALING WITH CHALLENGES
Reflections : A software engineer's tale.
Resilience.
That’s the word, my dear friend. Unlike most people who like to exalt one characteristic (or trait) over others, I don’t believe there is a single trait that assumes the title of the greatest to be possessed. In fact, I do not believe any trait is ‘greater’ than any. I say this because the context (situation) determines which trait is considered the most needful. In good times and seasons of prosperity, it’s commonsensical to say that prudence is a much-required trait so that when less prosperous seasons come, you have saved up resources enough to survive.
And when unpleasant seasons seem to have no end and the proverbial light at the end of the tunnel is simply not in sight, which trait is the most superior to have?
Such a philosophical question to ask; I do not intend to be a prophet of doom and gloom but believe me when I say this question is inevitable - because hard days and bad times come to all men. The inevitability of the question requires us to have an answer that is definitely practical, and less theoretical.
You see, the philosophy of utopianism gets thrown out the window with utmost alacrity when sapa is flexing its muscles and survival is just barely; when renewed hope is looking a lot like shege pro max and ‘better days are coming’ seems to be nothing more than a slogan.
So why ask “Which trait is most superior?” when it is obvious that to survive, we must draw on more than one thing. Of course, we must keep hope alive that there are better days which in turn keeps the heart steady, preventing a decline borne out of demoralization which is from the inside-out. And to hope, we ought to add strength, which I define as a firm resolve to not stay down.
And while such mental gymnastics is put in place, we must begin to comb for a way through, drawing on tact, skill and incredible courage to act on all of the ‘schemes’ and strategies we devise. Crucially, we must exercise faith believing in God’s mercy to come through for us, and for his strength to help our feebleness.
You see, we need all the help we can get and if we take all the help we do get, viola!
Meanwhile, you might ask where resilience comes in, seeing that this amazing piece started with the same word. Yes, resilience is another trait that proves inspirational and crucial in unsavoury moments. However, it was another kind of ‘resilience’ that inspired this write-up; a less commonly known kind or should I say a kind mostly known by tech bros.
In the past week, I have been building the backend for a financial service product. That means customers, accounts, payments, billings, savings, investment management and everything finance-related. Not an easy feat especially since I choose to use a microservice-based architecture.
Don’t worry, the theory behind microservice isn’t bogus. If you have been on your bank app and found that you were able to do a transfer to a friend but for some reason, purchasing airtime for yourself wasn’t working, you likely experienced the benefits of microservice architecture or you just had bad network. That a part of the app is unresponsive doesn’t mean the whole app is down. At the backend, we will try to get the bad one to start working properly, meanwhile, you can do other things on the app. Compare that to not being able to make a transfer just because the part handling billings is experiencing downtime.
Sweet, right? very sweet if you ask me, but a lot of sweat is exerted in ensuring that one bad apple doesn’t spoil the bunch. In the world of microservices, the sweat translates to implementing a collection of engineering principles referred to as “Resiliency patterns”.
A tattletale tells me that you my dear friend are beginning to find software engineering quite fascinating. However, I will save explaining these engineering concepts for subsequent articles.
So as I implemented these patterns, I began to see lessons for life. One such fact I found compelling was how more than one pattern is needed for robust resilience in my application. This is akin to exhibiting several traits and counting on help from more than one source when dealing with bad phases.
Another lesson I learnt is the importance of being proactive. The reasoning behind implementing these resiliency patterns is proactive. A software engineer can assume that there will be no service failure in any of the components of the application but that is tantamount to being delusional. Essentially, traits like prudence in times of prosperity, building valuable relationships, and humility can be likened to proactive traits that give us a kind of cushion against the negative effects of bad days. Speaking practically, the money that was previously saved in good times comes in very handy in less prosperous times; same way, the persons we have a relationship with are the ones we will be able to call upon.
So whether it is this resilience or the other resilience, I dare say bad days help us form character just like gold comes out refined after going through fire. I end this piece remembering the famous line by Paul, the Apostle - “After doing everything to stand, stand!”.
Shall we begin?