Developers Perekrestok.ru. What we do and who we are looking for in teams

Today we want to talk about hiring people in the IT team of the online supermarket Perekrestok.ru and how our work is arranged “inside”. Retail is an industry with its own interesting specifics, and now it depends on our work, whether thousands of people will be provided with products every day. In this post we give the floor to our team leaders, they talk about Perekrestok.ru projects, methods of work, as well as how to get into the team and what they can ask at the interview.



Sergey // iOS-teamlead



Everything that I will tell, concerns development of our new application of an online supermarket. I want to immediately note that one way or another, the vast majority of developers begin their journey in some kind of small startup or in general in outsourcing. This helps them to grow what is called breadth - after all, they are constantly faced with a lot of very diverse tasks and a wide range of technologies.

We have an in-house product team, we are talking about growth “in depth”, therefore we are accustomed to those guys who are interested in this type of professional growth.

We make a product that is used by thousands of people - there are enough different user-stories and behavioral scenarios here, so the requirements for the product are serious. Of course, a classic set for such cases: reliability, performance, extensibility, modularity, maintainability and testability.

To ensure all this, we took the Uber-RIBs architecture as a basis, leaving only the module interface and completely redesigned DI, routing with diplinking, and put a unidirectional data stream on top. While the flight is normal (and interesting), we finish further.

The plans are to make an advanced debug screen with stands, diplinks and a catalog of screens, each of which will allow you to quickly go in and change moki or switch states. Yes, right in runtime.

To speed up the work, we developed our own design system. We pay a lot of attention to the smooth operation of the UI. We support the "dark" theme.

Our team is built in such a way that there are no people who are engaged in something completely narrowly focused, they say, Sasha is responsible for this button, and Pasha is only responsible for the architecture as a whole. In fact, the situation is such that everyone is doing everything, but within the framework of predetermined guidelines and module templates, otherwise we would slide into anarchy from democracy.

Ruslan // Android-teamlead



One of the key development points is software architecture design. The price of mistakes made at this stage is growing exponentially, so our priority is software flexibility, which allows us to meet both business requirements and user needs.

We adhere to the MVI approach, which allows us to reduce the cost of debugging and testing due to transparency and state integrity. The thing is good, but there is a minus: a very, very high entry threshold for a new employee. Therefore, our goal is to lower this threshold. The “Rule of 10 minutes” helps in this, which states that we must explain all our approaches to a beginner in 10 minutes. Even if he has never encountered a unidirectional data stream.

This helped to revise the standard approaches to MVI implementation and to develop our own solution, which turned out faster and, more importantly, easier.

What can I say about the teams. This is a story about “love”, about working together, so we cannot afford to look at a person simply as a set of specific competencies. The man in our paradigm is his function of the future, of who he can become in our team.

Jan // Team Leader, Innopolis



We have so far the youngest team of 10 people, we have been in the project since December 2019, we are based in Innopolis. We have different tasks, we are a de facto cross-functional team working on the B2B segment, back office and shop windows (front-end).

In general, before the creation of our team, X5 already had an office in Innopolis, about a third of one floor of the technopark, but teams from our other networks were sitting there. Today perekrestok.ru is also here.

The most noticeable thing (the remoteness from Moscow affects) is the low level of team immersion in projects. First of all, it was necessary to quickly create a number of processes in his team, while linking them with the generally accepted ones in the company. And also - competent staffing helps.

But there is a bun, the very bun of Innopolis is an IT city, so we had no problems with personnel, the flow of candidates was not only large, but also high-quality.

We looked for people, starting from the stack (we have PHP, PostgeSQL, JS), and from a person’s desire not just to sit and work monotonously, but to make a good product, to be interested in it. Ideally, have your own vision and ability to express a point of view on various issues.

Ivan // teamlead project integration team



Our team exists for about six months, it is the developers (backend + frontend), testers and the leader of the team, now we have reached the level where we can solve any task from the beginning to the end. Despite a short experience, we are trusted both business tasks and technical (related to the main window, interactions between systems, organization of APIs, breakdown into microservices, optimization, refactoring). We are looking for people who will help us solve new problems and will not only possess the necessary knowledge, skills and desire to improve the product, but also share our approach to work.

From time to time, depending on the project, business analysts (and system ones) are also connected. We develop and implement projects that are related to the interaction of our systems (internal and external), as well as to changes in user experience.

If it’s clearer, we did opt.perekrestok.ru (a platform for placing corporate orders, as is clear from the URL), zoo.perekrestok.ru(a separate showcase where you can pick up food for your beloved beast), introduced a mechanism for selecting similar products. And they also made an application for ordering food on foot couriers, thanks to the guys from the mobile development team. In addition, we simplified the choice of the delivery address (it used to be more difficult, yes), slightly sawed the monolith into several microservices, and significantly simplified the release assembly mechanism, which allows rolling out not one release per week, but ten, we try to go towards full continuous integration so that this process became permanent and continuous.

Right now we are busy replacing the API for the mobile application and redesigning some pages of the site, refactoring.

Alexander // teamlead logistics system



We are working on tasks in the direction of delivery and everything related to this. We developed an Android application with which the courier travels and delivers orders. Used by Kotlin and Java. Here lies the big tasks of integration with cash registers and systems for making payments.

Our work concerns the courier application, user interfaces, and order routing - in general, there are enough tasks, and they are really different. For example, for the courier application, we made the REST API, now operations are underway to work on orders, payments, the logbook, route maintenance and incident alerts. For logistics and order routing - integration with TMS (Transport Management System) systems for automatically creating routes and distributing orders, also interface tools for viewing and managing routes on a map, accounting and shipping system for boxes with orders in warehouses from carts and marches to the car courier. And also a detailed implementation of the business logic for calculating the cost of delivery - it also depends on the area and on the specific time period, plus taking the order to the area,in which there is already some kind of order, cheaper. All this is taken into account.

In the future, we will implement a service with an API to encapsulate the entire logic and delivery operation, transfer it from a monolith to microservices. A person who wants to work with us on this will need good knowledge and understanding of PHP, Laravel, PostgreSQL and (preferably) golang. There will also be interface tasks for working with maps and tabular data, here the candidate will need to have good knowledge of HTML, CSS, JS and some kind of framework a la Vue.

We plan to write new tools for working with statistical data and creating reports (postgreSQL, RabbitMQ, MongoDB, PHP) and to integrate with the CAN BUS automobile bus for taking and processing technical parameters and indicators of our fleet.

Dmitry // teamlead team warehouse system



My team is developing the WMS (Warehouse Management System). For the most part this is a backend development in PHP (Laravel), but we are also starting to use Go.
For the database we use PostgreSQL. Here is the main tasks that we solve:

  • Warehouse management: sorting supplies, placing goods in cells, quality control, write-offs and more.
  • Order processing: reservation, creation and appointment of selection tasks, selection of goods by tasks.
  • Integration with BO (orders and master data of goods) and X5 ERP-system (prices, deliveries, write-offs, etc.). For integration with BO we use RabbitMQ.
  • We are developing an application for TSD on Android. The native TSD application opens in webview a one-page application written in jQuery and knockout.js.
  • We develop and maintain operational reports for warehouse employees.

// -



What is a website development team? Now these are two teams of specialists in the field of backend and frontend, whose task is to develop and support the main site perekrestok.ru and all its internal business processes, except for delivery, warehouse (WMS) and mobile API (which other colleagues are focused on).

We are a team of specialists with diverse experience and knowledge: there are already leading experts who have already been formed, and those who have recently started their career in IT and have grown from an intern to a developer. We look after each other, both in architectural solutions and in cross-coding. We are not afraid to turn to colleagues for help if there is any doubt about something. After all, we try to support each other and we know that, having achieved a common goal, each of us will become better both in understanding the product and as a technical specialist.

What I can’t help but wonder at and be proud of us is how strong the motivation is in the team: none of us cares about the fate of the project. Everyone is interested in bringing the task to Production and does not hesitate to communicate on all issues with PM and QA.

We periodically review our roadmap. This helps us to better understand where we are moving and focus on tasks that will bring profit now or in the future.

Roman and Semyon will tell you more about their teams themselves.

Roman // teamlead marketing and commerce teams



Our team consists of team lead and backend developers. We are mainly engaged in the development of the backend part of the window www.perekrestok.ru , its back office (CRM / CMS), as well as the development of a B2B version of the site, opt.perekrestok.ru .

Most of our teams are cross-functional, so tasks are found in different areas. This can be: product search, integration with internal and external systems (ERP to support B2B, our WMS, B2C and B2B loyalty and payment system, recommendations for the purchase or replacement of goods), management and calculation of marketing campaigns, market place, email / sms notification , analytic reports, data feeds and the like.

The following help us in solving most of the tasks: expertise in modern PHP frameworks (Laravel, Symfony, Yii); arms growing from shoulders; ability to profile the work of PHP and SQL queries; understanding the difference between synchronous and asynchronous systems interaction; willingness to share knowledge with colleagues.

We are bold enough hedgehogs so as not to be scared of bare SQL for several hundred lines (yes, there is such a thing). Sometimes we have to go down to the bottom of the legacy code with weak hope and come back from it with the banner of successful refactoring raised. Once we accelerated updating the full text search index 365 times from 1 hour to 10 seconds. We love to profile and delve into application load statistics. And we understand that sooner or later the amount of data and users will exceed the critical mark, and we look towards microservices for the possibility of horizontal scaling and reducing the strong connectivity of the system nodes.

Semen // teamlead website and storefronts



Hello everyone! I’m a team leader, I’ll try to tell a little about the team, tasks and the project itself, which our team is engaged in.

We are working on a showcase project ( perekrestok.ru website ), we also call the project “FD”, which means “front office”. All that the user (buyer) is faced with is FD: search, catalog, ordering, personal account, online payment, various stock mechanics, recipes, banners, etc.

There is a lot of functionality on the site, we constantly add new and modify the existing one. We have a very strong product and design team, they monitor trends and generate interesting tasks for us. In addition to the development of new functions, we are engaged in redesign, creating promotional landings, optimizing and, of course, correcting errors, as well as helping other teams with a review of their merge requests for the showcase project.

For the frontend, we chose VueJS and have been using it for a year now, we are writing everything new on it, and we are gradually replacing the old code. In the backend, we try to get away from using ActiveRecord models that are standard for Laravel, but are too eager for the CPU. Customization of database queries and refusal of unnecessary Reflection gives an increase in productivity by an order of magnitude, which positively affects Time To First Byte.

Now our team is working on an epic - this is a completely redesigned ordering for browsers on mobile devices. Together with other teams, we are engaged in the tasks of optimizing and refining the backend architecture for the possibility of horizontal scaling.

In the team, everyone is strongly involved in the project, when some kind of emergency occurs, then everyone who can connect to solve the problem.

Denis // teamlead third line of support



I lead the technical support team of the third line, we recruit the guys here for the tasks of quickly solving problems on the prod. If something happens with the site, at first this business goes to the first and second lines, and then, if the intervention of programmers is required, they come to us. Our guys have comprehensive competence - how to look at the queue system, analyze errors in JS, PHP, analyze data transfer to third-party services.

We are recruiting comprehensively developed people into teams, as already mentioned, those who are quite stress-resistant, you often have to switch depending on urgency and priority, this should not be stress. Well, you can imagine how support and stress are related in principle.

Errors that need to be responded to can be as varied as possible, from the simplest types - “style or stroke didn’t draw”, up to the fact that “promotional codes do not work” or the order was issued, but the warehouse didn’t receive it, so you need to trace the history , or the amount there differs from the initial one - you need to track the order path and understand exactly where and at what stage something went wrong.

There are also standard things like error "500" or "404" ", you need to monitor and respond to them.

In addition to stress resistance, it is important in such people that they know how to work with frameworks, while they understand how they work and understand them so that they can read code and write it beautifully. To be able to analyze information, not just complete tasks, but think about how this will affect adjacent ecosystems.

In general, the development of the third line is team core, people who know the whole system and understand how everything works, see not only their piece of code, but also understand where else errors may occur. Such people quickly grow up to team leaders; in a couple of years to become a leader from a junior is normal.

Rinat // teamlead development team in Innopolis



When I gather people in a team, the selection is not for specific tasks. I look more at the experience and skills of each specialist individually. I believe that each member of the team has its own superpower, and these abilities are best disclosed precisely when solving common problems in a team. This can be considered a synergy effect.

It was in Perekrestok.ru that I realized the dream - to assemble a team completely from scratch, to balance it with everyone’s skills. The results show that we are very well going, actively joining and helping the main teams in Moscow.

If you look at the requirements for each participant that are put forward, then this is good knowledge in the technology stack. I appreciate when a person not only does tasks in the forehead, but can justify the pros and cons of his decision. I also welcome the broad outlook and involvement in the processes.

We have a lot of work with the database, each piece of code is called hundreds of thousands of times a day. Because of this, the mandatory questions when selecting a team is a deep knowledge of sql and good algorithmic preparation of a candidate for writing code that is optimal in complexity.

A very important requirement is responsibility for our decisions. Because in retail, the price of error can be very high, and everyone should understand this.

Our project is actively developing, every day we break records in attendance and the number of orders. Therefore, we need specialists both in Moscow and in Innopolis. The company’s plans are grandiose, it definitely won’t be boring.

By the way, inside the project is called “XO”. X - Crossroads, O - Online.


All Articles