Product and outsourcing are two main areas that almost completely divide the software market. I can say that there is a significant difference in their work. The fact is that by working on a product, by doing it in a company yourself, you get more responsibility, because depending on what solutions you put into this product, it will come to the market. That is, you are fully responsible for how you will live on.
In outsourcing there is no such thing. They give you some order - you work. Yes, seriously, yes, effectively, but within the framework of this order, and what will happen next with it, by and large you don’t care much. Well, except maybe that the customer was not offended and came again for such an order. You are not so deeply worried about what you are doing. If you look at the fact that Western companies are outsourcing to Russia, in general these are not high-tech things. No serious large Western company will give serious tasks to outsourcing. Otherwise, it will be tied to him and will depend only on him. Therefore, the level and class of tasks that have to be solved in outsourcing are lower than those that we have to solve in Yandex as in a grocery company.
In my opinion, the atmosphere here is more creative. The guys are looking for ways to solve this particular problem in an optimal way, applying all that they have in their heads. But, naturally, people are different. Someone likes to be creative, to work on tasks that may not have a solution at the moment. And someone likes stability. Outsourcing will give such stability to a person easily. For example, a bugfix contract for which you must issue five bugs a week is everything. You sit, do, do, do. There are people who like it - to each his own.
But there is also a reverse side of the advantages that exist in the work in a grocery company. Sometimes you get close to some Mylstown, which you have designated, and at this moment you realize that something else needs to be done. Sometimes you have to push the scope of the project. Minus it or not minus, I can not say, but this is different from outsourcing, where you have a rigid framework, and if you don’t get into them, they will give you a hat, because the customer is waiting for you at this particular time. But there is a certainty.
One of the biggest differences that I have seen is the average examination of employees. In outsourcing the main product for which they receive money, these are people who are “sold” to other companies. As a result, recruited as many people as possible. Among him there are people with high expertise, but their percentage is much lower. In Yandex and in the latest company developing its own product, where I worked, they recruited just such people. In such a team it works quite differently.
In outsourcing and grocery companies differently built the process of developing software. At first they tried to estimate everything in advance, to foresee, to calculate. For example, two months could go analysis of some features, which in the end four months wrote and then released. Where development is own, the processes are more iterative. There are some small things that are constantly being rewritten, sometimes redone. There is no such thing that everyone appreciated it for the year ahead and then two more years are engaged in this
Besides, much less bureaucracy. The people describe what they need on Wiki, something in the tickets, which they themselves write. There are no procedures for the long approval of some kind of nonsense. If you need some thing, it is taken, washed down and embedded in the product.
There is a difference in the responsibility of the people who do this. As people in their own development product will write, so he goes. In outsourcing, the people who created the product may not see it soon, or not see it at all, and not hear the feedback from real people on it. The chain from the person who is developing the product is longer here.
Before Yandex, I worked at an outsourcing company and made a very clear difference for myself. A product company can afford to develop products that will improve the quality of life of its users. And since the timing, objectives and how the product will look, determine the people who work in it, they can bring everything to perfection.
In outsourcing, the main mission is customer satisfaction. He puts forward clear requirements for how the product should look, and the outsourcer performs everything clearly in a timely manner, according to the specification - not a step to the left or right. He earns money at the expense of his customers, while many Yandex applications are free for people. Not always money is a fundamental factor.
In a grocery company, there is a much larger and wider field for creativity, because the company itself determines what the product looks like, and engineers can participate in determining these requirements and how everything will work. And programming is primarily a creative process.
In addition, in outsourcing companies everything is based on metrics. There is simply a huge number of different metrics of productivity: the number of lines of code per hour, average productivity, the number of errors per 100 lines of code. The most interesting thing is that when a company does not fulfill the stated requirements for metrics, different tricks are invented to match them. And they are not always objective. Often this turns into the fact that managers in the pursuit of fulfilled requirements force people to work on metrics, which of course has a very bad effect on both the quality of the code and the employees. The grocery company has a main metric - user loyalty. If your product is popular, if the number of people is growing, then everything is good with you. Here you will not be customized, because today in the morning you have to do what we promised to the customer. Naturally, there are some emergency situations when you need to quickly do something, but in general there is no such hype. The main thing to make a quality product.
When you do not work for yourself, you are interested in achieving the goal, not product development. When you work for yourself, you are interested in how the product works. The ultimate goal to bring TK to the end is no longer relevant. You can spit on him, spend more time, but make the product a little better. All the differences between the outsourcing company and the product in this ideology. And the processes depend not on the type of company, but on the company itself.
Firstly, in an outsourcing company there is much more bureaucracy associated with approving what you wrote. First, an internal code review passes, then an external one, then something else. This is pretty annoying. Secondly, customers are often people with another metality, it can be difficult to communicate with them. Well, the very feeling that you are working not on the code written by your comrades, but on the code written by some incomprehensible Hindus, is somehow depressing. For me personally, there are no advantages in working in outsourcing, but I know programmers who don’t like other people very much, so for them the advantage is that they don’t personally communicate with the customer and the people who wrote everything. This leads to minimizing the number of conflicts.
Perhaps it was the specifics of our customers, but when you work in outsourcing, your opinion does not really interest anyone. You are such a robot, which give bugs, but he fixes them. And when you work on a specific product, you can somehow influence what you end up with. Not only in terms of fixing bugs, but also on how the final product will look. Come up with some more interesting solutions even in terms of product design, for example.
In outsourcing, you need to follow the procedures that the customer requires of you. If he wants to work on CMMI Level 5 and write tons of documentation before changing one line, you will do it. If your customer has no process, then you will not have any process. This is also bad, in fact.
When you work in a grocery company or in the same outsourcing, but one is on a project, you can somehow influence the process and add as much formalism as the team is comfortable with - so that it does not interfere, but helps.
But there are advantages to outsourcing. For example, quite often you can travel around the world, live a year in some other country. But some who do not like to go on business trips, believe that this is a minus.
In my view, outsourcing is quantity, and a grocery company is quality. When an outsourcing company finishes a project, it gains nothing apart from profit and little experience. The next project may not be related to the previous one at all, and the code refers to a completely different company. A grocery company develops things for itself, and everything that it produces remains inside and brings quality to everything that surrounds this product. For example, if a new service appears in Yandex, all existing ones will benefit from it. If, for example, Maps are published quickly, the Search wins, because there will be more relevant data in it. If the Search improves, the Maps win, because it is faster and better located.
I worked a lot in outsourcing companies and I can say that the code there is just awful. When I came to Yandex, it was a pleasant surprise for me that the quality of the code here is very high. Over time, I understood why such a hard code review is needed. We make services not in order to quickly give and receive money, but in order to please us and those around us. And this is a very big incentive to work even better and faster, because there is a feeling that you are helping people. Especially if you use the services you produce yourself.
Cons, too. As a rule, projects surrender more slowly, because you have to pay for quality.
Source: https://habr.com/ru/post/233767/
All Articles