In this post I wanted to highlight some key ideas which lie in the basis of the strategy of Miracle Star Ltd. and to spark a discussion regarding the outsourcing software services (and any services) in the area of ML. For all people that will spend some time reading this – thank you and keep in mind, the idea of this post is to provoke you to think, I am not claiming in any way that what I have written is an absolute truth and cannot be questioned. Now let us start with the article 🙂
It is a fact that many companies provide some sort of outsourcing software services such as staff augmentation, end-to-end product development, and others. For years this business model has been successful and provided a sustainable income allowing many outsourcing companies to prosper. Those companies usually do not have their own products (or at least do not have such at the beginning) and completely rely on the outsourcing business to determine their income. There is nothing bad in that as I mentioned – this has been proven to be a successful model. One of the non-detrimental flaws is that the market and the trending technologies change once in a while and those companies have to respond to that, so they can remain competitive. Some of the classical approaches they have used until now include
- Interviewing and hiring new engineers. From what I see such interviews sometimes should happen very fast as high-paying clients need engineers or need something developed – just an observation. Other times, the companies try to be smart and hire people fluent in technologies for which the market may (with a high probability) demand soon.
- Having their own academies and training engineers for the technologies they need.
Let us discuss the other main topic of the article – Machine Learning. A term being which we use quite often as a buzz-word. ML is a tool of the future (and also of the present) which many industries are starting to adopt (or at least are starting to experiment with), so they can optimize tasks in their workflows. Some of the key components of a Machine Learning project are
- ML model/models – the heart of the project – the Neural Network, Support Vector Machine, Linear Regression, or whatever ML model/models engineers train
- ML model DevOps – deployment of the ML model/s
- AML model/models testing
- ML model/models continuous improvement – keep in mind this which may be quite different than what you have already seen in the software development world. AI models are not 100% accurate (nothing in our world is) but they can be accurate enough. One important thing is that if they are not properly maintained – their accuracy may decrease as time passes as they have been trained on data which represents the real world in the past – not in the current moment. Some key terms to look at here are: Domain Adaptation, Out-of-distribution samples, etc.
- Surrounding tools – web apps, mobile apps, etc. at the end of the day we cannot deliver a group of neurons happily communicating between each other but only visible through a console-based app to the end client.
As you see the whole current expertise of many of the outsourcing companies is enough to successfully develop only the Surrounding tools. While to be able to do the others, they have to develop and maintain their own internal ML teams. I would like to argue that outsourcing companies sooner or later should start offering services in the ML domain. Morevoer, most of the current ways they have been using for finding good employees may not work when it comes to Machine Learning Engineers. That is why it worths seeking a partnering company which is specialized in Machine Learning, so the two companies can work together and achieve better results.
Imagine you are an owner of an outsourcing company and you stumble upon a nice well-paid project which apart from a good amount of work on surrounding tools such as maybe a web app, a dashboard, and a mobile app involves the development of an ML model. Now let us describe two possible situations as you will be maybe in one of those
Situation A – You do not offer ML services
You approach the client and say
We will be happy to work on parts of your project! On the other hand, we do not work with ML. That is why you will have to find another company to handle the ML part and you have to manage the communication between the two companies, so the solution can be delivered on time and the ML bit can smoothly integrate with the surrounding technologies.
Owner (or a business developer) looking for a project
I know you may won’t write it like that but if you do write it like that, you will be telling the truth.
Situation B – You offer ML services or have a partnering company offering those
You can say
We will be happy to work on your project! We can deliver everything you need, you won’t have to worry about anything apart from providing us the information and data we need, approving our deliveries, and paying us!
Owner (or a business developer) looking for a project
In more of the cases you should have far higher chances if you are in Situation B rather than Situation A. My reasoning here is the fact that the client will prefer one company for doing everything rather than many companies doing bits of the solution as the more the companies the harder it is to orchestrate their work.
It is my personal view that in future more and more of the projects will involve ML and you will want to be in Situation B, so you will have higher chances of getting projects and sustaining your company. Now let us think about how to get to Situation B if everything which you can offer to the client now is Situation A. There are two main avenues
- Avenue A – you form an internal ML-team
- Avenue B – you work with an ML partnering company
Let us assume you decided to take Avenue A
You start recruiting ML Engineers for your team. As you already have good experience with recruitment, you decide to trust it and contact a recruitment agency. My point is that this is quite risky when it comes to ML.
First, Even if the high-quality AI engineers/researchers are looking for a job and you manage to find them through a recruitment agency – how are you going to interview them? To interview somebody for a position, you should have at least one person in the team already in the capacity of working at this position. Well, if you are just starting the development of your internal ML-division, you stumble upon a chicken and egg problem. One of the options is to use the services of a company which will professionally interview people for ML positions at your company – as it has the expertise to do so (by the way a moment for advertisement – Miracle Star Ltd. does so, so feel free to shoot an email at email@example.com if you need this service).
Second, even if you find a good engineer, who is going to control her deliveries. You need an ML manager. Keep in mind that ML deliveries are a bomb with a mechanism, so that they can explode in a few months after the ML engineer has produced the model, you have sold it to the client and the client even started using it. Imagine the client calling you and saying
Hi, Mr. X
The performance of the model you delivered 2 months ago started dropping and now its 10% less than what it was at the beginning? What should we do?
This actually may be a pretty valid situation. When you make an ML model you rely on past data which is the representation of the real world. That is great but as time passes the world changes, so your models trained on the initial data may become obsolete. This means you need maintenance in the form of proper testing of models (running maybe every day or every week), mechanisms for adapting the model to the changes in the world, etc. Relating to classical software development this means making sure you publish updates of the model on time, so you can keep the model aware of the current state of the world. To do that you will need proper mechanisms for logging the predictions of the model when deployed, analyzing the errors, collecting (sometimes data should be generated as not enough of it can be collected) new data for updating the models.
Imagine the Senior ML Engineer/s you hired to make the project have not been aware of that. There is a good chance of this happening as proper online learning, domain adaptation, detecting and handling out-of-distribution samples are still pretty open research questions for which there are no standardized solutions. ML Engineer’s job is to produce models, but as they write a lot of code to do that they cannot stay on top of the most current research all the time – they just do not have the time to do that. For this you will need to hire ML Researcher/s within your team, so they can produce the right development, testing, and deployment procedures which the ML Engineers should follow. How can you hire a good ML Researcher? Well, once more you stumble upon the chicken and egg problem as you do not have internal expertise to interview an ML Researcher.
If you prefer Avenue B and choose to partner with an an ML-outsourcing company like Miracle Star Ltd. for a partner, then you do not have to worry about any of the problems which we discussed. The idea is that you will work only on the software engineering part related to the technologies you are experienced with and the ML partnering company will handle everything else. As the two companies will face more than one project together, the communication between them is going to become better and better and hopefully at the end of the day it will be as smooth as they are actually one company.
Long story short, the current strategy of Miracle Star Ltd. is to look for outsourcing companies which are willing to look for projects in the area of ML. The partnership between Miracle Star Ltd. and such outsourcing companies will give them the opportunity to handle ML projects without actually building internal ML teams. As in future I expect more and more projects to involve Machine Learning this may help many outsourcing companies to remain competitive without doing serious investments in the fields of Machine Learning.