Прошлый опыт Flashcards

1
Q

You wrote in your resume, that you added Grafana in new microservice. What does it mean?

A

After I created new service and moved all required code from old service into it, it was neccessary to setup Grafana here to make possible to see statistics regarding api and some internal metrics of the service, like tests coverage, for example.

So, I installed Prometheus client Go package, copied code related to prometheus from old service, and also modified it, removing not needed metrics and adding few new ones.

After that with help of other developer, who already used to do same task, we configured metrics showing in Grafana. We customized the dashboard, few custom metrics and ensured that all required metrics are shown.

And so, that’s it.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

You wrote that you were working with high-load microservices.
What was the load?
What techniques did you use to work with it?

A

В Wildberries мы с RPS редко взаимодействуем, и точной цифры я не помню.
У нас вообще несколько иной подход к этому.
У нас настроено нагрузочное тестирование, просто каждую ночь оно джобой прогоняется, там тестится нагрузка из топ 5% RPS за какой-то период, и умножается на два, и мы просто следим, чтобы ничего не отвалилось во время нагрузки, и если отваливается то вентилируем вопросик.

– Тестирование происходит на проде?
Не помню, то ли на проде, то ли на stg.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

How did you handle a disagreement with your boss or your collaborator?

A

Well… I have certain set of rules for cases like this. First, this is important to say, that even in case of disagreement, this is necessary to be calm and polite, because rage and rudeness don’t help to solve the situation.

Well, first situation is disagreement with boss. This case, at first, I am trying to get more information about boss point of view. Maybe, I just don’t know enough, and that is the reason. On next step, if I still have disagreement, I am trying to describe my position pros and cons as fully, as only possible, because maybe just my opponent don’t understand what I want to do, and thinks about something different, and that is the source of the problem. And if anyway we didn’t reach consensus, then I usually just do as my boss told me.

If to talk about dispute with my colleagues, then, I do step one and two as I described in first case, but then if we not reached agreement, I usually go and ask somebody more experienced in dispute sphere to look on our situation and tell us what to do here.

Talking about examples of this approach.
This conflict is tightly connected to one of my achievements on my current workplace - when I was implementing new permissions system instead of old one, based on roles.
At first, my team lead and higher managements didn’t want to change current system, because if it works, then why should we change it, right?
So me and other developers looked over tasks, related to adding new roles or changing old ones in our projects, and clearly shown, that with new system, first of all, we will need no changes in projects code for most of cases when we are adding new roles, and we will also need much less changes if we are adding new functionality, that should be accessible only by certain roles.
So, we explained how exactly our changes can help business to save time and money, and after that departament management agreed with our ideas and added roles system rework into list of projects, that should be done as soon as possible.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

What stands did you have on your project?
What is difference between local, stg and prod stands?

A

We had three stands, local, staging and prod.
Difference between staging and prod is that staging is isolated from real users and have mocked data.
Prod is prod and used for delivery of final changes to real users, and staging is used for final testing before release.
Local is almost same like staging, because it anyway connect to same staging databases and services, but you can change program code locally and look how it affect program.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Does your company know that you are looking for a new job? How do you communicate with us during work hours, shouldn’t you be at work? How much work do you have to do before leaving your current job?

A

The company knows. The company is currently looking for a person for my position, and I am on unpaid vacation in order to be able to go through interviews without any problems with my timetable.

I have an agreement that after a new developer is found for my position, I will have to mentor him for two weeks, what means, tell him the basics about the processes in the company and how to do my job, and also answer his questions, and after that the company will allow me to quit in one day, without the need to work off. Therefore, you can consider that I am ready to go start working at any time.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

What was most difficult engineering task you used to solve?

A

I would say that the most complicated engineering task I had to solve was at the university. One of tasks of my thesis project was to create a robot that would be possible to control through the WiFi.

This robot had two microcontrollers, first one is Arduino UNO, which is used to control robot itself and is inbuilt, and second one is ESP32, which was used as web-server to serve a web-page using that you could control this robot.

The problem was, that Arduino UNO didn’t have internet access, and ESP32 could not control the robot motors directly, so it was neccessary to connect them together in order to send commands from one microcontroller to another.

That was quite a lot of work to do, and biggest problem was that these two microcontrollers had different work voltage. Arduino UNO uses 5 volts, and ESP32 3.3.
So, first of all I wanted to somehow connect them using voltage divider, but I had problems with signal reading on Arduino UNO, because voltage level of ESP32 is too low. In theory, it was possible to make it work, but
existing serial data transfer libraries didn’t work for me.

After that I tried to write all required functionality
myself, using analog input of Arduino to read signal from ESP32, but quickly understood that this is not optimal solution.

Finally, I bought logical level shifter and fixed this problem.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Why you decided to leave you current workplace?

A

Причины:
0. Если без деталей, в двух словах, дело обстояло так:
Когда я пришёл в компанию, у нас был один тимлид. Про него ничего плохого сказать не могу, тимлид он был классный.
Где-то через полгода, в конце весны, наш тимлид уволился, а на его место поставили нового.

Новый тимлид привык к другому подходу к разработке, скажем так, к более жёсткому, и он начал перерабатывать процессы в команде, то, как мы оцениваем задачи, и в принципе стало больше контроля и этот контроль стал более навязчивый.
По итогу работать стало гораздо менее комфортно и приятно.

Мы с ним пробовали это всё обсуждать, что как-то то как оно сейчас, не очень хорошо выходит, может, как-то по-другому попробовать, но по итогу ни к чему дельному не пришли по итогу.

Ну и в конце концов, я решил оттуда уходить, потому что не был готов продолжать работать в такой обстановке.

В общем и целом так, если хотите, могу рассказать подробнее.

Детали:
Уфф… Ну, это достаточно объёмная история, смотрите. Дело обстояло так. Сначала в компании произошли перестановки, поменялся PM и руководитель направления. Это произошло почти сразу как я вообще пришёл в Wildberries, буквально через пару месяцев, я чисто только нормально заонбордиться успел.

После этого нашу большую команду, которая занималась кучей внутренних сервисов, взяли попилили на несколько команд поменьше. Я оказался в новой команде, но лид у нас остался старый.

Потом, ещё через несколько месяцев, в конце весны, наш лид уволился из компании. И вот это была поворотная точка. До этого момента всё было просто отлично, а вот после начались какие-то мутные события. Ну, в общем, наш лид ушёл, а на его место пришёл другой, новый.
Новый лид, судя по всему, привык к другому подходу к работе, к более жёстким процессам.
И он начал закручивать гайки и выжимать из разработчиков всё что выжимается, и буквально за пару месяцев полностью перевернул все процессы в команде.

Вообще, я что хочу сказать… Вот существует определённая договорённость, определённый социальный контракт в команде. Между разработчиками, и тимлидом. Если его пытаться формализовать, то звучит со стороны разработчика он звучит так - ты конечно главный, я тебя уважаю, я тебе подчиняюсь, но во-первых, я не твой слуга, я не твой раз, мы оба свободные люди и в этом плане мы равны, и что я со своей стороны делаю свою работу в срок и качественно, чтобы тебе никто ничего не мог предъявить за то, как ты руководишь, а ты со своей стороны тоже ко мне подходишь с уважением, и делаешь так, чтобы у меня были хорошие условия и отстаиваешь какие-то мои интересы в противовес тому же продакту, которому нужны фичи, желательно ещё вчера и вообще все какие смогли придумать.

Старый тимлид этот договор соблюдал, и при нём всё было просто прекрасно, как я уже говорил, там жаловаться не на что. Но новый, то ли этого не понимал, то ли ему просто было всё равно, но в этом плане он на нас клал.

Сначала по его инициативе отменили day off, и если раньше можно было за год пять дней взять в любое время отдохнуть, главное чтобы по итогам спринта таски за дедлайны не заходили, то теперь такой возможности не стало.

Потом у нас отменили оценку в стори поинтах, и ввели оценку в часах. То есть раньше у нас наши таски оценивались из расчёта 10 стори поинтов за спринт, где один стори поинт это плюс-минус от 4 до 8 часов, то потом стали считать из расчёта 80 часов в неделю, которые надо раскидать по таскам.
Да и вообще, стало некомфортно работать, лид стремится максимально занизить сроки задач, и каждый раз это какой-то эпик батл. Типа, почему 8 а не 6? Почему 4, а не 3? Почему 3 а не 2?
Из-за такого подхода у нас выросло количество багов в коде, да и вообще качество кода упало, и постоянно с его стороны какие-то разбирательства, по типу, почему баги, почему не уложился в срок, и постоянно вот эти претензии.

В общем, я ещё тогда уже начал чувствовать что я это всё не вывожу, морально устаю и выгораю
Я пробовал с ним это обсуждать, что это всё как-то слишком, а можно не нужно, и всё в таком духе, но по итогу ни к чему дельному мы не пришли и всё осталось как было

Мы с ребятами пробовали писать PM, стучаться к руководителю направления, но нас либо вежливо игнорили и кормили завтраками, либо в конце когда я уже на общем созвоне эту тему поднял, сказали что вот теперь так работаем, и ничего менять не будем

Я уже тогда задумывался об уходе, но всё ещё надеялся, что какое-то чудо случится, и всё поправится, и чудо правда случилось, правда не то, на какое я расчитывал.

В общем, я на время этапа калибровки во время осеннего ревью взял себе отпуск на пару недель, чтобы чуть отдохнуть от всего этого, потом после отпуска прихожу, у нас созвон с тимлидом, по итогам ревью, он говорит, у тебя PM, то есть частичное соответствие ожиданиям. То есть не выше ожиданий, не даже соответствие, а ниже. И это при том, что я как раз в том периоде перед ревью втащил в компанию, по крайней мере в наш отдел, крупную переработку системы ролей, которая значительно оптимизировала все связанные с этим таски.
А до этого, на предыдущем ревью, у меня не было никаких таких невероятно выдающихся достижений, просто тесты на сервисы наклепал, но мне тогда поставили ME, то есть соответствует ожиданиям.

Ну так вот, я спрашиваю у него, Максим, почему такая низкая оценка, у меня же вот достижение, вот достижение, вот достижение, вроде нормально поработал.
И он мне тогда сказал, что это всё конечно хорошо, но как-то всё равно недостаточно, и вообще мне надо лучше стараться, чтобы получить оценку повыше.

И я тогда так оху… Очень удивился с этого, и решил что наверное, компания моей мечты выглядит как-то по-другому.

  1. Наш департамент по большей части решили переводить в офис, а я в офис не сильно хотел, да и вообще я изначально приходил на удалёнку, и не было желания что-то в этом плане менять.
  2. Я раньше жил не в Москве, а в другом городе, сильно меньше.
    Когда я устраивался, мне дали относительно Golang разработчика не очень большой оклад из-за этого. Тогда меня это не сильно беспокоило, потому что в провинции и в самом деле и цены на всё пониже, да и в принципе для меня тогда главным плюсом при устройстве была возможность поработать в большой компании над high-load проектами и изучить все связанные с этим технологии.
    Потом я переехал в Москву, но оклад мне не пересмотрели.
    Точнее, после ревью мне его повысили, но это всё равно сильно меньше чем у всех моих знакомых с плюс-минус тем же опытом.
    Я пробовал это обсуждать, несколько раз подходил, но ничего внятного мне не сказали.

По итогу решил искать другую работу, потому что меня текущая зарплата не очень устраивает, а подвижек в этом направлении со стороны компании не предвидится.

  1. Наш отдел реформируют, и сотрудников переводят на корпоративные ноуты.
    Против самой идеи я ничего не имею, но во-первых, там выдают маки, а я на маке работать не люблю, я привык в Windows, и хочу работать на нём, а во вторых на все ноуты ставят трекеры, а для меня это красный флаг в компании, нет никакого желания работать с поводком на шее.
    Я пробовал обсуждать это с начальством, но мне сказали что тут вариантов не особо много.
    Ну и по итогу я был вынужден уйти из компании из-за этого.
  2. В компании идут реформы, и сотрудников в принудительном порядке переводят на корпоративные ноуты.
    Я против самой идеи ничего не имею, тем более что мой личный ноут с которого я до этого работал, как раз сломался, но есть две проблемы.

Во-первых, ноуты все на винде, а я привык работать с мака.
Винду я тоже уважаю, и в игры с неё удобно играть, но для работы всё-таки лучше мак.
Это первая проблема.

Вторая проблема заключается в том, что в нашем отделе хотели при выдаче самих ноутов ещё и тайм-трекеры на них поставить.
Если честно, я считаю что это кринж, и вообще тайм-трекер в компании для меня красный флаг.
Я несколько раз пробовал обсуждать это с начальством, но по итогу мне сказали что тут вариантов не особо много, либо корпоративный ноут с трекером, либо переводиться в офис.
Я такого прикола не совсем понял, ну и по итогу к сожалению пришлось уйти из компании.

  1. Первые полгода всё было более-менее ок, а потом в отделе пошли перестановки, реорганизация команд и процессов.
    По итогу я оказался в другой команде, точнее, нашу предыдущую команду разбили на несколько более мелких, людей распределили по новым командам плюс наняли ещё новых.
    Проблема в том в новой команде идут постоянные овертаймы, куча проектов, а мне это ни разу не нравится.
    Я ничего не имею против овертаймов
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

What did you like/dislike about your current job?

A

Firstly, the current team. They are all very good people and it is a pleasure to work with them.
Secondly, the organization of processes within the company and the number of issues that have already been resolved. Literally everything is set up here: there is a service for CI/CD, linters on all projects, full documentation on all issues, a technical support service that works well. To be honest, it is very difficult to think of something that could be improved within the entire company.
And finally, I really liked my first team in terms of process organization.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Назовите 3 своих положительных качества и 3 отрицательных.

A

My disadvantages…
I would say, that first of all, I tend to worry about things and double-check everything several times. In any matter that is important to me, I want to be 100% sure. This sometimes bother me because I am overthinking about simple things.
Second thing is that I have an optimistic planning bias - if I’m working on a task that I haven’t worked on before, I tend to underestimate the time it will take to complete.
Finally, I would say that my downside was previously that I believed that there was only one way to do everything right and that everything should be done only this way and no other way. For example, if we are talking in the context of development, then you need to use the same code style everywhere, the same frameworks, etc. But over time, I realized that not the whole world is divided into black and white, and that there may be situations in which the decisions that I consider wrong may be optimal.

My strong side is that first of all, I am not afraid to work with new technologies, I like learning new things.
Secondly, I also feel responsibility for what I am doing and for the project. As example, on my current workplace … (рассказ про внедрение новой системы ролей).
Finally, I would say that I am transparent. I am always trying to make my team and especially team lead know about current state of my tasks, estimates and possible problems. I think, this is must-have skill of every good developer.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Imagine that you have been given 2 tasks with the same deadline, but you will only be able to complete one on time. What should you do?

A
  1. I’ll go to the team leader and tell him about it, ask him to indicate which task to do and which can be moved.
  2. If both tasks need to be done at any cost, then I’m ready to work extra, maybe on the weekend, but in return I’ll ask for a couple of days off after the tasks are done.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Do you consider yourself a good employee? Why?

A

Yes, I think I am a good employee.
My answer is based on feedback from other people and especially from my team leads. Most of feedback I ever recieved was positive, and even if sometimes somewhere I had certain difficulties, I could quickly fix it.
Second, is that during my career I passed two reviews on my previous workplace and two on current, and every time after review I was receiving a salary raise and good grading. Probably, if I was a bad employee, I won’t receive it, isnt’t it?

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

What grade of developer do you consider yourself to be? Why?

A

I think that I am developer of Middle or Middle plus grade.

Why… That is complicated question.

To make long story short, first of all, I have extensive experience. 4 years is something, that is not possible to ignore. I was solving different tasks, worked with many technologies, and I think, my technical skills are great.

Second argument is my grade in current company. I am proud middle developer. I think, if I wasn’t a middle developer, probably I won’t be graded so.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Why do you want to work for our company?
(Какой вы видите идеальную работу/руководителя/компанию? Что вы ждёте от этой работы? / Что ищете в новой компании?)

A

Смотрите, я бы разделил свой ответ на две части.
// Общая часть:
Во-первых, я хочу сказать, что самое важное для меня при выборе компании, это команда. Это важнее стека, тасок и даже в определённой мере это важнее размера оклада.

Потому что твоя команда - это люди, с которыми ты будешь взаимодействовать каждый день, и очень важно чтобы это взаимодействие было уважительным и комфортным, просто потому, что если это вопрос уже здоровья, а нервы у меня не бесконечные.
Поэтому, при выборе компании, первое что для меня важно, это именно команда. Если в команде какие-то токсичные люди, то я из такой компании скорее всего очень скоро уйду.

Однако, к сожалению, команда, это то, что чаще всего ты можешь проверить только когда уже начал работать в компании. Ну то есть, я не бабка Ванга, у меня нет сверхспособности просканировать компанию и предсказать, токсики там или нет.

Поэтому, при оценке компании для работы до момента, пока я туда ещё не устроился, я опираюсь на другие факторы.

// Если большая корпорация:
Например, для меня важна стабильность и карьерный рост.
Я не хочу часто менять работу, для меня это каждый раз большой стресс, а я это не люблю.
Поэтому я хочу развиваться в рамках компании, и хочу расти, как минимум в синьор разработчика, а в перспективе возможно и в тимлида.
И в этом вопросе, кстати, мне ваша компания очень подходит, потому что я вижу в ней для себя перспективы в этом плане.
- I want to grow, in perspective of few years I would want to become a senior developer and maybe later even team lead. I want to take more challenging tasks, learn myself and teach others.

// Если аутсорс:
Я, если честно, успел немного устать от однообразия задач, что на предыдущей работе, что на последней. Я бы хотел поработать над разными проектами, с различным стеком, всё попробовать и набраться опыта с разными технологиями.
И в этом вопросе, кстати, мне ваша компания очень подходит, потому что я вижу в ней для себя перспективы в этом плане.
- I want to work on different projects on different stack, I find this interesting for me and don’t want to stay on same project forever.

// Если у компании гибкий рабочий график
- Ещё для меня важна гибкость. При выборе я буду в том числе смотреть, насколько свободный и удобный рабочий график

// Дополнительно:
- Не хочу видеть переработки

Базворды: рост, развитие, изучение, больше, лучше, учить

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

What motivates you in your work?

A

I am motivated by complex tasks and the opportunity to find effective solutions.
I like to dive into tasks, understand the nuances and find optimal approaches.
I also enjoy understanding that my code and solutions bring real benefits to users. When I understand that my work helps people or improves business processes, I feel great
In addition, in my work I am motivated by learning new things and growing as a professional.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

How much do you know about technology X?

A

I know technology X at 8.

I think so because at work I had no difficulties with understanding the language and writing code in it, but I understand that I may miss some details of the implementation of certain mechanisms, and that there are people who can probably give me a lecture on this, so I cannot rate myself at 9-10, and I think that 8 is a fair assessment of my abilities at the moment

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

How would your colleagues describe you?

A

I think they would say I’m a good and responsible developer, but they might mention that I sometimes make an optimistic planning error, underestimating timelines on tasks I haven’t worked with before, and that I occasionally go into too much detail when explaining tasks I’m working on. Additionally, I think they would note my resilience under pressure and patience—it’s not easy to get me upset.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

What was the biggest or most recent failure in your life, and how did you resolve it?

A

At my previous job, around my second year as a developer, I was working on improving a scheduling panel for students, where they could set up their defense slots for assignments, add information about their position in queue, and other related details.

During an update, I merged the develop branch into my own and resolved conflicts, but I made a mistake in resolving one of the conflicts. As a result, the button to cancel a defense session stopped working. This meant students could sign up for defense sessions but couldn’t cancel if they needed, and that was a serious problem.
I didn’t notice this, and my task was merged.

Fortunately, the bug didn’t reach production, because shortly afterward, another developer discovered it while working on their task, and I quickly fixed it.

After this incident, I started double-checking my merge requests more thoroughly, especially when resolving conflicts.

18
Q

What will you do if you miss a deadline?

A

Transparency and proactive communication are key. If the task is highly important, this is okay for me to put in extra hours or work over the weekend. However, after the release, I would ask for a couple of days to rest.

19
Q

What will you do if your manager gets hit by a bus?

A

It would be quite sad, of course, but in well-organized companies, such incidents shouldn’t stop work.

I would continue working on my planned tasks and connect with colleagues and higher management to determine the next steps.

We might redistribute the responsibilities of team lead among the team to keep things working.

20
Q

Why should we hire you? (Почему мы должны взять именно вас)

A

I am a highly skilled engineer with solid experience.

I’m independent and capable of organizing my own development process, requiring minimal time from colleagues.

I’m also fully transparent with my team, and I keep it updated on my tasks, progress, estimates and blockers. Throughout my career, there hasn’t been a single instance where my team didn’t know what I was working on or why.

Lastly, I am proactive and always look for ways to improve company processes and systems to make them more efficient, just as I did in my previous role.

Мне кажется, мои навыки вам подойдут, я в принципе те задачи, которые вижу впереди, из описания вакансии, из того что вы описываете, в принципе мне понятны. Само собой, надо будет подразобраться в деталях, но в общем и целом всё отлично.

21
Q

Why did you choose IT?

A

First of all, I chose IT because I’ve always loved coding. Even in school when we just started having computer science classes, it quickly became my favorite subject. It truly became my top subject in eighth grade when we began coding in Python instead of just working with HTML and CSS in seventh.

I really enjoy solving problems and seeing my code work as intended.
In fact, once except for lessons at school, I decided to write a program for a niche hobby I had - military-political simulation games on social media. These games bring together a group of people who role-play as leaders of fictional nations on a drawn map, describing their actions in posts. The game’s administrators then judge the results of these actions.
It’s not very accurate way, and I saw an opportunity to add some objectivity by building a tool, which is some kind of a calculator for turn based strategy.
This program could track different metrics like population, education level, and industrial strength for each country as the game progressed. This made the game more structured and fair.

Anyway, after high school, I enrolled in the top technical university in Estonia to study programming, where I really got to dive deeper into the field.

22
Q

Do you have any offers or parallel interview processes?

A

Yes, I do. I currently have one offer in hand, and I’m waiting for a response for another, and I have two technical interviews scheduled in the next few days.

Job searching is very important to me, and I take it seriously.
I really don’t like to switch jobs often because it brings a lot of stress in my life, so I want to make a well-considered decision now and choose the best opportunity of a job, where I can calmly continue working for the next few years.

23
Q

What are the last books you read?

A

I am now in process of reading Code Complete from Steve McConnel
In few words, this is book about how to become better programmer.
I started reading it beacause one of my friend who already read it, recommended it to me, as extremely useful book.

I would want to say, that book itself has quite a lot of water and some thoughts can be repeated for few times making this book longer but not providing unique information, but on the other hand, it provides you ideas that lie in basis of modern programming.
For example, the idea that when you write code, first of all, you write code for other people, not for computer. Because you write code once, but later other developers will read it many times, so this is extremely important to make it understandable and easy to support.

Or, don’t use nested loops with depth of 3 or more.

Or, select one style for your code and follow it.

And there is quite a lot of other useful thoughts.

24
Q

Tell me about a time at work when you had to do something outside of your regular job responsibilities.

A

Once at work, we were in a situation where we only had one front-end developer on the team, because one of them resigned from the company and we were in the process of hiring a new one.
It so happened that our front-end developer got sick, and he had an important task related to multiple document signings with a deadline soon.

Since I had been a full-stack developer at my previous job and had experience with front-end work, I was asked to finish this task for them.
Of course, I had some challenges, because the front-end setups were differed between my previous and current jobs, but I already knew most of what was needed, so I was able to successfully complete the task.

25
Q

How do you feel about overtime?

A

In general, I don’t approve of overtimes because if it’s common in a company and not an exception, it’s a clear sign that planning in company is poorly managed, which is not good.
However, I understand that situations can be different, so if there is something truly important, as exception I’m ready to work overtime, including weekends if necessary.
In return, though, I would request a couple of days off after the issue is resolved.

26
Q

Tell me about your experiense / Tell me about youself

A

Меня зовут Алексей, я Golang разработчик с более чем 4 годами опыта в построении надёжного и масштабируемого бэкенда.
Мне нравится решать интересные и сложные задачи и оптимизировать процессы.

А теперь, пару слов о компаниях в которых я работал.
Моё последнее место работы это Wildberries. Я думаю, про эту компанию слышали.
Я за время работы там успел поработать в трёх командах. В двух из них достаточно долго, в третью меня переводили временно в помощь.
Первая команда это большая команда внутренних сервисов, которая у нас была до реорганизации нашего отдела. По сути, мы пилили почти все внутренние сервисы, у нас там были и сервис по работе с документами, и ЛНА, и переработки, и отпуска, и обходные листы, и ЦРМ для найма, и стафф портал, и ещё куча всего.
Там была огромная команда, человек двадцать.

Я там успел поработать буквально пару месяцев, только успел как следует заонбордиться, по сути, как работу отдела начали реорганизовывать. Нашу команду разделили на три команды поменьше, кого-то наняли, кого-то уволили, кого-то ещё что, в общем, по итогу я оказался в команде поменьше.
Там было восемь человек, кроме меня ещё два бэка, два фронта, тестер, бизнес аналитик и собственно наш новый тимлид.
По сервисам нам упали собственно сервис документов, сервис Локальных Нормативных Актов и сервис по переработкам.

I personally worked in internal development departament. We are responsible for all internal services of the company, for example, for document management, overtimes, vacations, hiring etc.
In the middle of my work in the company, major changes related to us happened, so my experience in the can be divided into two parts.

In first part of my experience, I worked in large team of 20 people. But, after almost eight months, our departament has got a new head. New head decided to reorganize departament structure, and as a result, our team was divided into three smaller ones. As a result of the reshuffles, dismissals and hiring of new employees, I ended up in a new team, consisting of three backend developers including me, two frontenders, tester, business analyst and new team lead. And so, I continue working in this team up to today.

The company’s backend is developed on the microservices architecture. In process of development of our services we use various technologies. Backend of our services is written in Golang. We use PostgreSQL and Clickhouse as databases, Kafka as message broker, and Prometheus and Grafana for metrics collection.
Frontend is developed using Vue 3 based on JSX.

Now, a few words about my achievements. I would say, that there are four major things that I could notice.

[Rework of roles system]
[Addition of standart PDF automated generation]
[Tests]
[Separation of large microservice into separate microservice]

Now, couple of words about my previous workplace.
We were developing a plugin for Moodle, which is learning system used at university. The purpose of this plugin is to simplify processes for courses related to programming. It provides functionality for creation of tasks, that could later be automatically tested and later defended by students.

Originally, that was a project based on monolith service developed using PHP and Laravel on the backend, Vue 2 on frontend, and MySQL database.
But later, they had already begun to transform it into the form of several microservices written in Python.
So, by the time I came to the project, it consisted of 5 microservices.
First one was this old service based on PHP, where we kept main plugin logic related to tasks, students, teachers and defenses management.
Second was Python based service for testing students submissions.
Third was another microservice, which purpose was to gradually replace PHP service.
Fourth service was just a frontend part of the application, which we started from Vue 2, but later moved to Vue 3.
Fifth service was a gateway service, providing single API access point for front service.

To sum up, we as developers were slowly migrating old functionality from PHP to Python, and also adding new features, of course.

Talking about this my work I can highlight two really valuable achievements.

[Integrated new internalization system]
[Developed new commenting system]

Well, thank for attention, I think that is all. If you have any questions, I am ready to answer them.

My name is Ilja Kuznetsov, I am Golang developer with over 4 years of experience building scalable and reliable backend systems. For more than a year my focus has been on developing high-performance applications using Golang and related instruments.
I enjoy working on projects that challenge me and solve complex problems.
Also, I successfully graduated from Tallinn Techical University with bachelor degree.

Now, a few words about companies I used to work in and my achievements.
My last workplace is Ozon Tech. Ozon Tehch is a tehnical branch of Ozon, which represents one of the largest marketplace, delivery and banking businesses across all contries of Community of Independent States.
In Ozon Tech, we develop all digital infrastructure for all these businesses.

I personally worked in internal development departament. We are responsible for all internal services of the company, for example, for document management, overtimes, vacations, hiring etc.
In the middle of my work in the company, major changes related to us happened, so my experience in the can be divided into two parts.

In first part of my experience, I worked in large team of 20 people. But, after almost eight months, our departament has got a new head. New head decided to reorganize departament structure, and as a result, our team was divided into three smaller ones. As a result of the reshuffles, dismissals and hiring of new employees, I ended up in a new team, consisting of three backend developers including me, two frontenders, tester, business analyst and new team lead. And so, I continue working in this team up to today.

The company’s backend is developed on the microservices architecture. In process of development of our services we use various technologies. Backend of our services is written in Golang. We use PostgreSQL and Clickhouse as databases, Kafka as message broker, and Prometheus and Grafana for metrics collection.
Frontend is developed using Vue 3 based on JSX.

Now, a few words about my achievements. I would say, that there are four major things that I could notice.

[Rework of roles system]
[Addition of standart PDF automated generation]
[Tests]
[Separation of large microservice into separate microservice]

Now, couple of words about my previous workplace.
We were developing a plugin for Moodle, which is learning system used at university. The purpose of this plugin is to simplify processes for courses related to programming. It provides functionality for creation of tasks, that could later be automatically tested and later defended by students.

Originally, that was a project based on monolith service developed using PHP and Laravel on the backend, Vue 2 on frontend, and MySQL database.
But later, they had already begun to transform it into the form of several microservices written in Python.
So, by the time I came to the project, it consisted of 5 microservices.
First one was this old service based on PHP, where we kept main plugin logic related to tasks, students, teachers and defenses management.
Second was Python based service for testing students submissions.
Third was another microservice, which purpose was to gradually replace PHP service.
Fourth service was just a frontend part of the application, which we started from Vue 2, but later moved to Vue 3.
Fifth service was a gateway service, providing single API access point for front service.

To sum up, we as developers were slowly migrating old functionality from PHP to Python, and also adding new features, of course.

Talking about this my work I can highlight two really valuable achievements.

[Integrated new internalization system]
[Developed new commenting system]

Well, thank for attention, I think that is all. If you have any questions, I am ready to answer them.

27
Q

[Rework of roles system]

A

First is complete rework of roles system that we had on our services. I was an initiator of reworking permissions system from roles based to more flexible, with separate permissions assigned to user.

The problem of existing system was that it was old, outdated and extremely inconvenient. It just worked that way, when we have user, user can have one role, assigned to him, and role has certain permissions that user should have. But the most problematic was fact, that if you wanted to give user set of permissions, which differ from existing role just a little bit, you had to create a completely new role.

And in every place where you wanted to check, should certain functionality be available for user, you had to check does user have corresponding role. And if you wanted to add a new role, you needed to add it into every place where permissions that this role gives are managed.

So, after almost a half year of working with this system, I offered to rework it a little bit. From developer side, we completely get rid of previous implementation of roles. Instead, we start working with permissions themselves. It worked so that you don’t need to check current user role, but you check only permissions. For every place you want to manage should user have certain functionality or not, you choose only does user have this or that permission. That would make adding new functionality closed under certain permission very easy task, comparing to previously existing system. And if you want to add a new role, you don’t need to add any changed into code.

From the point of view of user, who want to manage these permissions, something like roles remained, but currently they just represent set of permissions, that this or that user should have, and of course, they can be easily combined.

Well, that was the idea. At first, my team lead and higher managements didn’t want to change current system, because if it works, then why should we change it, right?
So me and other developers cooperated together, looked over tasks, related to adding new roles or changing old ones in our projects, and clearly shown, that with new system, first of all, we will need no changes in projects code for most of cases when we are adding new roles, and we will also need much less changes if we are adding new functionality, that should be accessible only by certain roles.
So, we explained how exactly our changes can help business to save time and money, and after that departament management agreed with our ideas and added roles system rework into list of projects, that should be done as soon as possible.

28
Q

[Addition of standart PDF automated generation]

A

Меня как-то в конце лета временно переводили в смежную команду, которая занимается разработкой ЦРМ, потому-что у них как-то так совпало, что уволилось сразу два бэка, а таски как-то делать надо.

В основном я делал багфиксы, техдолг ну и в общем-то другие таски, которые я мог бы сделать баз глубокого погружения в контекст. Но кроме этих тасок была одна таска, связанная с устранением недоработки в сервисе ЦРМ. Если в двух словах, то у них не было возможности в ЦРМ по одному клику сгенерить для кандидата PDFку оффера, и вместо этого всё делалось вручную.
При этом это реально недоработка, потому что очень многие другие документы, ну например на отпуска, или на увольнения, или ещё на что-то, они уже генерились в одном из наших сервисов.
И я собственно и добавлял генерацию PDF файлов в этот наш сервис и ручку на бэке сервиса ЦРМ, чтобы можно было по запросу получить сгенереный файл оффера.

На самом деле это для меня как для бывшего фулл стека была не слишком сложная задача, там просто надо сделать HTML + CSS шаблон и в него интерполировать необходимые данные.

Ну, по итогу я это всё сделал, и время которое нужно потратить на создание оффера для кандидата сократилось в десятки раз.

Next thing I would want to tell you about is one of the most time-saving tasks I ever used to do.

Previously, in our departament, all documents had to be created manually. So, if hr needed to create for example, a new offer for new candidate, then hr had to manually insert all required information like candidate name, his team lead name, salary etc into existing template, then save it and only after that send it to candidate. And same situation was with all other documents like documents for vacations, bypass sheets etc.

Of course, if you do this once or twice, no problem. But if tens of people or maybe even hundreds do this regularly, then this is not good.
So, once upon a time, I got a few tasks that should have fixed this problem. I had to implement functionality of dynamic generation of pdf files, based on certain templates.
To be honest, this was not something exceptionally difficult in principle. From my side as backend developer, I had to create a styled HTML templates for PDFs and then make it possible to change certain text contents of this template.

So, in the result, implementation of this functionality decreased time spending when working with such documents up to 90-95%. In most cases you just need to press one button and you get final PDF.

29
Q

[Tests]

A

Next achievement is tests. During last few months I write enormous amount of tests.
After division of our old big team into few smaller, our team received one of the least covereded with tests services that we had.
And moreover, quite soon after that, the minimum recommended coverage was raised up to 70%.
And in our team except of me there are two other Golang developers, and they both are seniors.
So, somebody had to write these tests and this somebody is me. During last three months I wrote tests for three services, increasing their coverage from almost nothing to 70-75%.

30
Q

[Separation of large microservice into separate microservice]

A

У нас до реорганизации был мобильный сервис, предназначенный для массовки, работников складов и всего такого.
У них там были отпуска, их какие-то документы, и прочие штуки.
По историческим причинам этот сервис что со стороны фронта, что со стороны бэка был просто одним сервисом. Точнее, это были два сервиса, один бэк, один фронт, но та функциональность, которая в десктопных сервисах разбита по отдельным сервисам, была там слеплена вместе, потому что своей какой-то уникальной функциональности там было мало и в общем, как я уже сказал, исторически это так сложилось.
Ну так вот, проблема в том, что после разбиения нашей большой команды на несколько команд поменьше, в этом сервисе оказались куски функционала, которые теперь принадлежали разным командам. От нас там были ЛНА и документы.
И мы по итогу должны были выпилить из того сервиса и бэковую и фронтовую часть, и перенести её в отдельные сервисы.
Точнее, с точки зрения пользователя всё оставалось по-прежнему, просто по старым url под тем же доменом подрубались вынесенные отдельные сервисы с тем же функционалом.

Ну, в общем, я выносил один из сервисов.

В Wildberries был свой SDK, который использовался для создания
и поддержки новых сервисов, и он под капотом в себе включает версионирование, генерацию сваггера, метрики и много ещё всяких штук.

Я с его помощью сделал новый проект, туда закинул нужный код из проекта, настроил все конфиги, убрал из логирования дублирующиеся метрики, которые были в старом сервисе, а в новом сервисе этим занимается SDK через middleware, а для тех метрик которых остались отредактировал лейблы, убрал из них ту информацию, которую по умолчанию добавляет сам сборщик метрик, по типу там имени сервиса, например.

> Scratch это SDK, который содержит в себе все нижеупомянутые вещи.
Разделён на бинарный файл scratch и библиотеку gitlab.ozon.ru/platform/scratch.
Любой стандартный проект должен быть создан на scratch.

31
Q

[Integrated new internationalization system]

A

Well, first of all, I would like to tell you about internationalization system I implemented.

Previously used translation system was implemented in maximally simple way - we just had single javascript file, containing both English and Estonian translations in form of key-value couples, and single function, using what you could get translation string by its key.

There were few problems with this implementation of system.

First of all, there were no inbuilt functionality or at least standart for the whole project for interpolation or pluralization.
So, for each case where interpolation was needed, developers were doing this in any way they wanted. Somewhere they just were replacing certain substring in string with interpolated values, somewhere they were breaking string into few parts and then concatenating them, somewhere something else… Well, I think you understand, that this is not a good practice, at least.

Second problem was that user had to load all these translation, both English and Estonian, even if only one of these was needed.

To sum up, at certain moment we decided that we need to fix this part of our application.
After discussing various options, this ended up in a system, where, first of all, our translations were splitted up into two separate files, to prevent loading of not needed translations by client.
Second, I intergrated an internalization library into the project, which provided strict and clear standarts for interpolation and pluralization, so there were no chaos anymore.
Finally, I fixed all previously existing translations according to the changes above.

As a result, I reduced size of code that client downloaded by the client and simplified development process for rest of the team.

32
Q

[Developed new commenting system]

A

Another achievement was related to student commenting system, developed by me.

The problem was, that previously, there were no convenient way for teacher to share infromation about students and their tasks among themselves.

We needed a system, where that would be possible to leave comments about student, both in scope of certain task and whole course.

I implemented this system, and moreover, in process of development I saw an opportunity to improve this.
I offered to add comment type selection when you create comment. So, comment could be just informative, positive or negative.
After negotiations with my team lead, we added this functionality too.

33
Q

Расскажите о своих хобби

A

Слушайте, есть конечно база, ну типа, сериальчики смотреть, книги читать, игры играть, но я не думаю что вам тут будет очень сильно интересно об этом слушать.

Вообще, если говорить о каких-то необычных вещах, то я бы сказал, что во-первых, мне мой айтишный бэкграунд помогает оптимизировать мою жизнь, и это в некотором роде можно назвать хобби.

Например, я как раз недавно писал себе мини-прогу, чтобы глянуть какие у меня перспективы на жизнь и как её можно вообще заменеджить, и с какими результатами я при каких раскладах останусь.
Я сейчас не про какой-то разумный сверхинтеллект, который сидит и на картах таро раскладывает мне предсказания, тут всё попроще.
В базе своей это просто сложный калькулятор, в котором я считаю, что вот, если я столько зарабатываю, столько откладываю, столько трачу, то что будет через 5-10 лет.
Или, я вот могу себе позволить по жизни раз в три года бахать отпуск на шесть месяцев, чтобы почилить? Если да, то как это скажется на других метриках, например, на объёме денег, которые у меня останутся, на каком-то доходе с инвестиций.
Или вот, если жениться, то когда? И сколько детей, и опять же, как это всё повлияет на другие метрики?

Я просто очень долго искал-искал себе готовый инструмент под это дело, но их просто нет. Есть какие-то инвестиционные калькуляторы, но ты в них при всём желании не впихнёшь тот же отпуск, или ту же жену с детьми, они просто слишком тупые для этого.

Или вот, другой кейс.
У меня есть проектик, которым я до момента пока себе винду не переустановил достаточно активно пользовался, это планировщик задач. Я его писал себе потому, что опять же, не нашёл на тот момент готового решения, где бы было всё что я хочу.
А я короче хотел чтобы у меня было три типа задач для планирования, это задачи которые на долгосрок, иерархические, ну то есть, есть допустим задача накачаться к лету, и у неё подзадачи узнать какие залы в городе есть, пойти в какой-то зал записаться, узнать в ютубчике как правильно качаться, чтобы не сдуться, и всё в таком духе.
Второй тип тасок это чисто чеклист на какой-то определённый день. Например купить молока, или собрать стул
Третий тип тасок это расписание, как знаете, есть в Яндекс или Гугл календаре, вот такое. Что с условно с двух до четырёх у меня прогулка, с четырёх до пяти я отдыхаю, и так далее.
Вот, а самое смешное что я потом обнаружил, что почти всё то же самое уже есть в Гугл календаре. Там единственное что те долговременные таски, иерархические, максимум с глубиной 1, то есть у тебя есть таска, у таски есть подтаска, а дальше ничего нет.

Вот, что ещё. Ещё я в прошлом году, точнее в позапрошлом, решил как-то книгу написать. Ну, это вообще как было-то, я скачал себе игру, Fronstpunk называется, если вы не играли, это про то как на земле в альтернативном девятнадцатом веке произошла климатическая катастрофа, и Земля стала замерзать, и тогда Британская империя стала строить в Норвегии на угольных залежах города чтобы они там выживали, и ты как раз играешь за капитана, который управляет таким городом, и ты выживаешь.
И в общем это было так атмосферно, что я аж проникся, и решил свою книгу написать где бы тоже всё замерзало и люди выживали и там паровая энергия и всё такое.
В общем, стартанул бодро, пошёл-поехал, двести тысяч символов накатал, а потом пришла весна и что-то всё заглохло. Сложно писать о леденящем холоде когда за окном плюс пятнадцать, понимаете, да?

Ну и если ещё о чём-то таком неожиданном говорить, то я в детстве изобрёл новый вид техники, короче, в чём он заключался, берёшь самокат, две швабры, занавеску из душа, и получается самокат с парусом, и ты на нём катаешься когда ветер есть. Штука классная, рекомендую.

34
Q

Почему на прошлой работе не перешли на PostgreSQL?

A
  • Почему не переходили на PostgreSQL

Мы проводили нагрузочное тестирование с K6, и по результату поняли что переходить нет необходимости

35
Q

Откуда вы получали роли, с которыми вы потом работали?

A

Роли мы получали из хедеров запроса к серверу в одном из middleware, и записывали в контекст запроса.
Потом использовали хелпер функции для работы с этим контекстом. Ну, то есть, допустим, ты проверяшь роль, какую-нибудь document-editor, у тебя есть функция для проверки, которая называется IsDocumentEditor, внутри неё используется другая хелпер функция hasRole, в которую ты передаёшь контекст и нужную роль.

36
Q

Каким образом происходит нарезка проектов на технические задачи? Вам тимлид сразу готовые и оцененные приносил, или вы вместе сидели и разбивали и оценивали?

A
  1. Приходит эпик от бизнеса, там описывается “Хочу такие-то фичи”
  2. Тимлид и PM прикидывают что к чему, и грубо оценивают, из каких блоков этот эпик состоит, и что в нём делаем сначала, а что потом
  3. Происходит общий созвон / груминг, глядим на таски, декомпозируем до более-менее понятных кусков. Если что-то непонятно, то создаём таски на ресёрч для разработчиков
  4. На спринт планнинге, который происходит на той же неделе, назначаем разработчикам таски которые уже были в бэклоге, плюс эти таски на ресёрч
  5. Во время груминга на следующей неделе изучаем результаты ресёрча, окончательно оцениваем эти таски, и кладём их в бэклог + для новых эпиков при необходимости начинаем тот же процесс с 3 шага
  6. Во время спринт планнинга берём и назначаем разработчикам распиленные таски, при необходимости точечно уточняем эстимейты
37
Q

Каким образом согласовывали изменения в системе ролей с системой управления ролями в компании? Ведь была же по-любому система назначения / управления ролями?

A

Да, в компании был свой сервис по управлению и назначению ролей, но по сути, на тот момент когда мы внедряли изменения в систему, там ничего не трогали.

С точки зрения стороннего наблюдателя, то есть того же сервиса для работы с ролями, всё осталось как было. То есть, у тебя в сервисе есть список ролей, их название, описание, и ты их пользователю назначаешь.

Все изменения связанные с добавлением разрешений, совершались только в самих сервисах.

Список разрешений для каждой роли описывался в JSON формате в etcd переменной.
При этом наш сервис не перезапускался после обновления файла, содержащего список переменных
Вместо этого у нас обновлялось значение переменной в хранилище etcd, и после этого обновления изменение слушалось и обрабатывалось самим сервисом, который заново подгружал список разрешений для ролей.

При этом добавили новую метрику в Prometheus для отслеживания ошибок при парсинге и обработке этого значения.
Добавили алерт на эту метрику.

Фронт получал список разрешений для текущей роли пользователя при запуске, а также время от времени дополнительно ходил в сервис, чтобы разрешения всегда оставались актуальными.

38
Q

Как вы взаимодействовали с бизнес-аналитиками?

A
  1. Уточнение текста, который должен возвращать бэк при каких-то событиях.
  2. Ходил к аналитику чтобы он рассказал о деталях реализации функционала, которые хочет видеть бизнес.
  3. Вот например, у нас была ситуация, когда нужно было добавить возможность множественного подписания документов у мобильного сервиса документов.
    При этом на фронте нужно было добавить кнопку выбрать всё.
    И нужно было как раз разобраться с тем, как должна работать эта кнопка и что нужно будет реализовать со стороны фронта и бэка.
    Озвучивалось несколько вариантов
    Вариант первый - кнопка выбирает только те пакеты, которые есть на текущей странице, и потом фронт передаёт бэку id пакетов, которые надо подписать
    Вариант второй - при нажатии на кнопку выбираются действительно все пакеты, которые существуют для этого пользователя.

Поразбирались, решили что будет лучше совсем все пакеты выбирать для подписи.
Значит, надо с бэка дополнительно передавать на фронт id всех существующих пакетов, добавлять новую ручку или дополнять старую.

39
Q

Что для вас самое сложное в работе?

A

Да я как-то не задумывался об этом на самом деле

Ну как бы, работа это работа, берёшь и работаешь её

Конечно, не всегда всё одинаково, бывают периоды, когда какие-то сложные таски, бывают когда что-то спинномозговое сидишь делаешь, но в общем и целом, меня всегда по большей части всё устраивало

Если что-то когда-то было не очень, то со временем достаточно быстро решалось
Ну например когда я только начал работать ещё на прошлой работе в Топе, было очень сложно эстимейтить таски, потому что ну я не знал как их эстимейтить, ну и опыта не было, понятное дело
Со временем научился

Сейчас пожалуй, даже не знаю, что в работе самое сложное

40
Q

Что будете делать, если тимлид попросит внепланово сделать таску?

A

Ну, если это нечасто происходит, то возьму и сделаю, как бы, в чём проблема
Если это постоянная история, то надо будет обсуждать с командой, типа, ребят, что-то у нас не то тут происходит, что-то надо либо с процессами думать, либо ещё с чем