In this article I would like to discuss two different types of outsourcing and I think that while they are both outsourcing, there are big differences between them. The types are as follows:
- local SW development outsourcing (outsorcing team in same country/city as customer)
- offshore/distant SW development outsourcing (distant countries, sometimes not in the same timezone)
E.Vizija provides, among other things, outsourcing services and we have experience with both types of outsourcing. I would like to point out our experience in each of this two types:
- The outsourced team is physically near the customer
- The external/outsourced team is quite often an extension of the customer’s internal team
- Alongside the on-line meetings there is always physical contact with the customer
In my opinion it is very important that there is a possibility of a physical meeting, because sometimes it is essential, especially at times of "trouble" (deadlines not being met, difference of opinions, when a decision needs to be made…). It is also preferable to be in the same timezone because the morning mood of the outsourced team can become a burden to the internal team tired of the long day behind them.
My experience is quite different when it comes to offshore or distant outsourcing. In my this type opinion needs a lot more input to be successful. In the projects we were involved in, we ran into the following difficulties:
- If not in the same timezone outsourced team can burden the local/internal SW team additionaly in terms that they have extra work when preparing/reviewing work for the outsourced team
- We're all human. After or even during intensive situations, the differences can be settled over a lunch or a beer. I can not emphasize this enough.
- Informal contact also instills trust between the parties involved. The client becomes a bit more than a specification and bug reports. Likewise, the outsourced team becomes more than a group of code-monkeys which repeatedly fails at understanding the specs. They can, with their less-burdened minds, even provide valuable input for the internal team.
- Sometimes distrust for the outsourced team can lead to different (higher) coding standards they are expected to meet. A definite deal breaker there.
In my opinion offshore/distant outsourcing is especially difficult and at least convenient on day-day development of smaller tasks/tickets, bug fixing... (agile development ) There are also difficulties when it comes to approving pull requests from the outsourced team because the coding standards that should be equal for both local and outsourced team are quite often not the same. So merging pull requests is often time-consuming and it can lead to delays and deadlines not being met.
The outsourced team is usually excluded from the constructive debate regarding the development in terms of what are we doing, what problem are we solving, what is the best way to do that. This takes place in an informal way (breaks, lunch, after hours) a lot. The meetings are strictly planned and timed, the sole goal being to offload the work to the outsourced team. There is no opportunity for the outsorced team to earn some "street cred", which would enable the customer/inside team to trust the oitsourced team and vice-versa make the outsourced team not feel scrutinized at every step.
The outsourced team is usually paid less lower than the internal team. There is nothing wrong with that per-se, but it can make the internal team feel superior and the underestimation is difficult to conceal at times (if the effort is made at all).
But we have to distinct the cases when distant/offshore outsourcing can be very succesful. I think this is when outsourced team develops a piece of SW that has very well written specification and there are no elements of agile development present. The client is handed over the solution when the development is complete. The day-day coordination, on-line meetings, lot of pull requests and code reviews are avoided/postponed until the end of the project.
Surprisingly, looking at the final price, I think in most cases there is no significant difference between local and distant outsourcing. There is so much work to be done if distant outsourcing is to be succesful that it simply does not justify the price difference per hour/day.
At the end
I would like to emphasize that we are still very much pro-outsourcing. The examples stated above are haeavly outnumbered by the good things we and our clients have experienced. I just wanted to point out what the difficulties are and why they occur.
SW outsourcing is not some miracle solution for SW development that would minimize development expenses to the minimum while keeping the quality intact. But it can be good, if there is a will to let people do things their way and not micromanage the process.