How I started freelancing as a Junior ML Engineer
How I became TopRated on Upwork and landed in the top 10 ML/CV Freelancers from my country. What I've earned, What I've learned, my recommendations.
I’ve always known that programming was my thing and wanted to become a Video Game Developer.
In 2015, I came to Romania to follow my University studies. I started studying Electrical Engineering and Computer Science (EECS), which from the curriculum was a 60/40 split between Programming and E.Engineering.
I slowly found that only a few courses interested me, and have decided to get the most out of the Programming ones by doubling down, studying on my own, and implementing stuff from scratch - ending up skipping other classes.
Starting with the second half of 2016, through hard work and multiple hours of self-study, I got my first 6-month paid internship as a Programmer, where I’ve got to learn and worked with C++.
In beginning of 2017, another paid internship followed, where I worked with C#, Java Spring, and AngularJS. In the second half, I went to the US for the summer.
Ending of 2018, I entered my final year at the University, and I had to choose a project for my Bachelor’s, I wanted to build a Video Game in Unity Engine.
However, I had a colleague who started working on his project early on and showed us his progress.
He was using the webcam and hand gestures to drive in GTA4, something similar to this:
I was sold on the idea, forgot completely about my Unity Game, and decided that I wanted to do Computer Vision all the way.
After a few months, everything aligned and I got the chance to join Elektrobit, a software company providing Software Solutions for ADAS (Adaptive Driver Assistance Systems).
The department I joined, was doing R&D into AI solutions for self-driving such as pedestrian detection, segmentation, vehicle path-planning, etc.
That was my moment, to learn, do and assimilate as much as possible.
The whole year of 2019 I was on full steam, learning Python, Tensorflow v1, Keras, OpenCV, C++, Inference on Edge, Robotics, and 3D Perception.
Finished my Bachelor’s project, a 3D reconstruction pipeline using Machine Learning and Computer Vision, and under guidance, wrote, redacted, and published a research paper in 2020 in IEEE Robotics and Automation Letters.
With everything going this flawlessly, I said - why not push even more?
That’s how I started looking into freelancing on Upwork. At this point, I’ve been working with ML for ~2 years, placing me at Junior Level - plus I didn’t follow the “standard” up-bringing in ML and have jumped directly into Deep Learning and Computer Vision, leaving many gaps in my understanding of ML.
What did my profile look like?
I couldn’t find any screenshots of my Upwork profile description from when I started.
However, here’s how I left it in 2022:
I remember this description came after many finetunes, and looking back now - I’d change it as I’ve got way more experience and skills :)
Takeaway: Listing key projects and technologies in my bio really helped me get replies.
The reason is simple, I’ve learned that clients come in 2 types.
Those who know what they need (like agencies, or technical people)
The ones who are not technical and want a product built.
Listing key projects in my bio helped increase the chances of client #2 to see a similar project to what they want, and send me job invites.
Listing tools and technologies I’ve worked with helped client #1 filter and validate my profile against the Job Description.
How I got my first job
On Upwork, a client submits a job and you have to bid connects to apply for that job.
A connect is a token that helps filter applications, as there were instances of 100+ applications after 1h of the job being posted. The more serious the job offer is, the more connections it might require.
However, due to my inexperience, I didn’t know how to apply properly and after a few failed requests I decided to focus on value first.
I decided to take a few small projects for free, to build my profile - that was the best decision I could take.
There’s this unspoken rule of value first, money later. When starting out, don’t focus on your gain from the get-go, aim to help the other person and build trust.
Soon after, your kindness will be rewarded.
My initial hourly rate was 5$/h.
I’ve offered to help JK, for free on a few tasks, and then, without asking JK offered to increase the rate to 15$/h and insisted on paying me for my time.
Not only did I make my first money, but I also made 3x the amount I hoped to make.
How I improved my job applications
Self-reflection is the best path to improvement.
Looking back to old conversations I’ve had with clients, I saw my flaws in problem-solving and communication, which helped me improve a lot.
Soon after, I started applying to other jobs, and of course - I sucked at first.
I used to put entire Resumes into the dialog window and describe my whole work experience which was a bad practice.
Takeaway: Starting with a professional tone, being concise and direct to the client’s request helped me a ton into fine-tuning my job applications.
Here’s a BAD example of what I used to do:
Hi,
My name is Alex, I'm a senior python developer with extensive ML/Computer Vision experience, as I've worked on multiple Deep Learning & Vision projects, a few being in the field of:
Automotive - Detect Cars/Pedestrians, Predict Image Depth, Object Segmentation ...
Looking forward to discuss further details.
Thank you
Best regards,
Alex RHere’s a GOOD example:
Hello,
My name is Alex, I'm an experienced Machine Learning Engineer.
I have worked on a similar project and I think that my skills and experience will apply well.
My approach would be to get a POC (Proof of Concept) first using OpenCV.
For that I'd try...
For a more generalised approach, ...
For deployment I'd say FastAPI + Docker will be enough...
Let's have a chat and discuss more details, I'll be more than happy to help!
All the best,
Alex R.Takeaway: Be it Upwork or any other platform, addressing client’s problems directly and providing valid solutions would surely differentiate your approach from the rest.
To stand-out from the applications pool, you’ll have to be direct and concise, and provide value with the least amount of words.
How I increased my hourly rate
My progressions were the following:
15 $ → 25$ → 30$ → 35$ → 50$.
I’ve completed 10 jobs on the platform (click), totaling 112 hours, and got 3260$ (after tax) in earnings, which puts me at around 30$/h.
Not much, but valuable, especially for Romania where the minimum net wage in 2020 was ~500$ a month.
At 750$ / (8h per day * 21d per month) = ~3$/h.
As I’ve worked only 112 hours out of 168 (8h * 21d) I made ~10x more from freelancing on short-term projects as a Junior!
During this time, I got the Top Rated Badge with a 100% Job Success score which put me in the top 5 ML/CV Freelancers from Romania who were active on Upwork.
Soon after, I decided to move out of the platform and started focusing on my LinkedIn network, which helped me get other leads and longer-term projects, ranging from 30-50$ /h.
A few priceless lessons
Being an introvert at the core, I’ve always had to push myself to take on new challenges.
These types of scenarios allowed me to focus on the bigger picture and represented a big step forward to the overall landscape.
Being able to accurately:
Charge for your work
Set time estimates
Follow deadlines
Keep in touch with the client
Adapt to dynamic workflows and changes
Know how to handle miscommunication
Knowing when you’re in the wrong
doesn’t come included with the “a good engineer” package, and you’ll have to learn and earn these on your own.
Having adopted these principles, and with my technical skills combined, good reviews and $$ started to pour in.
My recommendations
As you’ve seen, there’s no “right time” to start freelancing.
I’ve done it as a Junior ML Engineer, fresh out of college, with 1.5 years of experience in the field.
However, If I were to do it again, I’d focus more on my communication skills and professionalism from the get-go.
Here’s what I wish I’d known earlier:
Get a solid understanding of your niche
Craft your business image
A nicely formatted and concise resume (focus on the last 3-5 yoe)
Work on your LinkedIn profile
(Optional) Build a portfolio website
Work on assertiveness
Take ownership, build a professional attitude
Learn to communicate with simple and concise terms
Don’t let status levels make you shy in your conversation
Show your work
Start building side projects (technical visibility)
Teach others (bridge tech communication gap)
This plan is the build-up from when I started freelancing and my current focus as a Senior ML Engineer, which helps me in 2 ways:
Enrich Domain Expertise
I selected my niche, End-to-End Deep Learning Systems (which focuses more on building and deploying any ML workloads).
To improve my writing and tech-to-non-tech communication skills, I share insights from my career, in this newsletter.
Work experience, newsletter articles, and side projects build up my business image.
Become cross-functional
As a Senior MLE, I have to work alongside Development, Operations, and Product Teams, thus I need to bridge the technology and communication gap.
Learning and working across the entire ML landscape helps me learn to communicate using appropriate terms in appropriate manners.
I believe that with successful freelancing, tech, tools, and frameworks come second. The focus is on identifying problems, finding solutions, and efficiently communicating the process and outcomes.
Conclusion
This article is an outliner, but I think it’ll be an interesting read for some of you.
If you’re a new reader → please consider subscribing and liking this article :)
I’d love for you to leave your feedback below such that I can get an idea of what matters to you the most.
See you next week
If not specified, all images are created by the author.









