You are here: Home . Archive

Author Archives: Kakoma

You are here: Home . Archive

Ahead of Facebook Dev Circle Ask Me Anything session

I’ll be hosted by the Kampala Facebook Developer Circle to an Ask Me Anything session. To give context for some questions, here’s a bit more about me and my journey as a software engineer in Uganda:

A friend, Andrew, and I had an idea to start a job-matching/sports-betting site in our S.6 vacation. I say job-matching/sports-betting because I can’t quite remember which of the two it was. Either way, we paid someone to build the website and we never got a thing. I think the desire to learn to build sites myself was birthed then.

I studied Electrical Engineering. When it came to time to do internship(which happens in the second year), I chose to join a web development company.  First, I wasn’t sure the Faculty would allow me to do web development for internship since it wasn’t part of the things we were taught. Secondly, I worried that I might be given a poor grade because of that choice.

The Faculty agreed. Helika Limited, a private company, took me on. I had access to the internet and I was told we’d use WordPress for the first website we’d do. I spent my first day cramming HTML tags.

HTML and CSS book

By the end of the internship, I’d put together a website for a client using WordPress. I’m not certain it was ever published. Special thanks to the amazing Hellene K. for getting me started with a keen eye on quality and professionalism.

I was fortunate enough to make it into MTN Uganda for my next internship a year later. I worked in the Network Operations Center – the NOC. It is a section that monitors the status of the telecom network and also addresses some customer issues. I got to see the practical side of the telecom aspects I was learning in school.

I was still coding. One particular project that consumed me was building an arts & crafts website. I was targeting a launch around the 2007 Commonwealth Heads of Government Meeting (CHOGM) that Uganda would host. I used Joomla to build it. I got a lot of help from a course mate, Wallace., who was already doing work for some major clients at the time.  CHOGM came and went and my site didn’t see the light of day…

For my final year project in school, a friend and I designed a fire alarm system with SMS notification. It involved interfacing with and programming microprocessors. It was a disaster. I’m still getting lessons from FundiBots to make up for it.


Just before completing school, there was an opportunity to join MTN as a temporary staff member in the NOC. I applied and since I’d interned in that section before, I got in. It was one foot in the door…

I loved the team – they really helped me find the ropes and learn the telecom network well. Sam Naseke, Thaddeus, Mark Oula, Collins Kiwotoka, Irene Ekama, everyone. I particularly loved the night shift – less traffic on the network so I got to do more coding. I built an app that made it easier to do my work – it logged into the servers I was monitoring, run the commands I needed to, combined the output and displayed it in a pretty interface I could click through.  I got help on some tricky display bits from a good friend and heavyweight in these things, Ssegga

An opportunity to join another section in MTN as a Billing Systems Analyst came by. I applied and didn’t get invited for the interviews.

Another opportunity came by – one to join the Software Systems Support section. This, I felt, was the dream job! I applied. I was invited for the written interview which beat me into a pulp.  Ssegga got that job.

Yet another opportunity came by, this time in a section called Value Added Services (VAS). I applied, fought through the hard written interview, tussled through the oral interview and got the job! Software engineering took a marked new turn for me from here….

Part of the job involved creating customer-facing USSD/SMS/Web products for the company. The other part involved planning for several VAS services – WhoCalled, Voice SMS, Voice Mail, USSD, SMS, etc. Legend has it that the person who held the job before me up and left one day, leaving unfinished products behind. I found a code base in PHP. One of the product was going to be launched in a few months. I feared to make changes to the product yet the marketing team always spoke to me like they had no doubt I knew what I was doing. In time, I grew more confident, I think I started to believe them. I started making more changes without holding my breath. Special thanks to Dennis Musinguzi, Eddie Kibuuka, Chris Ssali from the marketing team that didn’t eat me alive.

The product launched and the rest is history. NOT. I struggled. The demand grew exponentially and I couldn’t understand why the product kept failing. I learned the hard way how to scale an app. On the database side, I got a lot of guidance from Chris Musasizi. On the code side, I leaned a lot on the late Revence Kalibwami for pointers on what to try. It was tough. I recall spending an entire weekend at my laptop and eventually passing out, seated, typing. I also remember when it finally worked; when friend’s stopped calling to say “Gwe, the thing is off again”. I couldn’t believe it. The app scaled to handle 4 million customers.

I wore all software engineering hats – systems admin, database admin, software support, dev ops, the works.

Typing at keyboard

There were a lot of products and services thereafter. At some point, my supervisors, Elizabeth Olule Liri & Jennifer Kanyunyuzi, pushed to create a special section that only wrote code and  asked HR that I head it. We recruited 2 solid engineers – Sidney W. & Alex N. – and I started to learn how to lead a software engineering team. Special thanks to Bod Toki from Google whom I spoke to for several hours getting tips. Extra, extra special thanks to Elizabeth and Jennifer for taking such a big leap.

I requisitioned and bought servers and we went about setting up (doing physical installation, laying cables, labeling, choosing and installing software) for some really solid architecture spanning multiple data centers and involving over 24 virtual servers. Special thanks to *NIX maestro Alberto for all the tips & guidance.

We built several products & services. One of the most memorable for all of us was migrating traffic for internet bundle provisioning from a big international vendor to our platform. If there were ever any doubts that we were doing fairly solid work, that transition eliminated them.

Kanzu Code was officially born somewhere amidst all this. We launched a product into the WordPress repo, have done several projects and grown in many ways. Special thanks to the entire team for all those things we’ve knocked out of the park and those we are still finding ways to excel at. A word from our sponsor: We’ll release tutorials on how to grow as a software engineer in the Kanzu Lab here. Do sign-up. Our initial focus will be on WordPress.

Andela came up last year. Maria Kyamulabye felt I was a good fit for a role I thought was out of my league. It was a really grueling interview process but as all good things go, it ended. I’ve enjoyed getting back into writing more code and mentoring a lot more people.

Outside code, I’ve been a part of other endeavors:

  • Blue Bolt Limited – Initially, an events management and web development company. It is now a consultancy
  • FUNtime! – A magazine for primary school children
  • Pork stall – I run a pork stall at the Mitchellex Bazaar in Makerere University
  • Urban Legend Kampala – Co-founder and writer in that leading humor and satire website
  • GNLD – Sales and marketing  which I soon found out wasn’t my strong hat
  • Humor and Satire Columnist for The Daily Monitor

I am a Christian – one still discovering what it means to be a child of God, a husband to my best friend and a father.


Virtualbox in Secure Boot Kernel upgrade error

If you run Ubuntu (and probably many other Linux distros) and you run virtualbox/vagrant and have Secure Boot enabled, you are likely to run into the following error every time you upgrade your Kernel (which in Ubuntu’s case is very often):

username@host/vagrant/path$ sudo vagrant up
The provider 'virtualbox' that was requested to back the machine
'default' is reporting that it isn't usable on this system. The
reason is shown below:

VirtualBox is complaining that the installation is incomplete. Please
run `VBoxManage --version` to see the error message which should contain
instructions on how to fix this error.

If you use vvv for WordPress development, you’ll run into this quite often.


Here’s what you should do:

#Sign the kernel modules again. Make sure you still have your X.509 Key Pair
for f in $(dirname $(modinfo -n vboxdrv))/*.ko; do echo "Signing $f"; sudo /usr/src/linux-headers-4.4.0-<span style="color: #ff0000;"><strong>xx</strong></span>-generic/scripts/sign-file sha256 ./iamlocal_MOK.priv ./iamlocal_MOK.der $f; done

Make sure xx is the latest/highest number in the /usr/src/linux-headers-4.4.0-* series.

and then reconfigure virtualbox:

 sudo dpkg-reconfigure virtualbox-dkms
 sudo dpkg-reconfigure virtualbox
 sudo modprobe vboxdrv

If you haven’t created a X.509 Key Pair before, there’s this great tutorial on how to go about it:

UPDATE 05/04/17: I’ve added a script for this here: VirtualBox DKMS Error Fix. Add this to your PATH and all you’ll need to do going forward is run the script to resolve the issue



I’ve had the honour of serving on a number of job interview panels. I’m that last guy on the panel who doesn’t smile and grunts after every answer you give. The one who sips very loudly from his glass of water; so loud, the room asks you to repeat everything you said while he sipped. The one who comes in only to ask very difficult, “it says here that you…BUT isn’t it true that…” questions.

On the panel, we review a candidate’s credentials and ask them a number of questions about themselves. We then assess their responses to choose the best candidate for the position.The panel wants whoever has displayed certain capabilities the best and goes through the motions to determine which candidate that is.

When I see someone serving God in one capacity or the other, because of how we select our own candidates, I’m very tempted to think that these people are there because they are the best-qualified to do that thing. I might picture that they got the position by answering God’s  “Tell me about yourself…” and “So, what would you like to earn?” very well. They were probably a lot more composed than everyone else in the interview. Maybe they even had the most impressive CV.

God’s selection process is quite different though. I see that He selects the worst possible candidate for jobs.


From choosing a guy who stutters and has no leadership skills on record to go and speak to one of the strongest kings of the time and tell him to release the slaves his great empire heavily relies on (Exodus 3 in The Bible). The guy’s tending sheep and goats when God shows up. Sheep and goats. [Using our interview process, best candidate: Leader with great track record of very, very good negotiation techniques, motivational speech, good army strategies and with the ability to provide for millions in a dessert ]

To saving an entire nation, Israel, by using a prostitute to hide the equivalent of FBI agents it had sent to gather information.  (Joshua 2). That prostitute’s actually named in Jesus’s lineage.(Matthew 1) 

To choosing a guy bent on killing the early church to spread it. He’s so devoted to seeking out and killing apostles but he’s chosen to join their ranks. (Acts 9)

To selecting as king the youngest in a family – the one so weak for the job, he wasn’t even called for the interviews (1 Samuel 16)

To using fishermen as disciples – I’m trying to imagine a fisherman at that time telling me about this guy who died but actually didn’t die and he’ll change my life. Ha! (Acts 4:13)

To using a woman so promiscuous, she was shunned by the town she lived in. He used Her to preach His message to that town and save its people. Surely, there must have been some ‘Godly’ people more qualified to spread the message (John  4)

I see that He truly has a liking for the weakest candidate.

When you get called back by that company and told, “We are glad to inform you that you emerged successful in the interview and….(all fades to black as you dance)”, rejoice, you were the best. When God calls you though, *cough* you were the weakest. Rejoice in that too. You are not qualified for the job. You were the least attractive candidate BUT…

…those he called, he also justified; those he justified, he also glorified. Romans 8:30

You’ll be equipped to the point that people, who’ll mainly see the finished product, will say how awesome you are. But you for you, you know where you came from and who’s awesome. There might be times though, when how unqualified you are will show. In those times, the people who thought you were so awesome will say a lot. Go back to who’s awesome so that refinement can continue.

For you who feels God’s calling you to do something and you can only think of all the reasons you are not the right person for it, you are in good company.

…My power is perfected in weakness… 2 Corinthians 12:9

Most importantly, for you who thinks “doing God’s work” is just for that friend of yours who walks around with a Bible, well, God doesn’t.

Are you silently slaying giants?

There’s this interesting passage in the Good book:

After this, war broke out with the Philistines at Gezer. As they fought, Sibbecai from Hushah killed Saph, a descendant of the giants, and so the Philistines were subdued. During another battle with the Philistines, Elhanan son of Jair killed Lahmi, the brother of Goliath of Gath. The handle of Lahmi’s spear was as thick as a weaver’s beam! In another battle with the Philistines at Gath, they encountered a huge man with six fingers on each hand and six toes on each foot, twenty-four in all, who was also a descendant of the giants. But when he defied and taunted Israel, he was killed by Jonathan, the son of David’s brother Shimea. These Philistines were descendants of the giants of Gath, but David and his warriors killed them.1 Chronicles 20:4-8 (NLT) (Emphasis mine)

We all know the David vs Goliath story – a young shepherd goes up against a towering giant in a high stakes duel. He kills the giant using his slingshot.

Many times in life,  you aren’t the David in the story – the giant slayer we hear about. The one who’s name we all know. The one we celebrate. Sometimes, you take on your 6-finger giants and no one knows about it. You battle and you overcome but there’s no party. Giants come in many forms: Terminal illness. A disadvantaged background. Raising fees every term for that child. For yourself. Taking care of orphans. Following God’s call and starting a church in times like these.Speaking up when the taxi conductor’s being funny. Refusing to bribe. Taking on injustice. Doing the right thing.

Elnathan. Sibbecai. Jonathan. {you}. All giant slayers.


Many times, it might not seem like the fight is still worth it but by all means, keep going. We may not read about you or hear your David story but someone next to you has held their head higher because of your efforts. Someone’s life is better. Someone will make better decisions. Keep slaying those giants.  Your little infinity matters.

To little infinities


One of my favourite movie quotes is from The Fault in Our Stars, in which the terminally ill heroine says to her love who won’t live long,

“There are infinite numbers between 0 and 1. There’s .1 and .12 and .112 and an infinite collection of others. Of course, there is a bigger infinite set of numbers between 0 and 2, or between 0 and a million. Some infinities are bigger than other infinities. A writer we used to like taught us that. There are days, many of them, when I reset the size of my unbounded set. I want more numbers than I’m likely to get, and God, I want more numbers for Augustus Waters than he got. But, Gus, my love, I cannot tell you how thankful I am for our little infinity. I wouldn’t trade it for the world. You gave me a forever within the numbered days, and I’m grateful.”

I have a plan for world domination. It is a good plan. I know this because I’ve shared it with my buddies before and they all fell off their seats listening to it. The fall might have been precipitated by other things but in my version of events, my plan did that. They are the same crew that praised my plan to buy a motorbike before I knew how to ride one but I’m sure they are much wiser now.

That movie quote, for me, is a stark reminder not to get caught-up in the big infinity of trying to take over the world and miss the little one around me.  It asks me whether I’m being everything to my little infinity. Whether before wanting to be everything for everyone, I’m being everything for the one. Whether, in this tiny sphere of mine, I’m giving nothing but my best. Whether I’m present and adding value.

It asks me about how, before I want to change the country – the bigger infinity – how am I doing in my home? Before I want to speak to thousands, how am I doing with my friends? Before I want to build apps that support several million users, how am I doing with 70? It tells me, “So you have a big plan…but first take a seat. Focus on the small picture FIRST.” It tells me not to get ahead of myself.

How am I doing with my little infinity? With the relationships-friends, family? With finances? In time management?

The Good Book puts it this way:

“Whoever can be trusted with very little can also be trusted with much, and whoever is dishonest with very little will also be dishonest with much.” Luke 16:10

Maybe the quote’s asking you too, how is your little infinity doing?

[Events] Principles of collaboration and development cycles

Over the next two days, I’ll be a part of two events I’m pretty thrilled about.  Tomorrow, I’ll co-facilitate a talk on the principles of collaboration, scale and development cycles. The talk will be at the Outbox Hub from 5:30 to 08:00 PM. The main facilitator will be Bas Moussa, a good friend and the chief architect at Nuvole Computing, a cloud architecture firm in San Francisco. He’s actually said a few things here before.

We’ll go over source control, architecture, build, integration and release. If there’s time, and traffic is light and there are no cops in sight and someone’s willing to record the proceedings, we’ll also do the Museveni challenge.


Overall, we’ll go through high level concepts on preparing for scale.


On Saturday, I’ll be hosted in Lira by Emmanuel Angoda, a teacher passionate about technology. I’ll give a talk at Lira Town College to developers, mainly secondary school students, on mobile programming using channels like USSD & SMS.

I’ll share notes from the events.

Starting over…and UBHH

In September last year, I stopped writing a weekly humour and satire column for The Sunday Monitor. By The Way had run 4 years at the time. It felt like I was on the wrong side of the submission deadline every week and the regular owe dance wasn’t doing it for me anymore.

The owe dance is this thing that happens when you hope you don’t run into someone you owe something. You somehow inevitably do because the world conspires for you to. Could be that the boda boda rider, stopping to refuel, parks right next to them. Or of all the places they could have gone to hang out at, they seem to have followed you to the same corner of your favourite spot. Or they chose to sit in the same taxi – as if they don’t know about Uber. Or, the worst bit, they chose to call you. For some reason, that’s the only time the phone doesn’t tell them that the number doesn’t exist on the network.

When the owe dance starts, you are confused. You hope they don’t bring up what you owe because then you can testify of God’s goodness because He answered your prayer that they forget it. On the other hand, you hope that they bring it up so that you can finally share that story you’ve been rehearsing.

I was done with the weekly owe dance and I thought I’d still do this regularly without the deadlines and structure that The Sunday Monitor editor imposed provided. If once a year is regular, I’m still on track.

I went for the Uganda Bloggers Happy Hour (UBHH) last Thursday. It’s this thing where bloggers go and be happy for exactly one hour.  There’s a scale used to determine your fate:

Category Happy for           


1 Less than 1 hour Will be the topic of ridicule on every blog for the next month
2 Exactly 1 hour Attain rockstar blogger status. Admiration all round. High fives. People attribute jokes to you like, “Would you believe what YOUR NAME said once? They said… (Joke that leaves everyone in stiches)”
Quotes are also attributed to you. “You know what YOUR NAME always says, Our deepest fear is not that we are inadequate…”
3 Between 1 and 2 hours Okay person. A few laughs to some of your jokes.
4 Over 2 hours Strange fellow. Strange. Slowly draw away from them and don’t leave your handbags or anything valuable near them. Don’t allow them to contribute to conversation.

From the score card, you can already tell that Solomon King fell in category 4. Nevender, the referee, and Josh, his assistant, didn’t publish the results but I can guess that Safyre fell in the same category, based on the fact that Florentina stealthily edged further and further away from him during the course of the evening to the point that he had to leave early.

Dilman, more used to making a killing in the sun, took a while to adjust to the evening. You could tell from how long he’d process something Edna would say before making an unintelligible response. PKahill, seated right next to him, would nod quite vigorously after each statement either because she understood him or she just didn’t want to upset our awesome writer. Moses and Sheila were pretty quiet throughout the evening and we are still trying to ascertain whether they were not from a shady security agency. Given some of the candid remarks made by a one Peter Kagayi, this is a scary thought. It isn’t helped by the fact that the blogs they said they write for don’t exist and that Kagayi’s has not been reachable since the meet. It is remotely possible that it’s because he’s preparing for his show on the 19th June at 7:00PM at the National Theatre.


Basiks came so late, he didn’t have time to understand the discussion before contributing. Eloquent. But off topic. Everyone let him fall in porridge. Even you Nevender? We expected more from you.


WordPress Child theme – Inheriting parent options

When building a WordPress child theme, it’s important for it to, at least initially, pick-up the settings from the parent theme.

Here’s something that works to allow your child theme to, on activation, retrieve the parent’s theme options:

add_action( 'after_switch_theme', 'themeprefix_switch_theme_update_mods' );

function themeprefix_switch_theme_update_mods() {

if ( is_child_theme() && false === get_theme_mods() ) {

$mods = get_option( 'theme_mods_' . get_option( 'template' ) );

if ( false !== $mods ) {

foreach ( $mods as $mod => $value ) {

if ( 'sidebars_widgets' !== $mod )//Leave out the sidebars
set_theme_mod( $mod, $value );

Note that there’s still an unresolved WordPress ticket to have this feature added to core: WordPress Ticket #27177
Code credit: @greenshady

Overcoming fear of our dear leader

The State Minister for Agriculture, Vincent Sempijja, reportedly told an audience in Rakai District recently that many ministers fear our dear leader and, as a result, don’t talk to him candidly. He’s reported to have said that very few ministers can call our dear leader and he too only calls a few of them. Surely things aren’t good if our nation’s ministers indeed don’t have open communication lines with our fountain of vision.

To be fair though, on the bit about our dear leader only calling a few ministers, I imagine he has so many phone numbers in his phonebook, he can’t save any more without first deleting some *cough* Tamale. Just wait a while for more numbers to be erased then yours can be added. Also, you know how sometimes you can’t quite remember what you saved someone as? I imagine this problem isn’t unique to you and me – maybe our dear leader faces it too.

Then, let’s not forget that not so long ago, some prominent person wasn’t taking our dear leader’s calls. Something like that can leave you less excited about making calls willy-nilly.

Our dear leader not calling you isn’t what we’ll address today; we’ll look at the much bigger issue at hand –ministers fearing him. A fear of that sort means a lot won’t get done in the country because you don’t have audience. So, how do you, dear minister, get over that fear? Here are a few techniques my research revealed:

Awareness. This is the first and most important part of this journey. Your admission of the issue is a testament that we are halfway to the Promised Land. It won’t be long now before you and our beloved leader are trading jokes and all your messages to him are getting blue ticks.

WTWTCH? What’s the Worst That Could Happen is the second technique you should use. Using this, when faced with a fear, you overcome it by picturing the worst case scenario. For you who fear approaching our leader, one scenario could be him ignoring you as you talk (or not shaking your hand even when you repeatedly stick it out to him).  Or he could call guards to carry you out. Or he could play Sitya Loss and ask you to do all its dance moves. As you can see in all these scenarios, you are still alive. So don’t be afraid, go for it!

How to meet the Pope

Pope Francis recently told the Uganda government the things he wants and does not want during his visit to the country in November. The list was the kind to make any politician squirm – he won’t sit with any other passenger in his car, he won’t use a big 4×4 SUV vehicle, he won’t meet any political leaders apart from a brief meeting with the president and only to discuss religious matters and he won’t sleep in a hotel. Prior to this, it was reported that government had budgeted at least Shs60 billion for VIP cars.

With rules that strict, it immediately seems impossible to meet the man of God. That notwithstanding there are still a few ways you as a politician can meet him. It is election season so a selfie with the Pope would do wonders for your campaign. Here are a few ways you can approach this mission impossible *play the soundtrack *

Dress up as an ordinary citizen and stand among the crowd on Entebbe Road to welcome him. When the Pope’s being driven past you, make sure you stand out like a rolex in a 5-star restaurant. Wave more than the rest. Say some words in Latin. Carry a placard. Do something. The point here is for him to see and remember your face – that’s all.

Then move onto phase two. When he goes to conduct mass, make sure you spend the night in the chapel. This will ensure that you get a decent seat, close enough to hear every word he says during service. These words are what you’ll use to make conversation when you finally get a chance. For example, you could remark at how well he kept saying, “The Lord be with you”.

Now, you need to make initial contact. Get in line for Holy Communion. Make sure that when you get there, you say a few words to him.

Now to seal the deal, we move to the final phase – a full conversation. Since he won’t allow any passengers in his car, you could pull your political weight and make sure you be one of the four guards running next to the car. This will give you plenty of time to have a long conversation through the sunroof. You could start it simple by talking about the weather then gradually increase the heat by steering skillfully towards your reelection bid and how the Catholics will benefit from you being back in office. This step though requires you to shed some of that political weight in preparation.

All the best, my friend. Omnem medullam. If you are serious about this project, you should know what that means by now.