Опыт Flashcards
You wrote in your resume, that you added Grafana in new microservice. What does it mean?
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.
You wrote that you were working with high-load microservices.
What was the load?
What techniques did you use to work with it?
On our projects…
I don’t remember exactly, but on our main service load is something like 2 or 5 thousands requests per second in peak, because this service works with documents and is used by many other servers too.
The rest of services have less load, of course.
Talking about highload… Well, there are no strict borders, like, if your service below 500 RPS, then it is not high load, if it has more than 10 thousands, then it is high load. High load appear when you can’t just write service any way you want and hope it will work, but when you have to think about architecture and optimize your solution.
I would say that our team was working with average highload services, because we had some things to optimize, like database requests, for example, we had database replication, but for example, our database had no sharding, so it was enough to have one shard to serve all our needs.
How did you handle a disagreement with your boss or your collaborator?
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.
What stands did you have on your project?
What is difference between local, stg and prod stands?
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.
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?
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.
What was most difficult engineering task you used to solve?
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.
Why you decided to leave you current workplace?
Причины:
0. Если без деталей, в двух словах, дело обстояло так:
Когда я пришёл в компанию, у нас был один тимлид. Про него ничего плохого сказать не могу, тимлид он был классный.
Где-то через полгода, в конце весны, наш тимлид уволился, а на его место поставили нового.
Новый тимлид привык к другому подходу к разработке, скажем так, к более жёсткому, и он начал перерабатывать процессы в команде, то, как мы оцениваем задачи, и в принципе стало больше контроля и этот контроль стал более навязчивый.
По итогу работать стало гораздо менее комфортно и приятно.
Мы с ним пробовали это всё обсуждать, что как-то то как оно сейчас, не очень хорошо выходит, может, как-то по-другому попробовать, но по итогу ни к чему дельному не пришли по итогу.
Ну и в конце концов, я решил оттуда уходить, потому что не был готов продолжать работать в такой обстановке.
В общем и целом так, если хотите, могу рассказать подробнее.
Детали:
Уфф… Ну, это достаточно объёмная история, смотрите. Дело обстояло так. Сначала в компании произошли перестановки, поменялся PM и руководитель направления. Это произошло почти сразу как я вообще пришёл в Wildberries, буквально через пару месяцев, я чисто только нормально заонбордиться успел.
После этого нашу большую команду, которая занималась кучей внутренних сервисов, взяли попилили на несколько команд поменьше. Я оказался в новой команде, но лид у нас остался старый.
Потом, ещё через несколько месяцев, в конце весны, наш лид уволился из компании. И вот это была поворотная точка. До этого момента всё было просто отлично, а вот после начались какие-то мутные события. Ну, в общем, наш лид ушёл, а на его место пришёл другой, новый.
Новый лид, судя по всему, привык к другому подходу к работе, к более жёстким процессам.
И он начал закручивать гайки и выжимать из разработчиков всё что выжимается, и буквально за пару месяцев полностью перевернул все процессы в команде.
Вообще, я что хочу сказать… Вот существует определённая договорённость, определённый социальный контракт в команде. Между разработчиками, и тимлидом. Если его пытаться формализовать, то звучит со стороны разработчика он звучит так - ты конечно главный, я тебя уважаю, я тебе подчиняюсь, но во-первых, я не твой слуга, я не твой раз, мы оба свободные люди и в этом плане мы равны, и что я со своей стороны делаю свою работу в срок и качественно, чтобы тебе никто ничего не мог предъявить за то, как ты руководишь, а ты со своей стороны тоже ко мне подходишь с уважением, и делаешь так, чтобы у меня были хорошие условия и отстаиваешь какие-то мои интересы в противовес тому же продакту, которому нужны фичи, желательно ещё вчера и вообще все какие смогли придумать.
Старый тимлид этот договор соблюдал, и при нём всё было просто прекрасно, как я уже говорил, там жаловаться не на что. Но новый, то ли этого не понимал, то ли ему просто было всё равно, но в этом плане он на нас клал.
Сначала по его инициативе отменили day off, и если раньше можно было за год пять дней взять в любое время отдохнуть, главное чтобы по итогам спринта таски за дедлайны не заходили, то теперь такой возможности не стало.
Потом у нас отменили оценку в стори поинтах, и ввели оценку в часах. То есть раньше у нас наши таски оценивались из расчёта 10 стори поинтов за спринт, где один стори поинт это плюс-минус от 4 до 8 часов, то потом стали считать из расчёта 80 часов в неделю, которые надо раскидать по таскам.
Да и вообще, стало некомфортно работать, лид стремится максимально занизить сроки задач, и каждый раз это какой-то эпик батл. Типа, почему 8 а не 6? Почему 4, а не 3? Почему 3 а не 2?
Из-за такого подхода у нас выросло количество багов в коде, да и вообще качество кода упало, и постоянно с его стороны какие-то разбирательства, по типу, почему баги, почему не уложился в срок, и постоянно вот эти претензии.
В общем, я ещё тогда уже начал чувствовать что я это всё не вывожу, морально устаю и выгораю
Я пробовал с ним это обсуждать, что это всё как-то слишком, а можно не нужно, и всё в таком духе, но по итогу ни к чему дельному мы не пришли и всё осталось как было
Мы с ребятами пробовали писать PM, стучаться к руководителю направления, но нас либо вежливо игнорили и кормили завтраками, либо в конце когда я уже на общем созвоне эту тему поднял, сказали что вот теперь так работаем, и ничего менять не будем
Я уже тогда задумывался об уходе, но всё ещё надеялся, что какое-то чудо случится, и всё поправится, и чудо правда случилось, правда не то, на какое я расчитывал.
В общем, я на время этапа калибровки во время осеннего ревью взял себе отпуск на пару недель, чтобы чуть отдохнуть от всего этого, потом после отпуска прихожу, у нас созвон с тимлидом, по итогам ревью, он говорит, у тебя PM, то есть частичное соответствие ожиданиям. То есть не выше ожиданий, не даже соответствие, а ниже. И это при том, что я как раз в том периоде перед ревью втащил в компанию, по крайней мере в наш отдел, крупную переработку системы ролей, которая значительно оптимизировала все связанные с этим таски.
А до этого, на предыдущем ревью, у меня не было никаких таких невероятно выдающихся достижений, просто тесты на сервисы наклепал, но мне тогда поставили ME, то есть соответствует ожиданиям.
Ну так вот, я спрашиваю у него, Максим, почему такая низкая оценка, у меня же вот достижение, вот достижение, вот достижение, вроде нормально поработал.
И он мне тогда сказал, что это всё конечно хорошо, но как-то всё равно недостаточно, и вообще мне надо лучше стараться, чтобы получить оценку повыше.
И я тогда так оху… Очень удивился с этого, и решил что наверное, компания моей мечты выглядит как-то по-другому.
- Наш департамент по большей части решили переводить в офис, а я в офис не сильно хотел, да и вообще я изначально приходил на удалёнку, и не было желания что-то в этом плане менять.
- Я раньше жил не в Москве, а в другом городе, сильно меньше.
Когда я устраивался, мне дали относительно Golang разработчика не очень большой оклад из-за этого. Тогда меня это не сильно беспокоило, потому что в провинции и в самом деле и цены на всё пониже, да и в принципе для меня тогда главным плюсом при устройстве была возможность поработать в большой компании над high-load проектами и изучить все связанные с этим технологии.
Потом я переехал в Москву, но оклад мне не пересмотрели.
Точнее, после ревью мне его повысили, но это всё равно сильно меньше чем у всех моих знакомых с плюс-минус тем же опытом.
Я пробовал это обсуждать, несколько раз подходил, но ничего внятного мне не сказали.
По итогу решил искать другую работу, потому что меня текущая зарплата не очень устраивает, а подвижек в этом направлении со стороны компании не предвидится.
- Наш отдел реформируют, и сотрудников переводят на корпоративные ноуты.
Против самой идеи я ничего не имею, но во-первых, там выдают маки, а я на маке работать не люблю, я привык в Windows, и хочу работать на нём, а во вторых на все ноуты ставят трекеры, а для меня это красный флаг в компании, нет никакого желания работать с поводком на шее.
Я пробовал обсуждать это с начальством, но мне сказали что тут вариантов не особо много.
Ну и по итогу я был вынужден уйти из компании из-за этого. - В компании идут реформы, и сотрудников в принудительном порядке переводят на корпоративные ноуты.
Я против самой идеи ничего не имею, тем более что мой личный ноут с которого я до этого работал, как раз сломался, но есть две проблемы.
Во-первых, ноуты все на винде, а я привык работать с мака.
Винду я тоже уважаю, и в игры с неё удобно играть, но для работы всё-таки лучше мак.
Это первая проблема.
Вторая проблема заключается в том, что в нашем отделе хотели при выдаче самих ноутов ещё и тайм-трекеры на них поставить.
Если честно, я считаю что это кринж, и вообще тайм-трекер в компании для меня красный флаг.
Я несколько раз пробовал обсуждать это с начальством, но по итогу мне сказали что тут вариантов не особо много, либо корпоративный ноут с трекером, либо переводиться в офис.
Я такого прикола не совсем понял, ну и по итогу к сожалению пришлось уйти из компании.
- Первые полгода всё было более-менее ок, а потом в отделе пошли перестановки, реорганизация команд и процессов.
По итогу я оказался в другой команде, точнее, нашу предыдущую команду разбили на несколько более мелких, людей распределили по новым командам плюс наняли ещё новых.
Проблема в том в новой команде идут постоянные овертаймы, куча проектов, а мне это ни разу не нравится.
Я ничего не имею против овертаймов
What did you like/dislike about your current job?
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.
Назовите 3 своих положительных качества и 3 отрицательных.
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.
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?
- 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.
- 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.
Do you consider yourself a good employee? Why?
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?
What grade of developer do you consider yourself to be? Why?
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.
Why do you want to work for our company?
(Какой вы видите идеальную работу/руководителя/компанию? Что вы ждёте от этой работы? / Что ищете в новой компании?)
Смотрите, я бы разделил свой ответ на две части.
// Общая часть:
Во-первых, я хочу сказать, что самое важное для меня при выборе компании, это команда. Это важнее стека, тасок и даже в определённой мере это важнее размера оклада.
Потому что твоя команда - это люди, с которыми ты будешь взаимодействовать каждый день, и очень важно чтобы это взаимодействие было уважительным и комфортным, просто потому, что если это вопрос уже здоровья, а нервы у меня не бесконечные.
Поэтому, при выборе компании, первое что для меня важно, это именно команда. Если в команде какие-то токсичные люди, то я из такой компании скорее всего очень скоро уйду.
Однако, к сожалению, команда, это то, что чаще всего ты можешь проверить только когда уже начал работать в компании. Ну то есть, я не бабка Ванга, у меня нет сверхспособности просканировать компанию и предсказать, токсики там или нет.
Поэтому, при оценке компании для работы до момента, пока я туда ещё не устроился, я опираюсь на другие факторы.
// Если большая корпорация:
Например, для меня важна стабильность и карьерный рост.
Я не хочу часто менять работу, для меня это каждый раз большой стресс, а я это не люблю.
Поэтому я хочу развиваться в рамках компании, и хочу расти, как минимум в синьор разработчика, а в перспективе возможно и в тимлида.
И в этом вопросе, кстати, мне ваша компания очень подходит, потому что я вижу в ней для себя перспективы в этом плане.
- 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.
// Если у компании гибкий рабочий график
- Ещё для меня важна гибкость. При выборе я буду в том числе смотреть, насколько свободный и удобный рабочий график
// Дополнительно:
- Не хочу видеть переработки
Базворды: рост, развитие, изучение, больше, лучше, учить
What motivates you in your work?
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 much do you know about technology X?
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 would your colleagues describe you?
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.
What was the biggest or most recent failure in your life, and how did you resolve it?
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.
What will you do if you miss a deadline?
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.
What will you do if your manager gets hit by a bus?
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.
Why should we hire you? (Почему мы должны взять именно вас)
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.
Мне кажется, мои навыки вам подойдут, я в принципе те задачи, которые вижу впереди, из описания вакансии, из того что вы описываете, в принципе мне понятны. Само собой, надо будет подразобраться в деталях, но в общем и целом всё отлично.
Why did you choose IT?
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.
Do you have any offers or parallel interview processes?
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.
What are the last books you read?
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.
Tell me about a time at work when you had to do something outside of your regular job responsibilities.
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.