Better Programmer (Part 07): Notes on becoming a successful freelance developer

3 novembre 2021, 08:49
Omega J Msigwa
14 103


Freelance is one of the areas that are worth discussing in MQL5 as many developers would like to earn from their ability to code and others would like the challenge and the experience as well. These are the views that have been organized from me and others successful and unsuccessful experiences when it comes to freelancing. Through sharing these experiences, this article is aimed to improve anyone towards their path to becoming better programmers when it comes to freelance. In this article, you will see what worked and what didn't work for me and others just to give you an insight into your independent journey.

become successful freelancer in MQL5


" Don't put in half of the effort unless you're ok with half of the results "

Table of contents

  1.  Do not apply for a job that you don't know
  2.  Do the research
  3.  Avoid putting too much work on your customer
  4.  Stick to
  5.  Avoid sounding technical to your customers
  6.  Be honest with yourself and your clients
  7.  Start with clean code
  8.  You are not only a coder but also a problem solver
  9.  Beware of the customers trying to outsmart you
  10.  Do it well
  11.  Choose a few
  12.  Become their friend

01: Do not apply for a job that you don't know

Do not apply for a job that you are not sure how you are going to do, just because the price is high. Since money is sweet and I believe is the first reason why you decided to become a freelance developer in the first place, it is easy to get persuaded into thinking that you are going to figure and sort things out along the way as you work. To my experience, this mindset does not work in the freelance, especially to serious customers who know exactly what they are looking for and to jobs with tight deadlines.

See, most areas in programming require a lot of work and effort in learning to master them, so thinking that you are going to learn something and be able to effectively implement it several hours is disgusting.

The second job that I did in the freelance was a job to create several indicators, to convert some from MQL4 to MQL5 and to create one Expert Advisor that uses all of them. The job was only 30 $, but I decided to take it. Honestly, I knew that the indicators he wanted were going to be difficult for me to create after he fully explained to me all the logic and what he wanted on the discussion section of the job because I was a noob to the subject of indicators (till this day), because I don't learn them, code them, or use them. As a result of me taking that job, I ended up executing the job in 81 days.

long job execution time MQl5 freelance

If we take the math on how much I was being paid per day during the entire time.

30 / 81  = 0.37 $

I was earning 37 cents per day during the entire time. What a waste of time! I know 81 days sounds a long time but trust me when I say that you won't do it every day. There are some weeks that I did not do anything to it because it was hard and boring and was not something that I wanted to do. Neither did I not want arbitration because I made a mistake accepting the job and I wanted to finish it no matter what.

If you see a job on a certain subject that you are ignorant of and you want to learn, take note of it and learn by doing it outside of the work on your normal learning routines. The same job will probably appear in the future.

02: Do the research.

I strongly agree with my friend Abdul Wahab who is a recent successful developer when he told me.

abdul wahab and omega joctan conversation

You might understand what the job is all about by the glance but you won't be able to understand all of it that easy. That's why it is always a good idea to research the job requirements for each job that you are trying to apply for. Doing this might help you to understand the job you are trying to do in detail, also you will be equipped with the right information that will help you answer the questions that a serious client may ask you to make sure that you are the right person who understands the job.

For example:

work specification example

Before trying to rush for such a job because it seems easy and the price is high, do simple research to identify these two important things:

  1.  Is it possible for me to implement what a customer wants, according to my experience with MQL5 or MQL4
  2.  Is it worth it (the experience & the money).

Doing the research doesn't necessarily mean researching only on google. It also means trying out on your own by practice and critical thinking about the outcome.

03: Avoid putting too much work on your customer

Let's look at the post on the forum that I came across last week

It all started here:

irresponsible developer on freelance example MQL5

It is insane for a doctor to want to fully know about the disease and its cure from a treatment-ignorant person. The same as a developer who wants to know why code doesn't work as expected from a customer.

I love the way Fernando Carreiro replied to the topic when he said

Fernando carreiro response on irresponsible developer Mql5 freelance

If a customer can research for themselves and find out what is wrong, then there is no need for a developer in the first place if you stumble upon a problem that you can't figure out as a developer. Think about how that might be hard for a customer. As a matter of fact, what can a customer do with an answer if he knows it and realizes it is a coding-related issue?

Take full responsibility for anything that happens to your customer's job because that's what you are there to do and you are the one who applied for the job, not a customer.

04: Stick to

It happens several times in the freelance that people post jobs outside the scope of Jobs like converting a pine script, Web licensing EA system, and many others related to those. I don't recommend you to take those types of jobs unless you are an expert in those areas and that is what you want to do in MQL5 freelance.

These jobs often have less to no competition to the extent that you may get tempted into learning those fields so that you can become among the few people to take those jobs the next time.

These jobs are not worth taking no matter what price tags they may have.

Here is why

Since they are outside (MQL5, MQL4, and Python) programming language, they demand you to learn something new. As a web developer also I would not recommend you to learn about all the frameworks, libraries, etc. that you might come across because there are too many of them, not to mention that these types of jobs are so rare in the freelance section which makes it a bad idea to learn about something that you are going to use once in a while.

Another thing is that these jobs do not end up in writing code only, they require additional work. For example:

Licensing an Expert Advisor in a web server form example I gave you before.

If you go to a full solution, you will need a hosting environment on the cloud to host a secure database like PostgreSQL (hosting is not free, keep that in mind), you will need to read and write from the database, something that may require additional web backend frameworks like Flask, express, or Node js … and many processes in between for security measures and effectiveness.

Long story short.

After all the implementations it may still not work at all or the way you want it to work in MetaTrader Platforms.

05: Avoid sounding technical to your customers

90% of the customers in the freelance don't know anything about code or the technical kinds of stuff involved in trading and automated trading systems. So you always want to avoid sounding technical when you are trying to explain to them about something you have done to them. Always use friendly language and they are already familiar with, and your language of expression should directly explain what they want and how you will help them achieve it.

Example of the bad way to have a conversation with a client:

Bad conversation example with a customer on Mql5 freelance

(This conversation is not 100% real, I edited some of the text in Photoshop)

Tell and show your customers what they want to hear and see respectively, nothing more nothing less. This will make them like you even more because you seem to understand them by speaking the language they are already familiar with.

Example of good conversation with a client.

good conversation with a client example

(This conversation is also not real 100% , I edited on Photoshop)

Never talk to your customers as if he is your fellow developer or someone you are trying to teach how to code.

06: Be honest with yourself and your clients

This is the hard part for most developers. When I say that you need to be honest with yourself, I mean that you need to be honest with the prices you offer when you apply for a certain job and the number of days that you are willing to deliver a certain work on the freelance.

It is easy to win the battle of applying for the lowest price and the shortest deadline possible. But that is the best way to lower your value which will subconsciously lead you to less valuable jobs and customers who are price-sensitive, all I can say is that those kinds of jobs don't have a nice ending for most of the time.

I don't encourage applying with higher prices for no good reason (don't get me wrong). But I think it is a good thing for you to evaluate the job and the time it might take you. If you think the job is worth 100$ so be it. I think MQL5 developers thought about this that's why they gave us, developers, a chance to apply with the price we think the job is worth apart from a customer price.

I once remember, I applied for a job to add neural networks to an already made Expert Advisor. The price a customer was willing to pay was from 50$ to 300$. I applied for 250$ for 3 days. I was later rejected by the customer, I realized that he was honest after he send me the message that was like.

" I'm sorry I can't work with you, I'm going for a coder with the best offer, I already found one "

I was curious to know what was the offer that had won the customer so, I asked what was the offer, and the customer replied

" He said 40$ and he is going to deliver the work today ".

The offer made me feel an incompetent programmer. But to my surprise one week later I received a notification on the job section that the customer was looking for another developer to complete the work. I'm not sure why the job ended up in arbitration but something went wrong.

It's not a good idea for you to become the cheapest and fastest option just to get hired in the toughest jobs that you are going to regret soon or later.

When I say be honest with your customer I mean tell them what you are capable of and what they should expect from you, tell them when you don't seem to understand what they want you to do. Being honest will help you earn your clients' trust since you are showing to them that you are this open developer they can trust.

07: Start with clean code

DO NOT create a garbage software sample just to demonstrate to your customers so that they can hire you immediately. Do not quickly code things out just to finish the job and move on to other jobs. Doing so will make your customers avoid you as hell next time, the moment they realize that the product you created for them is crap.

No matter how small a job may seem always do it as if you won't have the chance to do it again. Kindly consider best code implementations and write code that handles exceptions in case it happens and the most important of all, debug it.

Write clean code from the beginning to the end.

Also, don't get lost in writing non-clean code just to demonstrate a product and thinking that you are going to clean it up later. This is a bad habit that may lead to a poor quality product as you are most likely to forget to clean it up when you reach the end of the work.

08: You are not only a coder but also a problem solver

As a developer, you are more experienced than your customer in many ways. You don't have to just code the program according to given work specifications, you also have to help your customers by suggesting what might be the best ways for them to achieve the desirable results.

For example, you may suggest the use of the ATR indicator to set trading targets (Stoploss and TakeProfit) rather than generic targets. 

You can sometime feel free to tell them when you think they are making bad decision and suggest better things that they should try out to achieve the kind of product they want, for example you may suggest a customer to have money management rules in his/her Expert Advisor when you notice that he doesn't have one.

Telling your customer that their idea is dumb is the best way to end up in Arbitration and a sure way to have zero (0) client to work with you the next time in the freelance avoid doing that.

Be careful with your solutions and opinions. Make sure they don't deviate too much from what the customer wanted initially. Stick to what they already want.

Also, make sure that you don't guarantee that your ways may lead to profitable trading and yield higher returns in a short period. You should always stick to the developer side while acknowledging the trader side.

09: Beware of the customers trying to outsmart you

There are several times when you will meet with customers who seem to understand your job better than you do. Some of them might be fellow developers or somebody that has a bit of knowledge of coding from another language or something.

For some strange reasons some these clients will want to outsmart you by telling you what you should do or what you shouldn't do apart from the work specifications. Something like the functions you should code, Libraries you should use, etc.

Since they are your customers in the particular job you should not ignore them, maybe they are right but make sure they don't talk you out of doing the right thing because you can't be sure if they know what they want you to do.

Imagine a doctor trying to operate on the patient, soon as he starts to wash his hands' patient bursts saying to a doctor "You don't need to do all that minor stuff just do the operation, I'll be fine". I believe the doctor knows the consequences of what he is doing so he is the one who should have the final say on what he is supposed to do.

There are many things to code that do not directly contribute to trading but they make our programs easy and safe to use that a less knowledgeable customer may instruct you to not include them in his program.

Whenever a client tells you to not do something or do it the other way, tell him/her the significance(s) of what you are doing and ask for a good to why you shouldn't. The same goes for when a client tells you to do something that you don't think is necessary, if you don't both agree to that situation provide a warning before you do what the customer wants.

10: Do it well

"If you have a good product. You don’t need to advertise. You’ve done drugs? Did you ever see them advertised?"
-- Doug Stanhope

I believe this is the most important thing of all to any programmer that wants to become a successful freelancer in the long run.

If you do your job well you will be noticed by customers and it just happens naturally that you will get a lot of customers.

This is not only because of a nice resume and developer rating that your profile will display but also customers will want to work with you again and they are most likely to refer you to their friends as no customer wants the risk of being in the freelance blindly searching for the right person to do their job.

Going through all successful freelance developers, I have seen nobody who doesn't do his job well.

Make sure you do your best in any job that you get a chance and you will be ahead of the majority of developers that are focused on only finishing the job.

11: Choose a few

"You only have to do a few things right in your life so long as you don't do too many things wrong."
-- Warren Buffett

Applying/Taking to too many jobs at a time will reduce your efficiency in delivering the work and communicating with a client, you will be most likely to give up on any of the work that doesn't seem to go well or doesn't meet expectations since you will have too many options.

The limit for applying to jobs in the freelance section is 10 per 24 hours. I knew that the first day that I tried out the freelance when I applied to 10 jobs with the expectation of getting 8 at least of them. During that time, I wanted to make a quick buck that week so I wanted to try freelancing. As a result, I was rejected in all of them. I was hired the next several days after changing my approach when I applied for only one job.

What went wrong?

Since I applied for too many jobs I wasn't able to commit to one customer and convince him/her that I was the right person for the job, since I also had no resume to hold me back. The same long technical text that I sent to all customers to convince them didn't work.

This doesn't go to job applications only, it matters even more to the job that you are being hired for, it is a good habit to take on a few jobs if not one at a time. Finish that first then move on to the other job. This leads to high-quality delivery rather than high-quantity delivery of poor products that no customer wants.

Choosing a Few does not only go for choosing a few jobs, but it also applies to choosing the kinds of jobs that you are going to deal with,

I have spoken about specializing in most of my articles as programmers, so when it comes to freelance you need to also choose jobs that are specialized in those areas that you are good at and still crave more improvement.

12: Become their Friend

There is no successful business without loyal customers who purchase their goods or services on a frequent basis.

If you want to have a successful freelance, in the long run, you have to consider building friendly relationships with your customers and make it easier for them to want to hire you the next time. 

I hope you can relate to this in real life, where the majority of things you buy, services you use, and places you go are the ones that you trust. You are most likely to buy in a shop of a friend than the one of a foreigner. 

You can easily make a friendship with your customer by adding them to your friends' list that's available on your MQL5 profile. You may also let them know that you are available for them anytime they would like to hire you.

Make it easy for them to hire you by creating a preferred hire-me link in this format


That's it for this article. I believe you have gained something positive that will help you become a successful Freelancer. Feel free to add pearls of wisdom that you found missing in this article.

Multilayer perceptron and backpropagation algorithm (Part II): Implementation in Python and integration with MQL5 Multilayer perceptron and backpropagation algorithm (Part II): Implementation in Python and integration with MQL5
There is a Python package available for developing integrations with MQL, which enables a plethora of opportunities such as data exploration, creation and use of machine learning models. The built in Python integration in MQL5 enables the creation of various solutions, from simple linear regression to deep learning models. Let's take a look at how to set up and prepare a development environment and how to use use some of the machine learning libraries.
Graphics in DoEasy library (Part 85): Graphical object collection - adding newly created objects Graphics in DoEasy library (Part 85): Graphical object collection - adding newly created objects
In this article, I will complete the development of the descendant classes of the abstract graphical object class and start implementing the ability to store these objects in the collection class. In particular, I will create the functionality for adding newly created standard graphical objects to the collection class.
Graphics in DoEasy library (Part 86): Graphical object collection - managing property modification Graphics in DoEasy library (Part 86): Graphical object collection - managing property modification
In this article, I will consider tracking property value modification, as well as removing and renaming graphical objects in the library.
Graphics in DoEasy library (Part 84): Descendant classes of the abstract standard graphical object Graphics in DoEasy library (Part 84): Descendant classes of the abstract standard graphical object
In this article, I will consider creation of descendant objects for the terminal abstract standard graphical object. The class object describes the properties that are common for all graphical objects. So, it is simply some kind of a graphical object. To clarify its affiliation with a real graphical object, we need to set the properties inherent in this particular graphical object in the descendant object class.