Field note / Career series

A Moroccan Developer's Journey

By Taoufiq Lotfi February 8, 2026 8 min read

Illustration — A Moroccan Developer's Journey
Fig. 01 — Career series / 8 min read

In 2014, I was an 18-year-old in Morocco building Android apps in Java while studying at university. I had no idea that in a few years I'd be living in Ukraine, building mobile apps for clients across Europe, and setting up the foundation for everything that came after.

This is where my story starts.


It Started With Hardware

I've been curious about computers for as long as I can remember. When I was around 12, I got into Arduino — soldering wires, blinking LEDs, building small projects. I was more into hardware than software back then. There was something satisfying about making physical things work.

But somewhere along the way, software pulled me in. I got my first Android phone and immediately wanted to build apps for it. Not because I had some grand career plan — I was 14, I just thought it would be cool to have something I built running on my own phone.

That curiosity never stopped. It just changed direction.

Morocco — The Hustle Begins (2014-2017)

I started university at Ibn Zohr in Morocco and immediately started freelancing on the side. Back then the platform was still called oDesk — if you know, you know. It later became Upwork, but in 2014 it was still oDesk and I was an 18-year-old competing for Android development gigs against people with way more experience.

I was building native Android apps in Java. Android SDK, Firebase, Material Design, SQLite for local storage, Retrofit for API calls. Nothing fancy by today's standards, but at the time it felt like I was building real things. Because I was.

The hustle was real. Go to class in the morning, come back and work on client projects until late at night. Managing clients on the other side of the world, dealing with scope creep before I even knew what scope creep was, trying to figure out Google Play Store submission for the first time. Every app submission felt like waiting for exam results.

I learned more from those clients than from any course. Not just about code — about communication. About understanding what someone actually needs versus what they say they need. About managing expectations when a client wants "just one small change" that would take a week. These are things nobody teaches you, you just learn them the hard way.

A stubby cartoon man braces both hands and skids backward as a machine, fed a single small clay-red slip labelled one small change, grinds out a giant paper accordion a week long — the tiny request that eats the whole schedule.
Fig. 02 — The small change, held back by hand

Looking back, I was teaching myself while getting paid for it. Not great money at first, but it was real. And it was mine.

Why Ukraine

After three years at Ibn Zohr, I decided to transfer to Kharkiv National University of Radio Electronics in Ukraine for Computer Engineering. The reason was practical — Ukrainian universities offered solid engineering programs at a much more affordable cost than Western Europe. It's a path a lot of Moroccan and North African students take.

But practical or not, it was still a big move. I was 21, leaving Morocco for a country I'd never been to, where I didn't speak the language, to study a subject in a language I'd have to learn on the fly.

Kharkiv — A Moroccan in Eastern Europe (2017-2019)

The language barrier was the hardest part. Not the cold, not the food, not being far from home — the language. Ukrainian and Russian are everywhere, and while my courses were in English, daily life wasn't. Simple things like buying groceries, talking to a landlord, making friends outside the international student circle — all of it required navigating a language I didn't speak.

You figure it out. You always do.

The university itself was valuable in ways I didn't fully appreciate at the time. Computer Engineering meant computer architecture, operating systems, algorithms, networking, digital signal processing, embedded systems. Low-level stuff that seemed disconnected from the React Native apps I was building on the side.

But years later, when I was configuring CUDA for GPU computing, or writing Dockerfiles, or managing bare-metal Linux servers — that foundation was there. Understanding how things work underneath makes you a better developer at every level. It's the kind of knowledge that web dev bootcamps don't teach, and you don't realize you're missing it until you need it.

The React Native Pivot

While studying in Kharkiv, I made the switch from native Android to React Native. Cross-platform was clearly the future — why build the same app twice when you could build it once and ship to both iOS and Android?

React Native was a game-changer for a freelancer. Suddenly I could offer iOS apps to clients without needing a Mac for native development (well, I still needed one for builds, but the development workflow was way faster). One codebase, two platforms, clients happy.

I managed the full lifecycle. Development, testing on physical devices and simulators, App Store and Play Store submissions, and even over-the-air updates with CodePush — which felt like magic. Push a JavaScript bundle update and users get the new version without going through the App Store review process. For a freelancer shipping updates for multiple clients, that was huge.

The clients kept coming through Upwork. I was building cross-platform mobile apps for people across Europe and beyond, all from my apartment in Kharkiv while studying for my Computer Engineering degree.

It was a grind. But it was the kind of grind that builds something.

The Bridge to Something Bigger

By 2019, I'd been freelancing for about 5 years. I'd shipped apps in Java, React Native, dealt with hundreds of clients, published to both app stores, learned to manage my own time and business. I was 23 and felt like I'd already had a full career.

That's when Veedoo found me.

They were a European digital consultancy, and they reached out based on my freelance work. I didn't apply — they came to me. Five years of consistently shipping apps and building a reputation on platforms had created an opportunity I didn't even know I was building toward.

I said yes. It was time to stop being a one-man operation and join a team. Time to go from mobile-only to full stack web. Time to see what I could do when I wasn't doing everything alone.

I had no idea what was coming next. A war, humanitarian platforms, blockchain evidence systems, an EU-funded project reaching millions of people, three promotions in six years, and eventually a CTO title. But that's a story for the next post.


What Those 5 Years Taught Me

If I could go back and tell my 18-year-old self anything, it would be two things:

Just ship it. Stop overthinking. The app doesn't need to be perfect. The architecture doesn't need to be elegant. The client needs it to work, and they need it soon. Perfectionism is the enemy of progress, and freelancing beats that out of you fast. This lesson has followed me through every project since — including launching a humanitarian platform in 3 days during a war. You ship, then you iterate.

Three panels of the same stubby cartoon man and the same lopsided wooden slab. He sands it on a stool under a wall timer labelled still sanding, then stands empty-handed while the slab slides away down a chute marked sent, then presses one small clay-red patch onto it when it comes back on the return rail with a note clipped to it — ship first, fix after.
Fig. 03 — Out the door lopsided, finished on the return swipe to read

Clients teach you more than code. I learned more about communication, expectation management, and understanding what people actually need from managing oDesk clients than from any technical course. The soft skills aren't soft — they're the foundation that everything else sits on. Years later as CTO, the ability to understand what a client really needs (not what they say they need) is still the most valuable skill I have.

To any young developer starting out in Morocco, or anywhere in North Africa or the Middle East — you don't need permission to start. You don't need the perfect setup. You need curiosity, an internet connection, and the willingness to ship things before they're perfect. The world doesn't care where you're from, it cares what you can build.


I'm Taoufiq — a Moroccan developer, currently CTO at Veedoo and founding engineer at Baseloop. I write about building products, self-hosting infrastructure, and the journey from freelancer to technical leader.

Find me on GitHub, LinkedIn, or at taoufiqlotfi.com.

This is Part 1 of a 5-part series about my career journey. Next up: From Morocco to Ukraine to CTO: Veedoo, War, and Humanitarian Tech.

End of file

Commission / fixed scope / from €8,000

Reading this because you need it built?

A working MVP, live in 30 days. Design, architecture, implementation, deployment, and handover — one accountable builder, the same one behind the systems in this note.