Software Development In Sub-Saharan Africa: Quo Vadis?
Disclaimer: This article is my personal opinion formed from my personal experiences, and obviously there will be other people with totally different experiences altogether, and if so, I'd love to hear from you...
That said here we go:
A peek into Africa's best universities reveals mouthwatering computer science, information technology curricula. There are currently hundreds of universities and thousands of colleges churning and graduating an estimate of over 100,000 of African IT professionals every year... on a yearly basis, yes you got me right, and let that sink in.
If you ask every single one of these cumulatively over a million graduates, they will tell you they can write code, and will gladly advertise themselves as accomplished programmers on public profiles like LinkedIn and many more...just do a quick check and see how good most of us are on paper .
But are we really the I.T. gurus, experts, hackers, coders, programmers, developers, engineers, techies or whatever geeky sounding names that we portray ourselves to be? A glance through the normal software communities like Github, StackOverflow and more, tells a different story altogether.
A quick look at some so called successes by a plethora of 'Africa first' Tech organizations that have put themselves in the limelight also tells quite a different story.
Maybe let's try and forgive ourselves and say that we can't really give our best in community driven projects, as we always need to reserve our energy for our day to day jobs that do actually pay for our living...a quick assessment in what we have practically produced in this area doesn't tally with the guru statuses that we bestow on ourselves yet again, let alone the praise we seek and surprisingly get from our employers and the non-IT African community at large.
What causes these discrepancies between what we claim we can do versus what is there on the ground? Why would the biggest tech giants in the world consistently employ scores of thousands from other continents not Africa? Why are we not being effective in solving our own African problems through technology? What is really our problem in the Software Development industry in Africa, and maybe IT in general?
The year is 2005, in March, and I am part of a graduating congregation, wearing the black academic gown and wisdom hat, awarded with a Bachelor of Science degree, majoring in Computer Science. I am already working in an internship, but with that degree certificate I am brimming with confidence, I am ready to take on the information technology industry, at least in my home country Malawi, but I'm in for a surprise...
I had nothing to fear, after all I had gone through the test and resilience needed by proving understanding for Dijkstra's algorithms, Euler's theorem, and many other famous people with their lemmas, conjectures and propositions in the run up to the degree, albeit reluctantly so...These scholars made life difficult throughout the designated 8 semesters for the degree. You will note that there was no shortcut, I had to study Operating Systems, Computer Networks, Algorithms & Data Structures, Programming Languages (Pascal then C++), Systems Analysis & Design, Modelling & Simulation, File Structure & Design, Database Systems, Artificial Intelligence, Human Computer Interaction, Software Engineering, and even had to do submit a practical Information Systems Project at the end.
I had to read the same books as anyone else in the world, the likes of Andrew S. Tanenbaum for Computer Networks and I must give respect where it's due,that despite being from the so called 'third world', my university never compromised on theoretical standards. This should be the same case all across Africa.
The main universities in any African country, whether Zambia, Zimbabwe, Kenya, Uganda etc, all have quite strong syllabi in computing courses, and in my opinion any person who went through African colleges like the one I attended, has much more potential than their peers in the Western and Eastern parts of the world, at least at this stage, bearing in mind the conditions they had to endure, with very scanty resources both at the college facilities and at home, without access to internet resources... For example in my college, One prescribed book for a course had to be shared by 40 students on average, and for one to have a chance to read it, they had to have literally more than rugby skills to get past everyone waiting for the library doors to open every morning, and even when you were successful to be the first person at the 'Reserves' counter, you were only allowed 2 hours to use it...and that's on a lucky day.
In summary at this point of graduating we can safely assume that we as Africans are at the same level as graduates from average colleges in Europe at large, Americas, India and the east at large...or the whole world in general. But where does the separation begin?
I personally at this point had no exposure whatsoever on what my peers in the world would be doing after graduation, and that is the first problem why on average Africa fails to keep up with the rest of the world. I was a bit lucky to already have been in the industry for a couple of months, thrown a bit into the deep end on a VBA software project, with which I didn't do too well initially...I wasn't ready yet, considering that my introduction to programming was in Pascal, and most of my knowledge was more theoretical than practical... Problem no. 1: We have a glaring deficiency in our universities on the practical side of things. Colleges should prepare graduating students more from a practical angle, and use more relevant and current technologies in respective industries.
In those early days of my career, the zealous nature of mine forced me to learn VBA at breakneck speed, through some old books I could scavenge, and whenever else I got a chance to access internet... Problem no 2: Our technology infrastructure is poor. Africa must make deliberate efforts to improve infrastructure and access to internet. E.g. playing tutorial videos is a luxury that many don't have to this date.
I then picked up a job as a lecturer in programming using VB.Net at a national college of information technology. That was another deep end, considering the amount of exposure in the language or lack of it thereof. I wasn't going to be fazed at the thought of facing inquisitive and eager college students. I still took up the challenge, after all I had survived the likes of "Wumpus World" in my artificial intelligence course. Obviously when preparing for my lectures, I came across areas that I did not fully understand, and a quick ask for help from those who had graduated before me and had some sort of real world experience revealed that not many were exposed. They were just getting by. I was on my own. I had to rely on my own...Problem no 3: Africa doesn't have it's own vibrant software developer specific communities that speak directly to problems faced in the specific African environment. Out of the problems mentioned so far, this does not require external help. We can start this initiative on our own.
It sank in slowly that the people that I respect a lot and are already in the IT industry working for big corporate institutions for years, are not able to help me with some seemingly simple problems. I concluded that there might not be that much exposure they are getting in the corporate world. Nevertheless I still jumped when an opportunity presented itself, to go into the corporate world , and worked my way up to a head of IT.
As a young chap in my twenties, it was an achievement and an honor to be heading the IT department for one of the biggest corporate institutions in my country, and indeed for one of the most known brands in the world, but it didn't come on a silver platter. I faced a lot of challenges from the people who were already there and were holding and/or hoping for my position before me.
The challenges included hiding information, reluctance to pass on skills acquired by experience, and general office politics. But being a survivor, I still made it through. Problem no. 4: Sharing of information and collaboration is a problem in Africa. We hold on to the little knowledge we have, with the aim of being seen as relevant and important. We want to be seen as the only one who can do this or that. This has repercussions in the fact that if we don't pass on a skill, we ourselves do not leave room to grow and go on to do other things and acquire more skills. We need to start to learn to let go.
Being a young person with such responsibilities, producing quarterly reports and presenting to international teams including Japan, among others, you are bound to make some mistakes on and off work, and forbid it that any of not so well wishers notice anything of that sort. Problem no. 5: We do not sincerely wish each other well in Africa. We are unusually happy when one makes a mistake, and want to see a person fall, instead of building a person up and embracing team work. We don't understand the fact that when one wins, all of us benefit. When one person succeeds, they pull the others along with a higher set bar and that's how others grow. We need to start to learn to embrace and celebrate others successes genuinely.
I have always been an ambitious person, who believes in being practical, a bit over-zealously at times, and so I have learnt over the years.
From our day to day operations, what came out as most in need of attention was mainly divided into hardware, network, and application software issues apart from the management side of things. My predecessors had adopted a culture of always outsourcing whenever we had some issues that came across as somehow being a bit complex.
While I was mainly absorbed into strategic prevention of problems, I still took extra responsibility to do more things in-house within the department as opposed to outsourcing, and of course with internal resistance. Problem no. 6: Most of the internal systems that we run in African organizations are unnecessarily off the shelf and/or done by overseas software development organizations or maybe from South Africa. If there's any development at all, it is superficial. We act more like systems administrators as opposed to developers, and dare to call ourselves software engineers when we can't even write more than a score lines of code in a year. We need to assume more responsibilities, and offer to do more in our organizations rather than just get by. That way our organizations will gradually trust us with more responsibility while we grow in confidence and capabilities on what we can do. Instead of spending money by flying in consultants from all over the world, there will be more budgets to add on to our salaries, while at the same time our knowledge grows.
After an overdose of office politics in a corporate world where fighting for positions is more paramount as a hard skill, than actually acquiring important trade skills through experience, I decided to move and work more like a consultant offering services to different corporate and other organizations. I could not handle the pettiness of sitting in the HR Manager's office for the whole day 'working' on their computer, just for the sake of being 'seen' to be working, when I could handle everything remotely, and more effectively so. Problem no. 7 : We often get buried in doing petty things, at the expense of real challenging issues, just for visibility, mainly to those not so savvy. I have worked at other organizations as well in a different environment from my home country, where I have seen similar traits of mainly African developers picking up the simplest of tasks, bugs, and stories so that their activity on source control and project management tools should look like they are stellar performers, while in actual sense the main performers are those with more difficult tasks.
This behavior is counterproductive. We can grow in temporary reward by the non-technically savvy eyes, but we will never grow in skills, which allow us to survive in different environments.
I have always tended to lean more towards software development as a discipline. I saw some friends doing really well in I.T. Security (at times meaning installing anti-virus, and a few pre-configured audit lists), managing networks (at times meaning connecting printers), installing and managing software applications like Sage Accpac, Syspro and the like, but I refused to believe that is what I would only end up being good for.
Letting others develop Wireshark, and then happily using it to monitor networks, or indeed letting others develop Joomla, Drupal, Wordpress etc, and downloading then installing plugins, with very minimal changes on code, maybe only going into code to remove credits, then call myself a developer? This was easy money and an easy way out, but that's not what I wanted.
I told myself I will be a proper software developer and I went head on building my capacity to provide customized software solutions. I quickly learnt and became frustrated that no-one would ever use my custom made software, or give me a chance to develop their software from scratch, however simple their specifications. It always had to be done by companies and consultants from South Africa and overseas. Problem no. 8: Africa hardly recognizes that it has potential within itself. There is this an unwritten rule that everything made from elsewhere apart from home is always better. There's need to start changing our mindset and start believing in our potential that we have actually invested on in terms of education and the like. Most of the software that is running Africa today actually was not made for us and our systems. We are just a by-product.
Without the ideal market and proper opportunities in software development, I reluctantly went along providing 'IT services' to whatever client I could find. I installed network cables, installed anti-viruses, configured Cisco routers, acted as an internet service provider, cleaned up databases, and just about anything.
When you are in the I.T. business in Africa, you soon realize that you have to be a jack of all trades just to survive. But are you really a jack of all trades?
I saw a social media conversation between some of our 'IT gurus' who were boasting between themselves on what skills they possess, and one of them claimed they were an expert in and I quote 'Artificial Intelligence, Machine Learning, Neural Networks, Business Intelligence, Python, C#, Angular, React.Js, SharePoint, MongoDb, SQL Server, Java, Swift, Kotlin, Android... ', and I'm not just making this up. There are people who raise their hands up for just about anything anyone wants to be done, and in the end they do a shoddy job because they claim to be experts, but can't be so in everything, and subsequently they just know things on the surface. Problem no 9: There are too many 'I.T. Experts' in Africa, 'jack of all trades, but master of none'. Unsurprisingly, these are the kinds of experts that are obsessed with making names only, and they eventually do more harm to the their peers, and the industry in Africa in general instead, because it sounds good to hear 'pass it to Will'.
I.T. professionals in Africa need to learn to choose an area of specialization, and collaborate with others in other areas of specialization. That is the only way we will be able to compete with the rest of the world, in designing and coming up with solutions to our problems. Nobody will solve our problems, and we have persisted with the culture of just knowing something on the surface for too long, and then blowing unnecessary trumpets about it.
The Western influenced donors and well wishers have got a very funny algorithm of picking up, supporting and promoting usually wrong people and projects over the past decades.
Too many people picked and supported as future leaders, given all the support they can get all the way to post PhD levels, when they are not necessarily leadership material. As long as they get their accolades and an entry into the media on superficial achievements that help no-one else apart from self egos, they are satisfied and won't do anything else for their countries.
That is why half a century of paying for foreign education for hundreds of thousands if not millions of Africans cumulatively, billions of dollars spent on superficial tech projects has not helped Africa to move an inch technologically. I'll give an example that one day I found myself watching a presentation from one of the renown technical evangelists at Microsoft, and he was co-presenting with a young lady from one of the African countries. It was great to see, but it didn't take rocket science to see that the lady was being groomed. It was painful to see she wasn't really up to the task, and I have seen other Africans who could represent us better at such a public stage, but they're just not on the radar. I wish the young lady well, and hopefully she eventually caught up, of course I know she was in good hands. Problem no. 10. Wrong algorithms in picking, and supporting future young leaders by well wishing organizations and scholarships. Not all who position themselves to be noticed, and/or the society positions them are necessarily the cream of Africa. Environments differ. The West will never understand what goes on in the African institutions. Africa needs to re-look and play a part in identifying real talent that needs to be supported, and shows the propensity to give back to the community.
This was the first phase of my career, when I finally decided to move to South Africa, because this is where most of the consultants and software applications being used in my country came from, or at least overseas brands are being managed from. I decided if I'm not going to be allowed to work on software solutions for my own country, I will move to the source, and be part of the people influencing technology for Africa. It has been some years since I moved, and have indeed had chances to personally write code for some applications that are currently being used in my home country, Malawi, through different companies, which otherwise if I remained at home, I would never have been given a chance to make a difference.
My 8 year journey in the South African software development industry has also been quite an eventful one, with more interesting insights I have gained on the direction of Software development in and for Africa, and will share my experiences again in another article in the future. I am separating South Africa from Africa as a whole, because and perhaps understandably so, this is how this country treats itself. Of course the infrastructure and the way they do some of the things here is a bit different from the rest of Africa. But we all still remain Africans, and are playing or not playing a part in the pace and direction we are taking as a continent for technology.
After all is said and done here's what I believe:
If there was a team of developers in Germany who came up with SAP applications and platforms that currently run our businesses today, if Microsoft can build Dynamics CRM and sell it to us, we can also do something primarily designed and meant for Africa.
If the likes Taylor Otwell can build their own Laravel framework, we can build our own frameworks too, even as far as a language itself, that speaks to our needs as African developers, to be able to solve our unique problems with the kind of infrastructure that we have that is unique to us, and will remain as such for the foreseeable future.
I deliberately did not mention the corruption problem we have as a continent, but I believe we can overcome it, and maybe we can play a part as software developers to help reduce the problem.
There is currently over 1.2 billion people in Africa, and we have a duty as software engineers and I.T. professionals at large to bring these people together. We can provide solutions that work primarily for Africa. While politicians are doing their part in working towards a united Africa, through the African Union, we can actually lead the way in uniting the continent technologically, and the rest will be easier.