12 July 2018

Hafiz Adewuyi

And the man fell splat into the ground

Less than ten minutes into my run this night, close to the roundabout at the Ikoyi end of the Lekki-Ikoyi link bridge, I felt into a square-shaped manhole in the footpath. It's funny to think that as soon as I realized what had happened, my first feeling was embarrassment. A feeling which drove an instinctual reaction to try and pick me out of the hole as quickly as I could. Nobody should see me in this vulnerable state, I don't want any sorries. And indeed, no one stopped, leaving me feeling a few minutes later as I walked back to the car park like I could have used at least one 'sorry' from an empathetic stranger

Just a few seconds after the fall and I was out of the hole; back on my feet and on solid ground. I felt a dull ache in several parts of my body. I was hurt but not very badly hurt, that's the message my body sent to my brain. I couldn't help but think - as I walked away from the hole which had just half-swallowed me - that I was lucky, and that this fall could have been much worse, given the fact that I had no warning for what was coming until my left elbow and right knee hit the ground.

Bruised left lap

Wounded elbow
Falling is a truly humbling experience, sublime almost. For a fleeting moment, it takes away the illusion of control, and of importance that we humans love to cling so tightly to. "Your fate and existence are to a large extent, subject to time and chance", the universe seems to be trying to remind us when an accident like falling befalls us.

I've had three big falls this year and several other non-notable ones. Yes, I remember, because the injuries that came with each big fall all took time to heal. And beyond that, they left their scars.

The first one was totally pointless, to be honest. I was at a house party somewhere in VI. I decided I needed to get something from my car - can't recall what it was. So, I stepped out of the party for a few minutes to get it. And at that moment, I remembered what an honourable member of the Lagos fit-fam I am. Hence, I decided instead of walking to my car which wasn't even that far away from the party house, to jog instead. One two three four, I'm sure I had not taken the tenth forward leap before one of my feet hit a speed-bump, which sent all 6-feet of me crashing down and hard into the tarmac.

Two young men were just a few yards ahead of me, walking towards me. And just like tonight, all I wanted to do was to appear to them like what they just saw was nothing at all. That it was just a casual fall, and that I was not hurt. But the pain in both my knees sent me limping to one side of the road. I took a sit on the sidewalk, nursing the pains with a grimace until my brain got the memo that I was now aware of which parts of my body would need special attention for the next few weeks. On the bright side, this fall gave me my one and only ripped blue jeans.

The second time I fell this year was when I was in Sierra Leone, at the Aberdeen beach, in April. My host, John, had taken me to the beach on a sunny Sunday afternoon - my third day in the coastal Freetown city. I was enjoying the waves wash over my feet and striking different sexy poses for the photo-shoot which John was kind enough to grant me. And then it happened.

The algae covering the rocks on which I stood in the water gave way. And you know how it goes from here. Fresh red blood flowed freely out of several areas in my hindlimbs. John expressed how he felt bad about having taken this here JJC boy out of his drab hotel room in the first place. But I told him, that I couldn't be more grateful that he had gone out of his way to help make my experience in the city better than it would have been without him. And that this was all part of the experience and falling at Aberdeen beach would always be a dear memory for me. Indeed, I meant every word of what I told John from the bottom of my heart.

The face of a fallen man

Now I want to do something about the open manholes on that path. Just a few weeks ago, there used to be a car tyre in the hole I fell into this night. This was a hole I knew very well and this fact makes me feel rather silly that I still fell into it. My spidey senses should have at least tingled knowing that I was nearing this treacherous spot which has been on my path dozens of time before tonight.

Perhaps, if the tyre was still in the hole, the fall would not have been as serious as it was. I'll explore my options for trying to see to it that my fate does not befall anyone else using that same footpath anytime soon.

See you at the next fall.
Read More

25 June 2018

Hafiz Adewuyi

One week without a car in Lagos

Is like a year without rain - channelling "A year without rain - Selena Gomez"


My car has been at the panel beater's workshop for the past 6 days. It's due to be back with me on Tuesday (two days to go). That said, I thought I'd talk about my experience in the past week where I've been forced to go through life in a state that's comparable to missing a limb.

Uber splurge

As soon as I got home from the panel beater's workshop on Monday evening, I transferred 15000 Naira from my annual car maintenance budget to my current account. Narration: "Uber allowance". Without that, my lean-cut monthly budget could not have survived the blow from me taking an Uber to-and-fro work every day for a week.

Fortunately, Uber has been giving me 50% discount on up to 5-rides per week for the past two months (or longer). And this week was no exception. I had already used one of the 5 discounts on the journey back home from the workshop on Monday. The remain 4-trip discount definitely was not going to get me very far, what with two rides a day for a 5-day week (if you don't know maths like my friend, Ifeanyi, that's 2 *5 = 10). So I decided to address this limitation.

Before midweek, I had gotten my sister and a colleague (Lanre) to apply the same LAG-GOAL 50% discount to their own Uber accounts. It turns out I got to benefit from their each of their discounts only once though. The logistics of synchronizing information when someone else requests an Uber on your behalf can be quite tedious. Yes, I can be quite a pain in the ass but I also have my limits.

On the Uber experience itself, I'd rate it positively. Both my house and workplace areas are Uber hot-zones, so in most cases, my Uber arrived within 5 and 10 short minutes of me requesting the trip, despite my take-off times being really early and late respectively. Also, most of my drivers got a 5-star rating from me. The only annoyance was that for a few rides, the route I was charged for was literally impossible (except cars now swim through water); some bug with the GPS-tracking system on the app I guess. And I think this bug made my fare higher than it would have been otherwise, even though not inordinately so.

Ubering through the five-cowries creek

RIP fitness

For at least four weeks preceding this just past one, I've been going to the gym at least twice a week. Also, I'm trying to improve on my running endurance, so I've upped the frequency of my runs by at least, 100% in the past three weeks. But last week, my streak on all of that good stride was lost as it is simply harder to do all of this stuff without the mobile wardrobe and changing room that a car is.

My car will be back in two days and I trust that I can pick things up from right where I left them two weeks ago without much fuss; so help me God.

Ridesharing idea remembered

And because of the pain of having to spend more on transportation than I usually do, one ridesharing software idea that first popped into my mind in 2016 made its way back. I think I just might make good on it this time; come up with an MVP or something. If I don't end up getting crippled by overthinking, that is.
Read More

24 June 2018

Hafiz Adewuyi

When you're not allowed to spend your e-money

This morning, after my 5km+ run, I decided to stop by the Tastee Fried Chicken (TFC) outlet within a walking distance of my house to get some nice chops. After all that hard work, I felt well-deserving of some self-pampering. All sweaty and pumped up, I stepped into the restaurant and within five minutes of being there, I had made my order and it was time to pay (2000 Naira; I thought it noteworthy that my order added up to a round figure).

I brought out my Access Bank Verve card and handed it to the lady who had treated my order. She inserted it into the POS, normal savings/current drama ensued, and then she asked me to enter my PIN. Cut to the chase, the transaction failed. And then it failed again. And then again. From the error on the POS screen, I knew it was likely to be a problem from the bank's system.

The sales attendant and her supervisor were quick to ask me to go get cash from the closest ATM. The TFC branch is in an Oando filling station which also has an Ecobank ATM lobby within its premises. I tried to explain to them that the problem was with the bank, so it was unlikely that I'd be able to get cash from the ATM with that same card. Maybe I didn't try hard enough to explain (I tried though), but they didn't understand why I thought it was going to be futile to try to withdraw cash with a card which wasn't working on the POS.

Because I didn't have much to lose and didn't really have a lot in alternatives, I decided to try the card at the ATM anyways. An "Issuer or Switch Inoperative" error message confirmed my intuition on the problem's root cause. I use my card to pay for over 80% of things I buy and I can't remember the last time it failed me. As a result, I've grown so confident in e-transactions that you'd be lucky to find me with cash of more than 1000 Naira at a time.

I felt hopeless, considering that the fastest way for me to get cash now was from my bag which was all the way at home. But because I believe in finding hidden options through enquiry, I decided to get back into TFC and ask if I could transfer the payment to an account. "We don't do transfer here", the bored-looking lady attendant responded, shattering my fragile heart into 1000 pieces.

I decided this wasn't worth the fight any longer. Perhaps, the powers that be wanted me to fast this morning or just eat Golden-Morn. However, as I stepped out of the TFC, I remembered there was another thing called "Cardless withdrawal". Yay!

But just as I was starting to celebrate my newly-found solution, my last experience trying to use Quickteller cardless withdrawal on an EcoBank ATM started to restore into my conscious mind. The machine did not support Quickteller! I forged ahead, praying that things would be different for these here Ecobank machines. Alas, they weren't. What a shame!

I started on my way home and just as I stepped into my estate gate, I decided I was going to do the trouble of walking back to TFC; this time, cash-in-hand. I had fantasized so much about munching on that crunchy chicken that it was like torture to not actually get to do it. I brisk-walked the rest of the street between the gate and my house, then rushed in and out after picking an exact 2000 Naira out of the mint 5000 Naira I had collected from the Suntrust ATM (always dispenses mint) around my office on Saturday (yesterday).

Not caring to lock the door to my apartment, I rushed back out and jogged through the distance between my house and TFC. The jogging was to pacify my ego for my absolute lack of respect for myself; crawling back on my knees to TFC after all the trouble that their lack of flexibility/innovation had put me through on this random Sunday morning. After all, if I could cut the time I spent sucking up to TFC in two, that meant we could get over it more quickly and forget all about it while orally dissecting the crunchy chicken that started it all.

As I walked back to my apartment one more time (with food in hand of course), I pondered on how much money TFC might be throwing away on a daily basis due to their extremely limited payment options (cash or POS). Just yesterday, for the first time ever, I had used mVisa QR app to pay for my brunch at The Place restaurant, VI (there was a 500 Naira discount on my meal). It was so freaking seamless and I was so impressed that I see myself actively using it henceforth.

For the rest of the journey back home, some thoughts that I found coursing through my mind are:

  • Why hasn't mVisa even gotten to these razz TFC guys?
  • Couldn't that bored-looking lady attendant have been more inventive at her job just to please a customer? Perhaps, have me transfer the payment to her personal account (I was ready to give a small tip, in addition to bearing a 72.5 Naira transfer cost).
  • Then I remembered Seth Godin (in his book, Linchpin) talking about how organizations increasingly need people who can do more than just do their job
  • Then I started to think about how I myself could be that kind of employee to my own employer, Access Bank whose failing system put me in all of this mess in the first place

GIVE ME SOME ACCOLADES by commenting. It would mean a lot to me to read your thoughts and feelings from reading this.
Read More

22 April 2018

Hafiz Adewuyi

Fidelity *770# Cardless withdrawal powered by Quickteller Paycode to my rescue at MM Intl. Airport Lagos

Two Fridays ago, I got to truly appreciate the fact that Nigeria (Lagos to be specific) is at a stage where there's is a proliferation of fintech solutions. In the past, I've been of the bias that why does one need so many methods/alternatives to perform the same basic banking transactions like funds transfers, bill payments, buying airtime, cash withdrawals and depositing cash. And more so why every other day, a new service or start-up pops up on my radar, claiming to offer these same services in a better way. At this point, I humbly dump all of that bias in the trash, thanks to my experience that fateful morning.

I was in the MM Lagos international airport departures lobby. My flight to Freetown Sierra Leone was going to take off in a little over two hours. After I had checked in and received my boarding pass, I needed to pay for my instant yellow fever vaccination card. Apart from that, I also needed to buy some dollars to be recovered as Leones at my final destination, since I didn't have any internationally viable (MasterCard/Visa) ATM card on me.

At this point, I remembered that all the cash I had on me was exactly 250 Naira only. No worries, I thought, before proceeding to the only ATM on the departures floor of the airport (First Bank). I swear, this thing was slow as fuck. It took like 5 minutes for one to get a single bundle of cash out of the machine. "I still have time anyway", I thought to myself, not in the least bit flustered by the situation at hand.

After what might have been 30 minutes, it was finally my turn to use the machine. At long last, I thought to myself, ignorant of what goodies mama fate had in stock for me. I put my card into the machine and after 30 seconds of absolute stillness, I thought I heard that very familiar sound that the machine is having issues reading your card. I quickly shrugged off the thought. After all, I had used the Verve card at a supermarket POS terminal successfully just last night.

Alas, it so turned out that two minutes after card insertion, my fears were proved valid. The ATM spat out my cardless with a very user-friendly message of "No Card App found" (if my memory serves me correctly). Ugh! Much to the chagrin of the queue of 6 persons which had now formed behind me, I remained in front of the laggardly machine for another consecutive turn. "No, machine. I'm not gonna give up on you that easily, not today", I thought to myself to justify my borderline selfish decision to take two turns at once. One more time, the machine rejected my card, probably with the same message (of which I can't be sure now since, at this point, I had started to worry).

Free stock photo from https://www.pexels.com/photo/adventure-beach-lost-man-6804/
To avoid getting mobbed, I decided to step aside for the guy behind me to use the machine, deciding to have another go when he was done. As soon I was aside from the ATM, I remembered the Cardless Withdrawal feature on Fidelity Bank *770# which has rescued me several times (click through to see the meaning of this oft misappropriated word. You might be shocked like I was a few months ago).

On the same spot, I swiftly logged on to my Fidelity Bank mobile app to do a self-transfer from my savings to my current account which is my default USSD account with the bank. Once done, I proceed to generate a cash withdrawal code of 20000 Naira by dialling the Fidelity USSD short-code for that feature: *770*8*20000#

Within a minute, and of course, before the guy behind me had even completed his transaction, I had received my Paycode, both on the Fidelity USSD display and also as an SMS message. Man, was I excited? For some reason, knowing intimately how these systems can be sometimes, I was afraid that I might not be able to generate a code due to a temporary glitch. Of which that one would probably have been what we colloquially call "ONE CHANCE" or "O-Y-O" around here.

Once the guy was done with the ATM, I proceeded to try and redeem my Paycode from the same First Bank ATM. Alas, this time, the problem was that the Quickteller Paycode button on the machine was not working. mschew. Thankfully, I'd overheard someone saying there were a lot more ATMs in the arrivals lobby, just one floor below the departures hall. Before going there, I confirmed this from one of the cleaners working in the hall.

Arriving at the arrivals terminal, I was borderline angry with myself for having wasted over half an hour on the sluggish First Bank ATM queue. At the very least, there were ATMs from UBA, EcoBank, Zenith Bank, GTBank in this hall. And none of them seemed to be particularly busy. Hurray!

I walked straight to the GTBank machine (because GTBank; actually no because it was totally vacant; actually yes, as it was neither the only free machine nor even the closest to my entry point. But honestly, you have to give it to GTBank's ATM application design and features).

And yes friend, in a fleeting minute, this here young man's hour-long challenge with withdrawing cash at the airport lobby was completely out of the way. I spent about 10 seconds after my card-free ATM cash hit my hand, waiting for the machine to produce my card. Until I realized my silliness, much to the acknowledgement of a bystander who told me politely when our eyes met that he had wondered, "is this one mad"?

So yes fintech and banks, let the proliferation of systems doing more or less the same thing continue in earnest. Everyone else might mess up and just right then, your system might save a life. Thank you!
Read More

26 February 2018

Hafiz Adewuyi

An accidental lesson from the center of the ocean

"When things get rough, it means you're closer to the finish line than ever before"

Last Sunday afternoon, a moment after wrestling with the awe-inspiring waves of the ocean, about 10 metres off-coast at the Eleko beach in Lagos, I got an insight.

This is how a foray into the waves of the Eleko beach typically goes. A few steps past the chicken-hearted majority who flee back in fear, the moment the water seems like it might cover their feet, you're met with quite a bit of turbulence. At this point, the waves are not that high, but they have a force that threatens to uproot and slam you into the loose sands beneath. "Begone, for you, do not belong in here, mortal", the sea god seems to intend to say to the lowly intruding mortal that you are.

The deeper in you go, the stronger and higher these waves become. I tell you, without strategy and intent, you cannot venture beyond a couple of metres into the raging waters of Eleko beach. My strategy to go deeper, as I can't swim and even if I could, probably couldn't swim against such force, usually consists of a couple of actions:

  • Monitor the waves keenly, making sure to spot the next wave at least, a few seconds before it hits
  • When you see a strong wave coming, fall back into it or assume the position of a sideways forward lunge to reduce the degree to which the water pushes you back onto the coast
  • If the waves are high or almost high enough to submerge you, crouch into the waves, ensuring that you're completely submerged (you'd probably want to hold your nose to prevent water from rushing into them). The impact on you is less strong under the waves versus when you allow the head of the wave hit you directly
You essentially repeat the steps above, wave after wave until you reach your destination. What is the destination of a journey into the ocean, you might want to ask? Well, the interesting fact that I discovered purely by experimentation is that after about 6 metres into the beach, the waves become very gentle. Instead of pushing you back towards the shoreline, they give you the chance to play with them.

The waves don't entirely lose their momentum, no. But at this point, its force is low enough to allow you rise and sink with the waves. You're now at the very point where the waves just start to build the momentum with which they'll banish the struggling mortals behind you. And this my dear friend, is where you want to be. For before this point, there is no chance of basking in the ocean for you. Before this point, it's an endless struggle to remain on your feet as you fight wave after wave.

Distract yourself from the waves for a second, and look back at the coast. And you would wonder where the gentle wave which just passed you by got such power from. You're now behind the waves. You made it.

If it floats your boat, now is the time for you to pretend to be Poseidon in human form. Lift your hands as you command the waves to keep the lowly mortals out of your divine and pure sanctuary. Come get me if you can, you bellow out without moving your lips, knowing how little a chance any of them stands to make good on that challenge.
Read More

12 January 2018

Hafiz Adewuyi

How I found my first new job in Lagos

Or how I moved from my first job to another company in Lagos.

I write this article in the hope of inspiring someone to start seeing themselves, not as a victim but as the orchestrator of their career. I've spoken to too many people who feel frustrated with their job and like they're at the mercy of their current employer. While I acknowledge that my current job situation is far from being the standard for success, I must mention that I can't remember the last time I felt that way. 

I've benefitted immensely from knowing that irrespective of my current situation, the power to steer my career in a positive direction lies mostly with me. It's my sole responsibility to keep my head high enough above water to make the best out of the situation.

That said, I encourage you to share it with your friends who you think might be able to benefit from the shift in perspective that I hope this piece will help bring about.


If I were to summarize this article into a 140-character tweet, it would be to

"Pick one important pain your current employer's business faces and own it!" 

For me, the important business pain at my first job was a particularly unstable software product. So grave was the instability of this software product that many of the clients using it were sending unpleasant emails daily and threating to dump it every chance they got.

I would say I got lucky with the part of seeking out an important business pain. In my case, the important business pain sought me out. Not because I was the best for the job but because I was the most available. This immensely buggy and dirty codebase was literally dumped in my laps. So, for me, it was either own it or go home. You love your family and you've decided you want to spend more time with them, my CEO would sometimes joke when talking about something that could get one fired at the company.

For the first few months of my inheriting this software solution, my life was hell. I barely had a grasp of what the solution was meant to do and knew absolutely nothing about how it works. Yet, I was the first and last port of call for clients when they had any issues. The clients being the 8 different huge organizations who had licensed the software.

Yes, during that period, I achieved some progress, however marginal it might have been. For most issues that were brought to my desk, I had to defer to a more experienced colleague, having them do most of the heavy lifting to fix it. Then I would finish up by merely delivering the work to the client.

At this point, I had yet to take ownership of this problem and it was clear for everyone to see. Service delivery was poor because I often had to wait for someone else to leave their main responsibility for significant amounts of time before I could complete any task.


I remember vividly like it was yesterday, the particular issue that marked the turning point in my experience at that first job. The software solution in question is a payment gateway system. Nigerian banks were my company's clients and the end users of the solution were the bank's business-owning customers who wanted to accept payments on their website (and the customers using their website).

This particular Friday, one of the last emails that came in from a bank was about one of their valuable clients whose developer was finding it hard to connect his website with the payment gateway. Prior to this time, my default response when posed with this problem was to refer the customer to the payment gateway integration document. At best, I'd send them some supporting sample code which I had inherited from a predecessor.

But this time, something was different. I can't remember what it was but there must have been some peculiarities which prompted me to approach the case with some novelty. For the first time ever, I zeroed my mind on seeing this bank's customer through their integration; till their website was accepting real payments from customers.

The following weekend, with no one putting pressure on me as usual, I digested the payment gateway integration guide for the first time since I'd inherited it months back. I read it from start to end, making sure to truly understand the purpose of every instruction in the document. Once I was done with that, I decided to practicalize what I'd just learned. This I did by creating a barebones HTML payment form and integrating it with the payment gateway.

Once I was done that same weekend, I sent the code for the HTML integration I had done to the troubled merchant's developer. This, my friend, turned out to be all the help which he needed to complete his own integration. Furthermore, the end product of that weekend's grinding (the HTML code) became a silver bullet for much of the rest of my career at the company. I would go on to share it countless times after with other people who were seeking to work with the payment gateway.


A  couple of months after resolving that revolutionary issue, I had gone from being scared of what turmoil the next email might throw my life into to having dull days when there were too few emails from my clients. The software solution was now for the most part, stable and delivering its promised value to my company's clients with only occasional hitches.

My role evolved from me weathering storms day-in, day-out to being confident enough to reach out to clients, inquiring about how I could make the software more useful for them. From that to me having enough time and will to pay back some technical debt which the solution had incurred in its worse days. In essence, the fulfilment and gratitude I received from investing myself in that first customer's success got me addicted to focusing on my employer's customers' delight.

After a little over two years at my first employer, I got an offer from two different companies at the same time. Each of these offers came by way of my company's partners whom I had encountered through my work. Without a doubt, these people were convinced they needed some of my problem-solving aptitudes in their organization. Right now, I think back to one particular person I worked with who proudly describes me to people as resourceful.

Prior to my receiving these offers, I had interviewed with about 10 other companies at different times, all with a unanimous response of NO. In light of that, I had all but given up on my potential for success as a career programmer when they came in. So much so that I had resigned from my first job and was preparing to pivot when I got these offers. Offers which I effectively already had even before the first interview.
Read More

10 December 2017

Hafiz Adewuyi

How to use your GTBank Naira Mastercard on PayPal - Nigeria

Why can't I use my GTB Naira Mastercard card on PayPal anymore?

Have you asked yourself that question recently? Or the slightly different variant of "Why can't I use my GTBank Naira Mastercard on Paypal"? One other popular variant I imagine would be: "Why did GTBank block Nigerians from using their Naira Debit Mastercard on Paypal".

If you're looking for the answer to any of those questions, then be merry. Cos' today is the day that you find the solution to that problem. A surprisingly very simple solution, if I may say.

GTBank Naira Mastercard + PayPal
GTBank Naira Mastercard + PayPal

If you don't care for the full explanation of this problem, feel free to skip to the final section (How to unblock your GTBank Naira Mastercard on Paypal). The next 3 sections only serve to explain the problem so you can get the full story behind this undesirable restriction on your GTBank Naira Mastercard.

Why does my GTBank Naira Mastercard not work on Paypal (anymore)?

Before mid-2016 or so, my GTBank Naira Mastercard used to work seamlessly with PayPal. I added the card to PayPal and I sure used it a few times successfully before that time.

A few months ago, I 'bought' my first ever Linux virtual machine from Digital Ocean. At the point of payment, I tried to add my Fidelity Dollar debit Mastercard directly, but it failed with the error: "Digital Ocean does not currently accept debit cards".

Fortunately, Digital Ocean accepts Paypal. So, I just went ahead to add that Fidelity Dollar debit card to PayPal, and then use PayPal to pay Digital Ocean from the same card. At the time, I had about $10 in the domiciliary account linked to the debit card.

My payment went through seamlessly. And things were good until I ran out of dollars in my Fidelity Bank domiciliary account. Since I was not ready to buy dollars to fund the account, I had no choice but to try to use my GTBank Naira Mastercard (through PayPal) for the next Digital Ocean subscription.

Unfortunately, my payment failed. I remembered that the last time before that when I tried to use the GTBank Naira Mastercard via PayPal, my transaction also failed. I had assumed it was due to a network error. But now, when it failed multiple times back-to-back, I knew it had to be something more than that.

This was when I recalled reading from a thread on TechCabal's Radar about GTBank having blocked the use of their Naira Mastercard through PayPal. Hmm. I did a bit of Googling and decided that was likely to be the problem here.

However, since I had to keep paying for my Digital Ocean account, I had no option but to find a way to pay (and Paypal seemed like my only option). One option was to find out which Nigerian bank allows their Naira denominated debit cards to be used on PayPal. Needless to say, that's was likely to be a long thing, since I would at least, first have to request a new card. And at the worst, I might have had to open a new bank account. The fact that international transactions are completely blocked off on most Nigerian banks' cards (read Nigeria's FX crisis) is another headache on its own.

I decided to do a little more research before giving up on GTBank Naira Mastercard since that was easier than the above option. And fortunately, I found a solution in less than 30 minutes of googling. The reason my transactions were failing was simple. GTBank placed a DCC (Direct Currency Conversion) restriction on their Naira denominated cards.

What is DCC (Direct Currency Conversion)?

Essentially, PayPal was automatically converting my dollar transaction to Naira using CBN's official rate (because my card was a Naira denominated card). My transaction was a $5 transaction. When you multiply that by the CBN rate at the time (say 320:$1), my GTBank account would be charged for 1600 Naira.

The thing about doing international transactions with your Naira card is that, even if your card is charged in Naira, your bank has to find dollars to pay back the international merchant (settlement). So, if my $5 transaction had been successful, GTBank would have had to find a source of dollars cheaper than or equal to 320:$1 (CBN rate) to be able to settle the merchant for that transaction. If not, my transaction would have caused them a financial loss. GTBank's rate for customers at the time was about 380:$1. Which means that the bank would have lost a fraction of 300 Naira on this transaction, depending on their FX sourcing rate.

Now, you can think that such a minute loss is not too much for a bank like GTBank to bear for their customers. After all, they can probably get dollars at a rate close to the CBN official rate due to their might. However, when you multiply the marginal loss on a transaction by the several thousand (if not millions) Nigerians who use a GTBank Naira Mastercard for international shopping, it's not hard to imagine how the bank can end up neck deep in losses amounting to billions of Naira in a matter of days.

Hence, to curtail potential bankruptcy, GTBank blocked DCC transactions on their Naira Mastercard for all customers (which probably includes you). This means that when the bank's card processing system receives a transaction originating from an international location (not Nigeria) but bearing a charge in Naira, they instruct the system to automatically decline it by means of a system configuration.

I hope that you can agree with me at this point that the bank is justified in making this decision. After all, GTBank is very far from being a not-for-profit organization.

How can I use my GTBank Naira Mastercard on PayPal?

The solution to this problem is very simple. You simply need to get on GTBank's side of this FX economics to solve the problem. If GTBank's system receives your charge in dollars and not Naira for a transaction originating from the US, then it can use a rate decided by GTBank to convert the transaction to Naira before passing the charge to your account.

In this way, GTBank can ensure that they apply a rate to your transaction that is sufficiently higher than their dollar-sourcing rate to make them a good profit margin off of it after settling the merchant.

Hence, the solution is for you to instruct PayPal to not convert your transaction to Naira and instead, send the original transaction currency (e.g. dollars) like that to your bank. The process is very simple, but the interface to do it is inexplicably well-hidden away in their menu system. In fact, I noticed that the web page to make this setting change has the old PayPal look-and-feel. Not surprisingly, there's currently no way to navigate to this page on the modern PayPal UI menu.

The three-step process to remove the restriction on using your GTBank Naira Mastercard on PayPal comes next.

How to unblock your GTBank Naira Mastercard on Paypal

1. Visit the PayPal card setting management page on your internet browser by clicking here (you might have to log on to your PayPal account if you're not already logged in). To ensure that this is not a phishing attempt on your PayPal account, please verify that the certificate on the loaded page belongs to PayPal.

PayPal secure Certificate
PayPal secure Certificate

PayPal card currency conversion settings page
PayPal card currency conversion settings page

2. Click the Conversion Options link beside your GTBank Naira Mastercard in the list of cards

Ask Paypal to use Mastercard/VISA's currency conversion process, not theirs. This is what your bank wants
Ask Paypal to use Mastercard/VISA's currency conversion process, not theirs. This is what your bank wants

3. Most likely, the first option is selected on your GTBank card. The first option enables PayPal's currency conversion process which is what causes the whole DCC problem. Just select the second option (Bill me in the currency listed on the seller's (merchant's) invoice) and submit the form.

That's it! Just ensure your GTBank Naira Mastercard is well funded enough, then retry your PayPal transaction. It will be successful.  At least, so it was in my case. I followed this same process and not up to 5 minutes after, I was able to make a successful payment to the same Digital Ocean where my transaction had previously failed multiple times. 

I think it would go a long way if GTBank would send a simple SMS or link to a customer to recommend possible solutions when their transaction fails because of a direct currency conversion.
Read More

15 October 2017

Hafiz Adewuyi

I learned French in four months using Duolingo

Mid-June 2017, just a few days before leaving Lagos for Enugu, I installed the Duolingo mobile app on my Android phone. Almost every day from that time till date, I have spent 20 minutes or more working through the lessons on the app. There are tons of languages you can learn on the app. I started with French being that it was the easiest for me to pick up (previous exposure).

Last Sunday (October 8, 2017), I got to the end of the French course. I remember feeling like, "Is this it. I thought there'd be a worldwide drumroll in my honour"? Meh!

My plaque for completing French on Duolingo
Duolingo names Hafiz French master

How did I make it to the end?

The Duolingo mobile app and platform is an incredibly well-designed product which has tons of features which make it quite easy to complete some lessons every day. Here are some of them:

Duolingo daily streak
Duolingo daily streak
  • A daily streak. When you first install Duolingo, you tell Duolingo how much time you want to spend learning language(s) in a day. Using that data, they set a daily goal for you in the form of XP (experience points) you must gain each day to maintain your streak. Your streak will increase by one for each day you achieve your goal. Also, you will lose your entire streak if you fail to achieve your goal for even one day, irrespective of what the previous value was.

    So, the more you do, the more you want to do because no normal person wants to see a 20-day streak become zero, due to one day of laziness. For days when you absolutely can't put in the time to reach your goal, the app has this "Streak Freeze" feature which allows you buy your way around it. You can buy a streak-freeze at 10 Lingots per day and this, as the name implies, will help freeze your streak instead of having it fall back to zero.

    To help you estimate the value of a Lingot (Duolingo's local currency which is earned through achievements), I had about 250 Lingots at the end of the French course, and that's only because I've been extremely stingy with spending them on the in-app store.

    In the four months of learning French, I lost my streak two times. Luckily, that didn't dissuade me from getting back on track. Duolingo cunningly tried to have me give up cash (about 1000 Naira or $3) to reclaim my lost streak (which was around 43 the first time I lost it; painful). The offer was really tempting but not tempting enough for this here shrewd. Is a huge Duolingo streak going to increase my bank account balance or my salary?
  • Reminders in the form of emails and push notifications, telling you how far you've come and how you only need to do a little today to maintain your streak
Duolingo daily French reminder email
Duolingo daily French reminder email

  • Groups. Each Duolingo group holds a maximum of 15 learners of a particular language. Each group has a timeline which features the key learning achievements of each of its members. The timeline is visible only to members of a group and users can join only one group at a time per language.

    To simulate competition, each group has a leaderboard where the person with the highest number of XPs at the end of the week is proclaimed the winner. Several times, I had to cover more lessons than I really cared to, just so I could be crowned the French king of the week in my group.

    Also potentially motivating are the push notifications triggered by the mobile app whenever someone in your group pushes you lower on the leaderboard by getting more XPs than you have that week.
Someone just passed you notification in Duolingo
Someone just passed you notification in Duolingo

  • Double your lingots. Even though my Lingots are largely useless in real life, I imagine it could be a major bragging right if I'm able to accumulate them to a certain level. Duolingo has this feature where at the start of a week, 5 Lingots are deducted from your wallet. If you achieve a 7-day streak after the deduction day, you get 10 Lingots back at the end of the week. If you don't, you get nothing back, effectively losing 5 lingots.
Duolingo's Double or Nothing Lingot wager feature
Duolingo's Double or Nothing Lingot wager feature

Am I now a French expert?

Far from it. Yes, I can read everyday French phrases much more easily than I could when I started the course. However, it is still quite difficult for me to follow along with real-life French speech that is not intentionally slurred. I imagine I'd have to live in a French-speaking part of the world and write more than a few full-length articles in French to even be able to say I'm an intermediate speaker of French.

What's next?

As a typical human with an insatiable thirst for fulfilment, I moved on immediately to Spanish. I've found Spanish to be quite similar to French while still being sufficiently different as to be challenging. I've been consistent and in the one week since last Sunday, I've completed about ten lessons. So far, I've learned basic words in categories like Food, Animals, Verbs, Pronouns and Possessives.

How is the Spanish coming?

Learning Spanish is a lot more difficult for me than learning French was and I've put it down to the following reasons:
  • There was French in my academic curriculum both in primary and secondary school. A lot of things stuck to memory during that early exposure, so there wasn't as much learning going on for French as there now is in Spanish
  • An inordinate amount of English words have a French equivalent which is so similar in structure as to be approximately identical. This makes it easier to guess the meaning of new French words and also to hazard guess the French equivalent of many English words. It also makes it easy to remember the French-English mappings. For this reason, I was able to TEST OUT of several lessons which accelerated my rate of completing the course.

    Duolingo's TEST-OUT feature
    Duolingo's TEST-OUT feature
      A Duolingo lesson consists of one or more quizzes which you normally have to complete one after the other. Duolingo's TEST OUT feature allows you to save time by skipping the individual quizzes and just doing one quiz that combines concepts from all the quizzes in that lesson. Of course, you must be pretty proficient at the concepts being introduced across that lesson to be able to pass the TEST OUT quiz. There are no hints like in a normal quiz and you can fail a maximum of four questions before you're kicked out of the test.
    I've covered ten Spanish lessons in the past week and in that time, I've not been able to test out of even one of them. It's really painful to work through a lesson which has 3 to 7 quizzes with 17 questions per quiz when you can just do one super quiz with the same number of questions. But I stand no chance at passing the test out quizzes in Spanish (no adequate background).

    Random fun fact. For some reason I've not bothered to research, Spanish questions are prefixed with an upside down question mark, in addition to the regular question mark at the end of the question.

    Spanish: ¿Tu hablas espanol? 
    English: Do you speak Spanish?

    Why am I learning new languages?

    I really don't have any other reason than that it helps me feel accomplished. This is a necessary ingredient for good mental health.
    Read More

    7 October 2017

    Hafiz Adewuyi

    How to block/deactivate your ATM card in Nigeria without going to the bank

    UBA (United Bank for Africa)

    The block card feature is available on the UBA Internet Banking platform. To block your UBA ATM card via the internet banking platform, log-on to the platform and select Self service to request for your card to be blocked.

    Alternatively, you can block your UBA ATM card by sending an email to UBA (CFC@ubagroup.com). The email must contain your NUBAN account number and a message requesting that your card be blocked.

    GTBank (GTB, Guaranty Trust Bank)

    You can block your GTBank ATM card electronically through any of these means: via ATM terminals, Internet banking application, Mobile app, SMS banking and on the GTWorld app.

    To block your ATM card through GTBank SMS banking, simply send the syntax “HOTLIST NUBAN” to 08076665555 from your registered mobile number with the bank. Please, note that NUBAN should be replaced with the 10-digit account number linked to your card.

    Alternatively, you may contact GTConnect (GTBank's fully interactive self service contact centre) on: 0700GTConnect (0700482666328), 01-4480000, 08039003900 or 08029002900 to request for your ATM card to be deactivated. At the voice prompt, press 1 then zero (0) to have your call transferred to any of GTBank's customer service representatives.

    Finally, you may also log on to your internet banking profile and follow the steps below to deactivate the card:
    • Click on the Cards icon and then the Card hotlist link
    • Select Card Number and Request Reason
    • Input secret question answer, click Continue and input token generated code
    • Click Submit 
    A pop up screen confirming the deactivation of your ATM card will be displayed.

    Fidelity Bank

    You can block your Fidelity Bank card via Fidelity Instant (USSD) Banking. Just dial *770*911# on your registered phone and follow the prompts. When you dial the code, a list of all your active debit cards will be displayed to you and you can select which of your cards you would like to block. The process takes a very small amount of time and will not cost you a dime.

    Alternatively, you can block your Fidelity Bank ATM card by contacting the Fidelity Bank customer service center via email (trueserve@fidelitybank.ng, true.serve@fidelitybank.ng) or via any of its social media profiles.

    Zenith Bank

    To block your Zenith bank ATM card using the mobile app, please login to the Zenith bank mobile banking app and follow the steps below:
    • Click the menu bar and select Cards and Cheques
    • Under TYPE select Deactivate Card 
    • Enter the reason and click on continue.
    Should you need further assistance or clarification, please call 012787000, 014647000, 012927000 or 070ZENITHBANK.

    First Bank

    To block their First Bank ATM cards, customers are required to contact First Bank customer care via email (firstcontact@firstbanknigeria.com), phone call or by a visit to any First Bank branch.

    FCMB (First City Monument Bank)

    You can block your misplaced/stolen FCMB ATM card if you have been profiled on the FCMB telephone banking platform.

    To get profiled, you will be required to call the FCMB contact centre on 07003290000 and request to get profiled on the interactive voice response which enables you to generate a pin that will eventually help you block your card, make transfers among several other services.

    Stanbic IBTC Bank

    You can block your Stanbic IBTC bank ATM card without going to the branch, either via USSD or via SMS.

    To block your Stanbic IBTC ATM card via SMS, simply send “Blockcard NUBAN” to 30909 via your registered mobile number. Please, note that NUBAN should be replaced with the 10-digit account number linked to your card.

    To block your Stanbic IBTC ATM card via Stanbic USSD banking, please follow the steps below:
    • Dial *909#
    • Choose my bank
    • Choose service requests
    • Choose block card

    Union Bank

    You can block your Union bank ATM card via SMS. To do this, send "BLOCKCARD NUBAN" via SMS to 20123 using the phone number registered on your account.  Please, note that NUBAN should be replaced with the 10-digit account number linked to your card.

    Access Bank

    You can block your Access Bank ATM card through the updated Access Bank mobile banking app.

    Keystone Bank

    A self-debit card deactivation can be carried out via the Keystone Bank Internet Banking Platform. Keystone bank also ensures that debit card blocking requests are treated promptly when received via email (contactcentre@keystonebankng.com).

    Sterling Bank

    You can block your Sterling Bank ATM card either via Sterling Bank internet banking or by sending an email to Sterling Bank (customercare@sterlingbankng.com).

    Wema Bank

    Wema bank cards control is arguably the best in the Nigerian banking industry. You can deactivate your ATM card using either the Wema Mobile app or Wema Internet banking solution. Via either of those platforms (web/mobile), you can also activate your ATM card for any number of countries of your choice within a specific date range. Finally, Wema bank's flexible card control feature also allows customers deactivate/activate their ATM cards for use on different transaction channels e.g ATM, Web, POS.
    Read More

    24 September 2017

    Hafiz Adewuyi

    How I became a Software Developer in Nigeria

    I feel like most developer stories I come across are about people who have had a passion for computers since from an early age and were fortunate to get into programming in their childhood or teenagehood. My story was not quite like that, so I thought I'd add my voice to the pool and maybe encourage someone out there to reconsider their ineligibility for this career path. I think my story is very far from typical. Here we go.


    It's funny that even though I also got the opportunity to be exposed to computers before 10, you can say I was not curious enough of a kid to want to figure out what made this thing work. Instead, my curiosity led me in a direction that saw me doing other things like:

    • Playing PC games installed off of pirated CDs from computer village, e.g. Total Games 2000 (which had a massive set of tacky but fun 2D games) and Age of Mythology
    • Chatting with random people on Yahoo messenger and other online social websites that pre-date Facebook
    • Trying to understand myself and feelings and address my social anxiety by drowning in a sea of self-help articles

    What the heck is programming?

    Bolu. He was my friend and coursemate in UNILAG and I don't think I even had a concept of what programming was until that very first discussion on it with him in my first-year room at Shodeinde Hall in UNILAG.

    I think I might have asked him what the heck this programming thing he was always on about, was. I remember him trying to explain the concept to me by asking me to think about algorithms in terms of how one would go about instructing someone else to make a cup of tea. Anyway, despite his best efforts, Bolu was unable to get me to understand programming enough to think it was something I should try my hands on right away.

    My first encounter with code

    While most people say their education in Nigeria was a waste of time, I can't. My Electrical-Electronics Engineering major required me to complete two different introductory courses to programming with C++; one in the second year, the other in the third year.

    Each time before second-year when I discussed programming with Bolu, it was always with a dread that was waived with the thought: "we'll cross the bridge when we get to it". The general belief amongst my classmates was that programming was so rocket-sciency that it took Bolu's level of genius to tackle, so I couldn't really be bothered.

    Of course, when the second year came around, I was (like 90+ percent of my colleagues) not in the least prepared for the introductory C++ course. To make matters worse, halfway through the semester, even though I attended lectures, I found myself not understanding concepts even as simple as variables and operators. I don't think I was paying much attention, perhaps, because of my defeatist mindset.

    A few weeks before the first programming test, I must have gotten into panic mode and beckoned to Bolu my friend to come rescue me. He agreed and he came around to my room in Jaja Hall to walk me through the concept of functions (methods) in C++. I think we chose that concept because despite my best studying efforts, I couldn't grasp the concept and why we even needed them at all. To me, they just existed to make my life harder in the name of sophistication. Of course, I think way differently now.

    Luckily for me, Bolu successfully demystified the concept of functions that fateful afternoon and you can say that from that point onwards, my life never remained the same.

    Finding my passion for programming

    After the session with Bolu on functions, I took it upon myself to write my first function in a practical scenario. The first program I ever started and completed all on my own (if my memory serves me correctly) was a C++ console application to compute a student's semester GPA, given his grade in each course and the weight of each course. While making the program, I created my very own first set of C++ functions and suddenly, it all finally made sense to me.

    A programmer in the zone
    When you finally understand the language of the computer

    The beauty of achieving this milestone was that it not only helped me finally see how functions work. No. It also completely shattered my previously strongly-held defeatist stance towards programming. I finally was able to conceptualize the possibilities ahead if I could get a computer to help me out by writing simple instructions. This realization fired up my curiosity and from that moment on, I spent most of my spare time studying the programming textbook and trying out what I was learning, on my laptop.

    Needless to say, I aced my first test and eventually came out tops in the class at semester end, both in the second and third year. Writing those programming exams made me feel exactly like my maths exams in high school used to. And funny enough, the feeling is similar to that which I get when playing addictive games on the PC. I'd say what is common between those two exams was how confident I was in my being able to tackle any question thrown at me and how much I actually enjoy the process of getting thrown a totally new question, reading and digesting it, then going ahead to apply my skills to find a solution. The flame of passion was ignited.

    Way before the end of my third year, I had personally completed the C++ programming textbook cover-to-cover. This was the only course in my five years at the university where I had enough motivation and interest in the material to pre-study, let alone, cover an entire textbook way before the exam period. The first and only time my lectures felt like revision sessions.

    I was well-renowned by my colleagues as one of the programming dons of the class, perhaps only second to Bolu the one who was born programming. I like to think that this respect formed part of my drive to do so well at it. In fact, I remember one troublesome classmate of mine expressing his contempt for me for being so confident on the day of the third year programming exams as to be studying for another course. Meanwhile, he and most other guys were busy rehearsing code they had crammed, hoping they would have the chance to regurgitate at the exam hall. I really never understood the idea of cramming code but somehow, people were able to make relatively good grades by taking that approach.

    During my third year, I also applied my new found skills to create a C++ console application that was pretty challenging for my level. Looking back now, I think doing it might have helped me develop some debugging skills early on. The idea of the program was simple. It could display any number from one (1) to a billion in words. So, if you enter 5467 into the console, it prints out "Five thousand, four hundred and sixty-seven". That was my proudest creation ever and I was always eager to show it off to anyone who cared to listen.

    Losing it

    This is the saddest part of this article, and it honestly makes me wish I could go back in time. But as there's no need to cry over spilt beans, let's just go ahead to see what happened after what was arguably the best year of my undergraduate life.

    The third-year course was the final programming course in my curriculum as an elect-elect student. So, even though I had a passion, I really didn't have anyone push me hard enough to keep developing my skills outside of coursework. Perhaps, I even felt like I had arrived and I wasn't looking for anything that would displace me from my programming throne. Hence, that marked the end of programming in my life as well. The figures-to-words conversion program was the last complete program I wrote as a student of UNILAG.

    In my final year, I got a chance to reignite my passion as a participant in the MIT AITI programme. Unfortunately, I could not cope with combining the expectations of my AITI team with my final year coursework. To complete my final year project, I had the huge task of learning to program with C++ QT and I wasn't making good progress with that. I was stuck and was not learned in the science of getting unstuck. This is meant to be easy. I was the programming guru in the third year, why is this so hard for me? Maybe this programming thing is not my thing after all.

    This made for a bad state of mind to try and learn yet another language (Java for Android, I think) to deliver on my responsibilities as a member of an AITI startup. After a few weeks into the program, I told my AITI teammates (two of whom went on to found now stellar Prepclass), tail between my legs, that I couldn't do this anymore. After all, in my mind, I was in school first to excel at my coursework before anything else.

    I managed to get my final year project to a barely working state before it was time to submit it. But then, after that ordeal, I lost all of my premature love for programming. I hated anything that made me feel incompetent, oblivious of the concept of a learning curve and that it's normal to go through a steep phase to master any skill, even if the basics made you feel like a genius.

    A second chance

    Before the final semester wound up, Appzone came to UNILAG for a graduate-intern recruitment drive for engineering students. They conducted an aptitude test in which I performed well enough to make it to the interview stage.

    The interviews didn't really go well, because as you can probably tell, I really wasn't that much use as a programmer, in terms of productivity. I told them about my brief romance with programming in the second and third years of my studies and how I was the don. However, I was not able to justify why I did not keep programming after those introductory courses ended. I knew that only a miracle would get me into Appzone at this point, considering the number of more experienced programmers (including Bolu) who were also interviewed.

    Getting my first job

    Towards the end of the final exam period at UNILAG, the first set of successful candidates were made an offer by Appzone. Unsurprisingly, I did not make the list. However, I think there was some speculation that there would be a subsequent list. I was hopeful that if there was any validity to that, my name would fall on the second list.

    A few weeks after final exams, I finally got the best call of my life (at the time) from Maryam, a member of the Appzone HR team. She was calling to let me know I was successful; that I had made the second list! A few of my more experienced classmates (including Bolu) who were on the first list had declined the offer. Hence, some room was created which allowed Appzone to accept me and two additional classmates into the paid internship program. What luck!

    I resumed at Appzone just one month after finishing my final exams in UNILAG. All intern programmers were required undergo a rigorous and dare I say,  effective training process. First, we were taken through a series of lectures by our experienced colleagues to get us up to speed on the Nigerian banking industry and how Appzone's business fits in there.

    Sitting through lectures was the easy part. After the lecture season, each of us (interns) was tasked with single-handedly building two different software projects from the ground up. Each of the projects is a less-sophisticated version of some of the company's existing products. Upon completing both projects, the intern is reasonably expected to have gained enough programming skills and banking domain knowledge to go live (start real work).

    During the project period, each intern is attached to an experienced colleague who will be their mentor and first point of call whenever they get stuck. I was attached to Emeka, an elect-elect graduate of UNILAG two years ahead of me. And he made sure I would report my project progress to him, once a day in the least. Without a doubt, this kept me on my toes.

    Final thoughts

    I don't think I would have been able to overcome the steep learning curve to becoming a market-ready programmer without all the controls and aid put in place at Appzone to help me get there. Big-ups to Appzone for helping me through that delicate stage of my career and giving me a chance to mess up on the job. Heck, for even helping me to 'choose' a career.

    Who knows what I'd be doing today if I didn't get that offer by a slim chance. I didn't have any skills and I lacked the drive to develop one on my own. So, I, like most other Nigerian graduates, was ready to settle for the first taker, irrespective of how interested I was in the work. Oh, someone thinks I can be useful at something? Great! Take me whole.

    Also, I've changed a lot in the five years since graduating from school. My exposure to the 'real world' has immensely shaped my view of life and I now have a beyond superficial drive to give the best work that I can and be the best me that I can. Every living moment, I'm thinking about how best I can spend my time and resources to improve my chances at being an unarguable success at what I do.
    Read More