Thanks to everyone for reading and the attention to this, it’s really encouraging.
Please be careful about any fundraising page in my name (with crypto wallets), they’re a scammer impersonating me by name-squatting my defunct handles on About.me, X/Twitter, and something called Coindrop. Those accounts ARE NOT MINE, they’re owned by someone attempting to scam people using my name and face. My verified profiles are on Gravatar.com and at the bottom of this website. But please do contact me if my profile is of interest, and thanks for the warm wishes!
I come across a fair number of people who ask me how I learned to code. They usually say something like, “which college/university did you study from?” assuming I went to college or university. But that’s not what happened. You see, I never went to college or university. I’ve never even been to high school. I taught myself to code on an Android phone with a cracked screen. I know, this probably sounds like an exaggeration, but it’s not.
How Did I Get Here?
2016, I dropped out of school after writing my grade 9 exams because my mum couldn’t afford to pay for my school fees.1
I always liked books, and after dropping out of school, I started going to the library every day (unlike when I was in school, going every Friday), reading novels, science books, you name it. The library (which is part of an orphanage named Fountain of Hope), felt like a 50 minute walk from where I lived (in this area). At 15 years of age and with nothing else to do, I didn’t mind walking that distance.
I read anything that would catch my attention. This was particularly enjoyable because it felt like I was in complete control of what I wanted to learn. I was never very confident in my ability to speak English during my school days but reading books gave me the confidence. Whatever English I knew then was significantly improved by reading books.
The Construction Job and Getting a Smartphone to Code On
2019, while still going to the library twice a week, I came across a book about computer programming. I thought it was interesting, so I picked it up. At the same time I was also trying to do something with my life. I would work anywhere as long as I got some cash. An old friend of mine who happened to be an office assistant at a contracting company tipped me about a job at one of the companies that his company had contracted. They wanted general workers to work at a hospital construction site. At that time I had already gotten a strong interest in programming but I could only get notes from W3Schools using a keypad phone, an itel it5020, that had Opera Mini browser 4.4.
I would write the notes in a book and then later look at them (like studying). Doing the construction work meant I could save up for a smartphone and actually write the code I had been playing around with in my head.
The pay at this company was K240 ($10.60) per week (excluding Sundays), from 7 a.m. to 4 p.m.2 We were working for K50 ($2.20) per day, minus K10 ($0.40) for lunch. This gave some of the workers the illusion that lunch was provided, when it was actually coming from their pay, and it was not uncommon for some to ask for their K10 and to buy their own lunch.
During lunch, those who decided to eat together would be in groups of at least 2, and then go to a restaurant and buy Nsima3 worth K20. Mind you, it wasn’t the best kind of Nsima you could get, after all, it was cheap.
After about 5 months of working for this company, I had managed to save up around K750 ($34), and got myself a second hand smartphone, an itel S15.
With the new phone, I downloaded Pydroid3 which I used to write and test my Python code, and Termux to get myself used to the Linux terminal.
I had to quit working at the construction company as they started delaying payments and would sometimes pay us less than we had worked for.
2020 - 2021, I was on Facebook then, so I had joined as many groups about programming as I could. That’s how I made friends with Stephen Cafferty. Stephen helped me a lot throughout my Python journey. He became my Python mentor and helped me debug my code, showed me a lot of Python tricks4, and would eventually help me write a draft application and CV for my first job as a Software Developer for Bellingcat. Stephen and I shared a happy moment after I told him about getting selected! I learned the idea of “research first, ask questions later” from him.
In order to code properly, I needed internet, so I would save up K5 ($0.22) to buy 750MB worth of internet data which would expire after 7 days, and if I used it up before the 7 days, I would have to buy the same bundle again.
With this setup, I was able to develop Python programs from scratch, and I developed some OSINT tools like:
- oxdork
- thedevilseye - Re-written and renamed to PyAhmia
- thelordseye
- octosuite5
I started following infosec accounts on Xitter and made an acquaintance with Cyb_Detective. She posted (still posts) about OSINT tools from all over the web, including the ones I had developed. Initially, she did not know I developed programs on my phone. She found out later while we were chatting about an update to one of my programs. She posted about it here. And I can’t lie, it felt good to know that there were people out there who thought I was doing something worthwhile, even though I never thought of it like that myself. This was when I found out that REAL people had been using my tools.
The Bellingcat Opportunity
2021 - 2022, at some point Cyb_Detective mentioned me in a tweet from Bellingcat. They wanted tech fellows, and the best part was, educational qualifications weren’t a requirement as long as you could communicate in English and had the ability to ship code.
I told my friend Stephen about it and he helped me draft an application letter and a CV. I applied to the position and after a week, I received an email about doing an interview with Bellingcat’s technical staff. I was scared and nervous and everything in between, but I would find out about a week later that I got selected to be a Tech Fellow for Bellingcat.
After getting accepted, Bellingcat offered to get me a laptop, but I would only get that together with my stipend which I was to get after 2 months.6 This was exciting for me, but also made me very nervous. I didn’t know anything about Bellingcat at that time, so deep down I felt “this is too good to be true”. In the meantime, I continued working on my phone.
After about a month in, I was working on a Python malware analysis program (which I never actually got to finish, lol), using the VirusTotal API. For one of the malware samples that I had, VirusTotal returned Yara rules as well, which mentioned Florian Roth among other malware analysts. So, I was posting the malware results on Twitter, and when I saw that the Yara rules had usernames attached to them, I mentioned them all in my tweet, as a form of attribution. Then, Florian replied. He asked me about the fact that he noticed in one of my screenshots it seemed like a phone and not a PC. I confirmed that it was a phone. He asked me if there was any reason why I was using a phone, and I told him that I didn’t have a PC yet, then he said that he would like to set up a fundraiser for me so that I could get one. I was hesitant at first, because I was already one month in with Bellingcat and I didn’t really know how to navigate that one, so I asked some people that I was working with at Bellingcat and they told me that there was no problem with Florian setting up a fundraiser for me. I also mentioned to Florian about the fact that I was doing some work for Bellingcat, which didn’t seem to change anything for him. About a day or two later, I was convinced to set up a Buy Me a Coffee account, and I told Florian about it, then he used that. He made this tweet. I got more than enough to get a desktop PC from that Buy Me a Coffee, and I couldn’t eat for 3 days, because I had never seen that much before, or at least that much which apparently belonged to me.
Florian made follow-up tweets after I showed him what I had done with the funds from the fundraiser:
Working at Bellingcat
I ended up working remotely for Bellingcat for 8 months with addendums to my contract which was supposed to last for 3 months. I learned a lot of cool stuff from the people I worked with there.7 I was initially afraid of how I would fit in, but I ended up doing just fine.
I wasn’t given specific working hours at Bellingcat, instead I was told that I could work in my own time, as long as I delivered my work at the end of the month.
After my contract with Bellingcat ended, I started doing freelance work. Which was mostly building web scrapers and data tools.
Volunteering at OSINT For Ukraine
2023, while doing freelance work, I decided to also remotely volunteer at OSINT For Ukraine, developing software, cleaning data, and developing web scrapers. This was a fun experience. I met a lot of cool people who taught me valuable lessons in life and programming. I got to meet some people who were both directly and indirectly affected by the Russian invasion of Ukraine. It was a new experience to see people from different cultures in one place. We had weekly games, and sometimes during meetings we would just chat and joke.
After a string of scheduled power-cuts in my country that would sometimes last for 19 hours, I felt that I needed to get myself a job in order to survive the power-cuts and continue doing my work without interruption. So I decided to focus on that and had to quit my volunteer work with OFU after a year.
Meeting My Current Mentor
During my last days at OFU, I met my current mentor through Florian. Florian sent me a message on Xitter and told me that someone from Google Project Zero wanted to talk to me and possibly mentor me, he also mentioned that this someone was one of the people that donated to me on Buy Me A Coffee. That’s how I met Ned Williamson. Since then, Ned and I have been meeting biweekly, discussing and fixing software issues, personal lives, sometimes politics, lol, comedy. Ned has become more than a mentor to me, he’s become a trusted friend, and I have become one to him. He’s become someone I can talk to when I feel down, and I try my best to comfort him when he needs someone to talk to as well.
Today
I’m currently doing contract development work, which I’m grateful for, but I’m looking for a full-time position where I can contribute to a team long-term and continue growing as an engineer. I’ve learned so much working independently and with Ned, but there’s a depth of knowledge that comes from being embedded in a team, collaborating daily, learning different approaches to problems, contributing to larger codebases, and growing alongside other engineers. That’s the experience I’m seeking.
I’m also mentoring a young developer learning Python. I’m trying to pass on what I’ve learned to someone else while learning something in the process.
When I look back at the past five years, I sometimes think I was just lucky. Ned told me that while luck may have played a role, it was my skills that put me in the right place at the right time. I want to believe that. But where I come from, I’ve seen too many talented people who never got those breaks. Maybe it was both: my skills created the possibility, but I needed the luck of the right people noticing at the right moments.
The Reality of Job Hunting Without Formal Education
I’ve applied to Software Engineer roles requiring Python and/or Rust (sometimes both), Python Developer positions, companies specifically looking for OSINT tool developers, and automation work. Roles where my experience directly applies. But my lack of formal education (or maybe location?) seems to always be my disqualifying trait.
I’ve seen a company drop me from a position that I was 100% a good fit for. I had every technical requirement they were looking for apart from a Bachelor’s degree, but they instead went for someone who was less technically qualified than me. They just had an education from a known college and a Bachelor’s degree.
One company even had me do free work for them as a “take-home assignment” and then, after a week and half of solving the problem, I submitted my work, but they went dark. They never got back to me (even a rejection email would have been nice).
Experiencing this, repeatedly, makes you lose confidence in your ability to do things that you know deep down you’re capable of. Ned once told me that I should be proud of what I have achieved. I try to be, but it’s hard to see the work I’ve done when I’m missing something that most other developers have. I have lost count of how many applications I’ve sent out. Bellingcat gave me an opportunity not because of my educational background, but because I could ship useful code.
Understandably, I know that the job market isn’t in a very good state right now, but try being self-taught without formal education, and from an African country that isn’t very well known in the global tech community then see how it goes for you.
What I Really Want to Say
My reality has been one where I had to work harder than most just to see some change or get noticed. I’m not asking for favours. I’m asking to be seen for my capability and resilience, for what I overcame despite all the obstacles. For what I achieved with the little resources I had, and what I’ve managed to achieve with the resources I have now.
I’m just tired of being judged by educational requirements instead of the proof of my work and where I come from: a dark place, where $2.20 was decent payment for a day’s worth of manual labor.
I have repositories, contributions to organisations doing real work, tools that security researchers use, worked at Bellingcat for 8 months, have a mentor from Google Project Zero who sees something in me, learned English from reading books, and learned to code on a phone with a cracked screen while working construction.
But it feels like none of that matters as much as a piece of paper I don’t have.
I don’t even get interviews. The last one I had was clearly by accident, and I didn’t have the specific experience they wanted anyway. Most of the time, I just send applications into the void and never hear back. I’m being filtered out before anyone even looks at my GitHub, before anyone sees what I can actually do.
I would like to act ignorant and say “there’s probably a good reason why this is happening”, but companies make it so obvious. I just wish more companies would look at what someone can actually do instead of where they studied. Or didn’t study.
The emergence of LLMs and AI coding agents makes me feel even worse about it all. I’ve read articles about companies laying off developers because “AI is as good as an entry to mid-level developer.” This scares me because it feels like I have even fewer chances of getting hired. LLMs and coding agents are tools that should help developers work better, not replace them entirely. But that’s not how many companies seem to view them.
I don’t want to sound entitled, but it’s hard not to feel discouraged. For self-taught developers, it feels like all that effort might not matter anymore. Not because we’re not good enough, but because companies see an LLM as cheaper and easier than taking a chance on unconventional candidates. And for developers who did everything ‘right’, went to university, got the credentials, built their careers, many are being laid off and replaced by AI tools. If even they are being filtered out despite having everything the system asked for, what chance does anyone outside the traditional path have? It feels like the bar keeps moving, and not in a way that rewards actual ability.
I know some of this might sound bitter. Maybe it is. But it comes from real experiences. Countless rejections without explanation, watching companies choose candidates with degrees over candidates with proof, never even getting to the interview stage despite having the skills they’re asking for. This isn’t about one bad experience or one unlucky break. It’s about a pattern I’ve lived through repeatedly, and I needed to say it out loud.