Fahid Mohammed is a Nigeria-born, UK-based software engineer, university lecturer and PhD candidate at Bath University. His multi-faceted career has taken him from e-commerce to e-health, solar energy systems to airlines. Fahid took the time to share his career tips for developers keen to follow in his footsteps, and some of the lessons he’s learned along the way.
Tell us a bit about yourself and where you grew up, Fahid!
I’m from Nigeria and grew up in a city close to the Niger Republic. I did my undergraduate in computer engineering, and afterwards, I wanted to do a Masters and came over to Bath, in the UK, in 2014. I did a Masters in Software Systems and then went back home to work a bit, as a freelancer for six months, then into full-time work and after that, to the UK again to do my PhD. I’ve been here since 2018.
What was growing up in Nigeria like?
It was fine when there wasn’t any unrest. It’s pretty different from the UK – there’s a lot more space, more running around and outdoor living. And it’s also more school-focused and less social when you’re younger. But when you get into university, it’s more social and less schoolish!
In Nigeria, you start to focus on either sciences or the arts when you enter secondary school, which starts to ship you towards your career path. In terms of my uni study choices, I made these based on what I felt I was good at and what felt like fun.
What were you good at at school?
Maths, physics, a bit of chemistry and technical drawing.
When you were looking through different things to do at university, did you understand what computer engineering was? Or did you have to get someone to explain it to you?
I did have a good understanding because both my parents are engineers! So, at university, I had two options in my mind: computer engineering and computer science. I chose engineering because (where I grew up) computer science was more theory-based and software focused, and I wanted something practical and hands-on.
And how did you find doing your undergrad in computer engineering?
It was a bit challenging – there were a lot of courses, four per semester. It was a five-year programme, with the first year spent on general science, doing chemistry, physics, maths, statistics and so on. The second year was general engineering, where we did courses on civil engineering, mechanical engineering, and electrical engineering to give us a broad overview of the engineering field.
Then, at the end of that year, we did a work experience where you combined civil, electrical and mechanical and moved between workshops, construction sites, and fixing electrical stops in buildings. Once we all got into our specialities and realised what we enjoyed doing, everything tended to flow.
Could you explain what a computer engineer does?
They’re essentially like an electronics engineer. You get to work with electronics and build a computer from scratch (circuits, micro-controllers, smart systems and so on). You get to learn the architecture behind that and how to write the code that controls everything. Basically: how to architect a computer from the ground up.
In what industries does an electronics engineer work, or is it industry irrespective, because computers are everywhere?
Electronics engineering, like computer science, opens up a wide opportunity door. You could work as a network engineer and go more of the electronics route, working with electronics and fixing components. I have friends, for example, who work with traffic lights companies, responsible for building and maintaining traffic lights. At university, they focused more on IC programming and building circuits. And if you’re proficient in software development, you can just branch out to do software engineering. So it’s very diverse.
How would you describe a software developer? Many people use software engineer and developer interchangeably, although they’re quite different.
I tend to not use the word “engineer” with software because of my engineering background. There’s an argument among some engineers that software development is not engineering, because of the strict rules in engineering that don’t apply in development. In engineering, there are a lot of standards and regulations, but in software development, even if these standards exist, we don’t have bodies that enforce them (except in specific areas, like finance, which is highly regulated).
As a result, a lot of software that is rolled out doesn’t really follow standards. So there’s an argument that the term engineering isn’t appropriate because software development doesn’t really follow those stringent rules. Also, when you study engineering for five years and go into the system, you just don’t want everyone to call themselves an engineer!
You definitely don’t! Let’s go back to your career path. So, after you did your undergraduate in computer engineering you worked before going back to the UK to do your Masters?
Yes. In Nigeria, you must do your youth service for a year after graduation, essentially a month of paramilitary training in a camp and then you’re deployed somewhere. After that, I freelanced as a software developer and then worked for a company full-time.
What were some of your learnings when you set out as a freelancer?
Freelancing was a lot about client communication. The one route is when people introduce you to clients, the client tells you their problem, and then you think of the solution. Then, you create a proposal for them, and if that’s what they’re going for, they’ll employ you.
The other route is working for a company that exists. You just go in with a proposal, have meetings to discuss the requirements and how to fine-tune the software to tailor it to their needs, go through deployment etc.
The non-technical skills I picked up had a lot to do with communication, which I think is very important for anyone in the technical field to get good at. I wasn’t much of a networker back then, but I had very creative friends. So whenever I had a project and needed to meet someone, I had a friend do the public part and meet them. He would then give me feedback, and I would ask the questions that I needed to understand the requirements or problem better. He also handled the negotiation aspect, another big part of being a freelancer.
Negotiating is challenging as a freelancer. Once you present yourself as a person, people don’t put the same worth on you as they give to a company. They would rather pay twice the price to develop software with a company versus an individual. Negotiating is complex, and so is drawing a firm line in the sand regards feature development or work. When you’re a freelancer, feature creep is very common, and once you start a project, clients say: “Oh, why don’t you add this one thing? And then this other one.” The project can then drag on forever.
So with feature creep and negotiation, how did you pick up the skills you needed to stop being taken advantage of?
It takes a lot of practice! You get it wrong a lot of times. It’s only when you later see what has been paid for the project is not worth how much of your time and effort has gone into it. Then you resolve that next time you’re going to do something different.
Over time I learned to move away from verbal to written agreements, settling everything at meetings before the work started, and agreeing on the cost of any additional changes beforehand. However, clients still often expected feature changes to be expensed in the regular timeline and forgot that we had agreed to them as additional costs.
What would you advise people starting out in their software careers? Freelance a bit first, or go into structured roles to pick up learnings that way?
Freelancing gives you quite a bit of confidence. But it also depends on what the stakes are for what you’re developing. For example, my first freelancing project before my Masters was a failure. From a technical point of view, it was sound, but from a practical point of view, there were things I didn’t consider. I built software for an airline to keep track of their ticketing. I designed the network for the office and deployed the software. And it worked when you tested it on a little network, but bits of data were lost when it was stored on the server.
I realised the architecture I had taken from its stack was wrong, so I had to change many things and redo more than half of the coding. However, the great thing was that it was more like a testbed environment because I was a friend to the nephew of one of the airlines. It gave me the space and time to learn, and it was okay to make a mistake. That was great! But if you’re thrown into the freelancing world expected to deliver right-first-time, then I think that’s a little scarier.
After the airline project, I began developing software for my parent’s friends. Again, it was much easier on me because these people had a lot of patience even when I got things wrong or delayed the timeline.
After you did your freelancing stint, what did you do next?
My career path is quite strange, as I did my internships in the same company (an internet service provider), where I then went on to work as a support engineer and a network engineer.
I worked with them for several years, starting from my third year at university. After my final undergraduate exam, I continued working for them. I did so parallel to my youth service because it was in the same city. I taught at a university for my youth service, so I didn’t have to commit to working the whole day, more like an hour or two teaching. I worked for them as a network engineer until I finished my Masters, when I resigned. I told them I wasn’t interested in being a network engineer anymore. They were setting up a software development team and invited me to join them and lead the team. Which sounded awesome to me!
They were confident in my ability to do the lead software developer role because they had seen me write code in my free time and build my own software for other things over the years. In addition, because I then had my Masters in software systems, it was an easy transition. After a year in that role, I moved to a non-profit organisation as a software developer.
What did that role entail?
It was a software development role but in Niger. Our team was very well structured and organised. There were teams in different states within the country and across other countries as well. They all had specific projects to deliver on the ground.
One of the things they worked on was polio tracking, vaccine usage and wastage, etc. It was basically tracking how vaccines moved from source to the various treatment facilities and reasons for the leading cause of wastage, and so on so that the government could make better decisions. My role there was to work on the web and mobile apps.
My day-to-day life was getting to work, joining a stand-up meeting, briefing everyone on my tasks and progress, chatting with the other team members and getting more tasks, and then just getting on with development.
It was a great opportunity because there was a lot of learning involved. The company was really focused on people developing themselves and developing skills. Whenever the project took a different direction, we had to sit down with our manager, who analysed what the project required, such as human resources like business analysts and project managers. Then he would tell us what we needed to learn and the timeline for learning.
We would go away and do our own research, get up to speed, and then give feedback on what we’ve learned and how we thought it would help the project. Then, if it all sounded good, we’d continue with the implementation. Sometimes we would have ”tech talks” where one of us would read about a topic/something we were familiar with and then present it to the wider organisation. Everyone could ask questions, and it would help everyone learn.
What were some valuable things you learned during your time there?
I got to look at software development from different perspectives. When I worked in my first software development role or freelancing, I looked at things in terms of the code itself rather than the project. And moving on to this non-profit organisation, I learned a lot goes into everything, and it’s not just the code that matters. You could do many things, like writing the DevOps, which is the merging between development and ops. DevOps makes everything streamlined, and you go from writing code and deploying it in an automated, speedy way without having to do the whole process manually.
I also learned a lot from other sessions, where people came in to teach about communication skills, things about information security, and more. It was great to see how to work in a different environment with a very diverse, international group of people. Distributed working meant I learned to work with team members that weren’t in my country, to work around the time differences and collaborate with those I didn’t see every day and didn’t have access to all the time. I think that was a great takeaway.
In your recent role as a software development instructor, could you share if the people you’ve taught are all from technical backgrounds, or do some include the arts?
They’ve got mixed backgrounds. Some of the students that come over for their Masters at Bath University are from different backgrounds, from music to chemistry, and they’re trying to transition into software development. So it’s great to interact with them and see things from their perspective.
A friend of mine recently switched from being a pharmacist to software development! Because of the pandemic, she realised she needed more job security. If a pandemic happens again, she can’t go into the office to work because it’s a lab-based job. I also don’t think they’re classified as essential. So the chances are, if it’s a small company, you might get laid off.
She felt you have more job security with software development because of the diversity of work – you’re not doing just one thing every day. In my case, I’ve worked for airlines and done projects for solar systems, monitoring how much energy you’re generating from a solar panel to get your generator to start. I’ve worked across health projects for emergencies and school systems – so many different things.
It depends on where you’re working, or if you’re changing from company to company, but it’s definitely not boring, and you get to see a lot and learn a lot.
What is your perspective on why the software development field is growing so much besides the job security side of things?
Companies are moving towards more automated and process-driven ways of doing things, and many are looking into data analysis and artificial intelligence. All these things require people to do the implementation, so there’s always going to be someone that wants software built. Likewise, if teams are becoming services, you need people to develop software to make the services. So there’s always an opportunity.
What are some of the high-growth roles that you see in software development?
From my experience, I would say web development has a lot of growth.
How would you advise an early-stage career professional to move up the ladder and get more senior in their career?
Most importantly, take charge of your learning.
I had a sharp transition from my first job as an engineer to the next because companies use different frameworks and have different standards for writing code. In my first role, software development was based on what I knew, what I had time to learn and what direction the head of the company was willing to go. But the next company had different resources, and how they did things was really different. So, for example, when I moved across, the new company used the AngularJS framework. I had heard of it but hadn’t had time to learn it.
Once I got the job, they said: “Okay. We have a project, and we want you to start working on it immediately with the team.” I had to hit the ground running and learn many things fast because these jobs also come with a probationary period, and I wanted to succeed. Once again, I did a lot of reading and asked questions. There’s always a senior developer that’s happy to help and is willing to explain everything.
I taught myself fast by reading on the side and doing lots of self-teaching. For my first two weeks, I was given a research task, so while doing that research, I was learning and reading the upcoming project’s code. Once I was done with that and given my first piece of code, I already knew the system well enough to make modifications and then test it out to see that it didn’t introduce any flaws.
So feedback from colleagues has been a key part of your learning.
Yes. Another nice thing about some companies, like in e-health, is that you don’t just write your code and push it to the main code – you have pull requests and a review process. So when I’ve written code, I push it off for someone else to review before it’s integrated. And people actually give really useful feedback, like: “this is not how to name a variable; this loop you’ve written over here is going to make this low.” And they give you a reason for what they tell you, such as: “this is not best practice, that is”. And when people point out these things, you learn where to look and understand how the company does things. What is considered good, and what is considered bad. So it’s a lot of learning and a lot of patience.
And when you’re on your own, private projects help you because, as a software developer, the more experience you have, the better. Let’s assume you’re in a company and working on an e-commerce site; you shouldn’t limit yourself to that in your free time. Go ahead with any idea you have in your head and write the code for it! The challenges you face with your project might not be the challenges you will have with your current company’s project. But there will come a time where that experience you’ve gotten from other projects or trying to do something a different way will be helpful.
What’s your advice to young developers on building their brand or public profile? For example, do you recommend building some kind of portfolio of yourself with lots of projects you’ve done in your spare time?
There are different views and opinion groups about public portfolios. I’m in the middle because I have my projects and portfolios, but I only show them when people ask. So, for example, when I’ve gone to interviews and am asked: “Do you have any project you’ve worked on, and can we see the code?” So I always have these to hand and then run them through the product I worked on and show them how I did the code, in what language, the best practices I followed, and so on. However, they just want a glance during the meeting, not go into tremendous detail. So that approach has worked well for me.
What are some of the memorable challenges you’ve had in your career, and how have you overcome these?
The biggest challenge I’ve had to work with would be my health. I have sickle cell anaemia, which I have had since a young age. This means occasionally, I might have to go to the hospital. When you’re in a project or a position where many teams depend on you, that’s tricky. So I try to do as much as possible while I am healthy and okay, so if anything happens, I’m not holding back the project.
The other challenge has been time because there’s always a lot to do, there’s a lot expected of you, and you need time to read and test things out.
Could you elaborate on what you mean by “time challenges” and how you’ve learned to manage these?
When you get assigned a project, the project already exists, and there’s a timeline. We use an Agile methodology, an Agile approach to software development, which is about constant feedback to the client. You need to be involved with the client; clients love to see changes and hear about what’s happening.
There are times during a project when we need to reach a specific point, a deliverable, or a milestone already set. So you must do what it takes to get to that point or be very close. As a young developer, it might be challenging when you’re just starting out because there are a lot of things you need to do. You’re not entirely sure how to do them, so you need to take time off to learn how to do these things.
However, you don’t want a situation where you burn out. You need time out of work to do some work-related reading, but you also need time for your life.
What are you doing your PhD in?
Transparency in artificial intelligence – essentially helping people understand the AI they’re working with so they can know if it’s making a wrong decision. They can then pinpoint where the fault is and trust it more.
From one perspective, AI looks like magic, meaning people are at risk because they’re being given things they don’t understand to help them make decisions. However, it’s not a person that they can argue with or ask: “Why did you make this decision?” So there’s a need for accountability and visible logic in how the decisions are made.
My product is basically looking at whether or not companies have this in place and if the AI that people interact with is transparent enough so they know what is happening. And if it makes a mistake, help them understand that situation better and that a mistake is not necessarily your fault. Mistakes can be a factor of you and your reasoning, an element of your environment, or an aspect of the constraints placed upon you. It can be a factor of the simple act of misunderstanding you.
You need to be able to show people that, yes, we made a mistake, but this is what made that mistake happen. It might be your AI worked in the way it was meant to work, but you misunderstood the answer it gave you, or it could be some constraint from the environment or some regulation, which meant it wasn’t able to do the right thing and used the second best option. This helps to inform developers, enables them to build a better system and helps users to understand what’s actually going on.
What is the real-life application of what you’ll come away with after your PhD? For example, do you plan to start advising companies building AI?
To start, I would like to work in a company that is involved in building AI products. I’d like to be part of the transparency group related to making sure the product and the release is understandable by the users. For instance, if you want to tell someone that this is the best driving route to take because of traffic on that road, you can’t just say: “there’s traffic on this route.” Someone might go there and find out there’s no traffic. You want to tell them and say: “There is traffic on this road based on reports from 70 other drivers.” You want to be able to tell them that we’re not doing magic; we’re not just whipping out answers from the air; we’re using evidence-based decision-making.
And then, after gaining experience in that field, I’d like to be ready to take on an advisory role. I already have hands-on experience in this, which I can take with me.
Do you have any sort of predictions on how the field you’re in is going to evolve and grow in the future?
I think we’re moving into situations where AI becomes more understandable, and it’s clearer what it is doing. So we’re moving towards getting people to really understand what AI is, trusting it better and using it more effectively.
In terms of software development, I don’t know where that is going. On the one side, they’re trying to automate the software development process. There’s something called GitHub co-pilot, which is an AI programmer. So if you’re writing a piece of code, it can help you fill in the gaps. I’ve worked with it a bit.
A few people I’ve chatted with are worried that software developers will lose their jobs, but I don’t think so. I predict there will be a lot of creativity in the software development field, many nice things coming out, and people will work hand-in-hand with AI. Even on its own, software development has room to grow.