Back
News item changed

Nikita Kuznetsov on invisible engineering through which a good product one day may just not open

Automatically translated version. May contain inaccuracies compared to the original.

IT engineer Nikita Kuznetsov on the invisible infrastructure that the stability of a digital product depends on.

In development it is customary to discuss what can be shown: a new interface, the speed of the application, a new feature, an algorithm, a model of artificial intelligence. Much less often they talk about DNS, certificates, service accounts, timeouts, retry attempts, and logs. For the user, these things do not exist at all—until one of them breaks.

IT engineer Nikita Kuznetsov considers this invisible part of the product to be one of the most underappreciated areas of modern development. You can write high-quality code, run tests, configure servers, and months on end service users without problems. And then one old DNS record, an expired certificate, or a forgotten technical account can erase everything else. The application continues to run, servers are healthy, the database responds, but the user can no longer get in.

Kuznetsov calls such elements the “critical boredom”: things nobody particularly wants to deal with because, in a normal state, they do not produce noticeable results.

“People fix the storefront and forget that the building stands on pipes. While water flows, no one cares about the pipes. Then, on a Saturday evening, the pipe bursts, and it turns out the storefront was nothing to do with it.”

This metaphor fairly accurately describes the difference between how the product looks externally and how it exists technically. The user sees a site or an app. The engineer sees dozens of dependencies through which a single ordinary request must pass successfully. And as the system becomes more complex, the reason for a major outage more often lies not in its most visible part.

Nikita Kuznetsov on why functional code does not yet mean a functioning product.

For the user, the product exists as a single whole. He does not know and is not obliged to know that behind a single button there may be an API gateway, several microservices, a database, a message queue, a third-party payment provider, and a separate authentication system. If he presses the button and nothing happens, the product does not work for him.

Engineers see the situation differently. Each component can be checked separately and yield a fairly encouraging picture: the app is running, the server responds, the processor is not overloaded, the database is available, a new version has not been deployed yet. But the entire chain can still be nonfunctional.

This is one of the unpleasant features of distributed systems: local correctness of components does not guarantee the correctness of a user scenario.

According to Nikita Kuznetsov, it is useful here to abandon the habit of treating infrastructure as a secondary technical layer:

“Critical boredom works like a foundation: you cannot see it in a picture, but everything you later call the product stands on it.”

A new feature almost always has an obvious owner. There is a task, a performer, a deadline, testing, and a release. With infrastructural dependencies things are often much less defined. Who is responsible for the domain? Who controls certificates? Who knows all the service accounts? Who checks whether the contractor who finished work six months ago still has rights?

While everything works, the lack of answers to these questions is almost imperceptible. A failure immediately makes them central.

DNS can disable a product without changing a single line of code.

Nikita Kuznetsov explains why DNS and other external dependencies can make a reliably working service unavailable.

One of the phrases Nikita Kuznetsov considers particularly characteristic of emergency situations is this: “But we didn’t deploy anything.”

And this can indeed be true.

The app has not changed. Servers are running. The database responds. The last release was a few days ago. Inside the infrastructure, the service may even open via a direct address. But a ordinary user types the familiar domain name and does not get a working site.

“DNS is a house number on a building that no one reads until they lose entry. Then the whole company stands in the entrance and argues about who is to blame in the code.”

Technically, DNS links a human-understandable domain name to information needed to locate the desired resource. The chain involves recursive resolvers, caching, and authoritative DNS servers. Therefore, an incorrect record or a failed update may behave not as obviously as a typical application error. Different users may receive different results for a period due to caches. The TTL parameter determines how long a DNS record can be cached: the larger it is, the longer the old value may continue to be used after a change.

From this arises an unpleasant scenario. For one engineer the site already opens, for another — not yet. From one region the request goes correctly, from another region it continues to use the cached value. The team sees conflicting symptoms and begins to look for instability in the application, even though the problem lies one level up.

Nikita Kuznetsov therefore speaks of “out-of-repo outages.” Something that did not change along with the source code can break: a DNS record, a network rule, a certificate, a secret, an external account, or a provider configuration.

Moreover, such settings often outlast several generations of the product itself. The app has long been rewritten, the infrastructure migrated, the staff changed, but some critical record still exists only because five years ago it was created once by hand.

The main problem here is not so much a particular technology. It arises when a critical object has no owner, change history, or a clear way to verify.

Expired certificate — a failure whose date could have been known in advance.

Kuznetsov cites certificates as a particularly illustrative example. Unlike many software bugs, a certificate's validity period is not a surprise. The date is known beforehand.

“A certificate does not break the system abruptly. It breaks it precisely on the day that everyone saw and no one put on the calendar.”

Today, a large portion of TLS certificate work can be automated. Automatic renewal systems can renew certificates before expiration, and separate monitoring can proactively alert if this process fails. For short-term certificates this is especially important: automation alone should not be the sole point of trust; its operation also needs to be monitored.

Therefore an outage due to an expired certificate is not interesting for its technical complexity. On the contrary — it reveals an organizational problem.

Someone was sure that renewal was automated. Notifications were sent to an old address. The automatic renewal system once stopped working, but there was no separate monitoring of its status. The responsible employee changed positions, and the duty formally was not assigned to anyone.

As a result, the browser begins to warn the user about a problem with a secure connection, some clients refuse to continue, support receives inquiries, and the technical team suddenly deals with an object whose existence almost no one had previously mentioned.

Kuznetsov notes an important detail: for the user there is no excuse of “the service works, it's just the certificate.” If a person cannot safely open the product, then the product does not work for them.

An infrastructure nuisance becomes a business problem.

Temporary access is dangerous precisely because it stops seeming temporary.

An even more serious situation arises with access rights. Here the consequences can go well beyond ordinary downtime.

“The scariest account isn’t a hacker’s. It’s the one created “for a few days” and forgotten to turn off.”

Nikita Kuznetsov describes a common lifecycle of such access. The team urgently needs to connect a new service or allow a contractor to set something up. Time is short, so permissions are made broader than needed. After the launch they plan to limit them.

The release goes through. New tasks appear. A few weeks later the temporary solution is no longer mentioned. After a year the technical key still exists.

The problem becomes especially serious when it is not possible to quickly determine who owns the account, what process uses it, and what happens after it is disabled. The team sees potentially dangerous access but fears deleting it: suddenly at night some old process will stop working.

A paradoxical situation arises. Unnecessary access is kept precisely because the system is not well documented.

The same applies to people.

“An indispensable person with full access is not a team achievement. It is a hole called competence.”

An experienced engineer can indeed know the infrastructure better than others. The problem begins when the knowledge and rights of this person become the only way to support a critical process. Then a vacation, illness, dismissal, or simply unavailability of the employee becomes a technical risk.

Therefore Kuznetsov suggests looking at access management not only as a matter of information security. It is also a matter of business resilience. The company should understand who has access to critical systems, why they need it, when it was last used, and whether there is an alternative way to restore the system without one specific specialist.

Why microservices break not only inside services.

Nikita Kuznetsov on the links between services, timeouts, and retries that can turn a local failure into a system outage.

Architectural diagrams often look very neat: a rectangle for users, a rectangle for payments, authentication, catalog, notifications, analytics. Each service is isolated from its neighbor and has a clear function.

Nikita Kuznetsov suggests looking primarily at the connections between them.

“Everyone draws squares. Almost no one draws roads. And the road collapses.”

The point here is the behavior of services during problems in neighbors. How long will one service wait for another’s response? What happens after a timeout? Will the request be retried? How many times? Over what interval? Is it safe to repeat this operation at all?

Suppose that the payment service usually responds in 200 milliseconds, but due to load began to respond in several seconds. The client service treats this as an error and sends the request again. Then again. The same thing happens simultaneously with thousands of other requests.

As a result, the system itself increases pressure on the component that already has problems.

This is a real failure class known as a retry storm. Uncontrolled retries under high load can further overwhelm the network and the service, thereby reducing availability. Standard protection methods include limiting retries, exponential backoff, random jitter, and a circuit breaker that temporarily stops calls to a clearly problematic dependency.

Retries are dangerous for another reason. Not every operation can be done again blindly. If the first request effectively went through but the client did not receive a confirmation, retrying can lead to duplicate actions—for example, creating a second operation. That is why when designing retry mechanisms one must consider idempotency.

For this reason the phrase “if there’s an error—we’ll try again” for Kuznetsov is not a complete reliability strategy. The engineer must understand which errors are truly temporary, how many retries are permissible, and what happens if thousands of clients start retrying simultaneously.

Thus a small problem in one service either remains local or becomes the outage of the entire system.

Nikita Kuznetsov on logs that exist but cannot be investigated.

Nikita Kuznetsov on observability: logs and telemetry should help quickly reconstruct the chain of events during a failure.

The next problem arises after a failure. A company may store a huge amount of logs and still know almost nothing about what happened.

“If after an outage you spend half an hour looking for the needed line, you do not have observability. You have a diary that no one read.”

A typical log records that at a certain time a particular component logged a specific event. But in a distributed system this is not enough. A single user request may pass through an API gateway, authentication, several internal services, and a database. If each of them maintains a separate log without a shared link, engineers must manually assemble the history by time and indirect cues.

Modern observability is therefore built not only around logs. Usually several types of telemetry are used — traces, metrics, and logs. A distributed trace allows tracking a path of one request through different components, and individual spans show specific stages of that path. This makes it possible to see not just an error message, but the place and moment where a user operation began to break.

Particularly useful is the correlation of logs with a trace ID and span ID: entries from different services can be linked to a single operation. Without this context, logs from distributed components often remain a disjointed set of events.

For Nikita Kuznetsov, this is a fundamental difference between “we collect data” and “we understand the system.”

Terabytes of logs by themselves do not guarantee anything. During a failure, the engineer needs answers to concrete questions: when did the problem start, which user scenario was affected first, through which services did the request pass, where did the initial delay appear, what errors followed it, and how widely did the outage spread.

If answers require several hours of manual correlation, observability exists formally but does not perform its main function.

The system must alert about the problem earlier than the client.

From this, Nikita Kuznetsov derives another maturity criterion for a product: who is the first to know about the outage.

If the technical team receives the first report from the client, the system has already lost time. The user should not have to perform the role of free monitoring.

But good monitoring is not just checking whether the server answers to a request. A service can be technically available and still not fulfill its function. Reliability must be evaluated by real user outcomes: a system may have almost continuous uptime, but remain unreliable if a key user action regularly ends incorrectly.

Therefore Kuznetsov proposes looking at the product on several levels at once. You need to know not only CPU load and memory usage, but also the percentage of errors, response latency, queue status, times of key user operations, the operation of external dependencies, and anomalous changes in normal system behavior.

And here again appears the “critical boredom.” Monitoring rarely brings new user functionality. A good alert should ideally never be shown to the client. But it is precisely what can give the team ten or twenty minutes that separate a small degradation from a full outage.

Why do companies keep postponing such tasks.

The reason, according to Kuznetsov, is quite prosaic: the result of preventive engineering work is poorly visible.

A new feature exists physically — it can be opened and shown. A new design can be put into a presentation. Speed increases can be expressed by a number.

And the result of timely renewed certificates is that nothing happened. DNS did not break. The old key was removed, and no one noticed. The problematic service was automatically restricted before it dragged others. Monitoring raised the alarm earlier than the clients.

“N dull things do not deliver demos. They are not shown in meetings. So they live without an owner until they arrange a meeting themselves.”

This phrasing well describes the conflict between the visibility of work and its real value. The better preventive infrastructure works, the fewer events it creates for the business. Therefore it is easy to treat it as a secondary cost item—until the first major outage.

After an outage, the situation usually reverses. Resources for monitoring, access auditing, documentation, and redundancy suddenly appear. But Kuznetsov considers the more mature opposite approach: not to wait until the infrastructure proves its importance through downtime.

Nikita Kuznetsov on four questions for every critical dependency.

Instead of a huge list of formal rules, Kuznetsov offers a practical approach. For each truly critical dependency the team should be able to answer four questions: who is responsible, when do we check, how do we learn about the problem, and what do we do after the signal.

The certificate must have an owner and automatic expiry control. In DNS — a clear process for changes and the ability to verify where the domain actually resolves. For a technical account — purpose, minimum necessary rights, and a review procedure. For inter-service calls — timeouts, a limited retry policy, and a predictable behavior during failure. For a user request — sufficient telemetry to trace its path through the system.

The most important thing here is to remove memory dependence.

The memory of an experienced employee is useful, but it is not a failure-resilience mechanism. The phrase “Sasha usually monitors certificates” is not a process. “We know who to call” is not a recovery plan. “This key still seems needed” is not a policy of access.

“If critical boredom has no owner, no expiry check, and no signal to a failure, it is not infrastructure. It is hope.”

This phrase effectively encapsulates the entire position of Nikita Kuznetsov. Product reliability is determined not only by code quality or the number of technologies in the architecture. It is also determined by how well the team controls simple, old, and completely inefficient dependencies without which the entire complex product stops existing for the user.

You can build dozens of microservices, use modern AI models, and process huge volumes of data. But if no one knows when a critical certificate expires, who owns the old administrative key, or why a service repeats a request to an already overloaded dependency five times, technological complexity does little to help.

Therefore Kuznetsov suggests looking for future outages not only in the most complex parts of the system. Sometimes it is more useful to open the list of DNS records, certificates, and service accounts, look at the rules by which components interact, and try to reproduce one user request from logs.

And pose a few awkward questions to each such element: who is responsible for it, when was it last checked, how will the system report a problem, and what happens if it stops working right now?

If there are concrete answers to these questions, the “boring” infrastructure truly becomes part of engineering. If there are no answers, the product can look reliable for years simply because it has lucked so far.

Open the news PDF proof

Document: PDF proof of the original version of the news item "Никита Кузнецов про невидиму інженерію, через яку хороший продукт одного дня може просто не відкритися". It records the publication content at the moment of the first scan, the preservation date and the source: Zavtra.UA - About What Will Happen Tomorrow.

Document: PDF proof of the original version of the news item "Никита Кузнецов про невидиму інженерію, через яку хороший продукт одного дня може просто не відкритися". It records the publication content at the moment of the first scan, the preservation date and the source: Zavtra.UA - About What Will Happen Tomorrow.

IT-інженер Никита Кузнецов — про невидиму інфраструктуру, від якої залежить стабільність цифрового продукту.

У розробці заведено обговорювати те, що можна показати: новий інтерфейс, швидкість застосунку, нову функцію, алгоритм, модель штучного інтелекту. Значно рідше говорять про DNS, сертифікати, сервісні облікові записи, тайм-аути, повторні запити та логи. Для користувача ці речі взагалі не існують — до моменту, коли одна з них ламається.

IT-інженер Никита Кузнецов вважає саме цю невидиму частину продукту однією з найбільш недооцінених зон сучасної розробки . Можна написати якісний код, провести тестування, налаштувати сервери й місяцями без проблем обслуговувати користувачів. А потім один старий DNS-запис, прострочений сертифікат або забутий технічний обліковий запис перекреслює все інше. Застосунок фізично продовжує працювати, сервери справні, база відповідає, але користувач уже не може потрапити всередину.

Кузнецов називає такі елементи «критичною нудьгою»: речами, якими ніхто особливо не хоче займатися, тому що в нормальному стані вони не створюють помітного результату.

«Люди ремонтують вітрину й забувають, що будинок стоїть на трубах. Поки вода йде, труби нікого не цікавлять. Потім у суботу ввечері труба лопається, і з’ясовується, що вітрина тут ні до чого».

Ця метафора досить точно описує різницю між тим, як продукт виглядає зовні, і тим, як він існує технічно. Користувач бачить сайт або застосунок. Інженер бачить ще десятки залежностей, через які має успішно пройти один звичайний запит. І що складнішою стає система, то частіше причина серйозного збою знаходиться не в найпомітнішій її частині.

Никита Кузнецов про те, чому справний код ще не означає справний продукт

Для користувача продукт існує як єдине ціле. Він не знає і не зобов’язаний знати, що за однією кнопкою можуть стояти API-шлюз, кілька мікросервісів, база даних, черга повідомлень, сторонній платіжний провайдер та окрема система авторизації. Якщо він натиснув кнопку й нічого не сталося, для нього не працює продукт.

Інженери бачать ситуацію інакше. Кожен компонент можна перевірити окремо й отримати цілком обнадійливу картину: застосунок запущений, сервер відповідає, процесор не перевантажений, база доступна, нову версію не розгортали. Але весь ланцюжок при цьому все одно може залишатися непрацездатним.

У цьому й полягає одна з неприємних особливостей розподілених систем: локальна справність компонентів не гарантує справності користувацького сценарію.

За словами Никиты Кузнецова, тут корисно відмовитися від звички вважати інфраструктуру другорядним технічним шаром:

«Критична нудьга працює як фундамент: її не видно на картинці, але на ній стоїть усе, що ви потім називаєте продуктом».

У нової функції майже завжди є зрозумілий власник. Є завдання, виконавець, термін, тестування та реліз. З інфраструктурними залежностями все часто набагато менш визначено. Хто відповідає за домен? Хто контролює сертифікати? Хто знає про всі сервісні облікові записи? Хто перевіряє, чи залишилися права в підрядника, який завершив роботу пів року тому?

Поки все функціонує, відсутність відповіді на ці питання майже непомітна. Аварія миттєво робить їх головними.

DNS може вимкнути продукт, не змінивши в ньому жодного рядка коду

Никита Кузнецов пояснює, чому DNS та інші зовнішні залежності здатні зробити недоступним справно працюючий сервіс.

Одна з фраз, яку Никита Кузнецов вважає особливо характерною для аварійних ситуацій, звучить так: «Але ж ми нічого не деплоїли».

І це цілком може бути правдою.

Застосунок не змінювався. Сервери працюють. База відповідає. Останній реліз був кілька днів тому. Усередині інфраструктури сервіс навіть може відкриватися за прямою адресою. Але звичайний користувач вводить звичне доменне ім’я й не отримує працюючого сайту.

«DNS — це табличка на будинку, яку ніхто не читає, поки не втратив вхід. Потім уся компанія стоїть у під’їзді й сперечається, хто винен у коді».

Технічно DNS пов’язує зрозуміле людині доменне ім’я з інформацією, необхідною для знаходження потрібного ресурсу. У ланцюжку беруть участь рекурсивні резолвери, кешування та авторитетні DNS-сервери. Тому неправильний запис або невдале оновлення може поводитися не так очевидно, як звичайна помилка застосунку. Різні користувачі певний час можуть отримувати різні результати через кеші. Параметр TTL визначає, як довго DNS-запис може зберігатися в кеші: що він більший, то довше старе значення потенційно продовжує використовуватися після зміни.

Звідси виникає неприємний сценарій. В одного інженера сайт уже відкривається, в іншого — ще ні. З одного регіону запит іде правильно, з іншого продовжує використовуватися закешоване значення. Команда бачить суперечливі симптоми й починає шукати нестабільність застосунку, хоча проблема знаходиться рівнем раніше.

Никита Кузнецов тому говорить про «аварії поза репозиторієм». Зламатися може те, що взагалі не змінювалося разом із вихідним кодом: DNS-запис, мережеве правило, сертифікат, секрет, зовнішній обліковий запис або конфігурація провайдера.

Причому такі налаштування нерідко переживають кілька поколінь самого продукту. Застосунок давно переписали, інфраструктуру мігрували, співробітники змінилися, а якийсь критичний запис усе ще існує лише тому, що п’ять років тому його одного разу створили вручну.

Головна проблема тут навіть не в конкретній технології. Вона виникає тоді, коли в критичного об’єкта немає власника, історії змін і зрозумілого способу перевірки.

Прострочений сертифікат — аварія, дату якої можна було знати заздалегідь

Сертифікати Никита Кузнецов наводить як особливо показовий приклад. На відміну від багатьох програмних помилок, строк дії сертифіката не є несподіванкою. Дата відома заздалегідь.

«Сертифікат не ламає систему раптово. Він ламає її рівно в той день, який усі бачили й ніхто не поставив у календар».

Сьогодні значну частину роботи з TLS-сертифікатами можна автоматизувати. Системи автоматичного продовження здатні оновлювати сертифікати до завершення строку дії, а окремий моніторинг — заздалегідь повідомляти, якщо цей процес не спрацював. Для короткострокових сертифікатів це особливо важливо: сама автоматизація не повинна бути єдиною точкою довіри, її роботу також необхідно контролювати.

Тому аварія через прострочений сертифікат цікава не своєю технічною складністю. Навпаки — вона показує організаційну проблему.

Хтось був упевнений, що продовження автоматизоване. Сповіщення надходили на стару адресу. Система автоматичного оновлення одного разу перестала працювати, але окремого моніторингу її стану не існувало. Відповідальний співробітник змінив посаду, а обов’язок формально нікому не передали.

У результаті браузер починає попереджати користувача про проблему захищеного з’єднання, частина клієнтів відмовляється продовжувати роботу, підтримка отримує звернення, а технічна команда раптово займається об’єктом, про існування якого до цього майже ніхто не згадував.

Кузнецов звертає увагу на важливу деталь: для користувача не існує виправдання «сам сервіс працює, проблема лише в сертифікаті». Якщо людина не може безпечно відкрити продукт, значить, продукт для неї не працює.

Інфраструктурна дрібниця перетворюється на проблему бізнесу.

Тимчасові доступи небезпечні саме тому, що перестають здаватися тимчасовими

Ще серйозніша ситуація з правами доступу. Тут наслідки можуть виходити далеко за межі звичайного простою.

«Найстрашніший обліковий запис — не хакерський. А той, який завели “на кілька днів” і забули вимкнути».

Никита Кузнецов описує поширений життєвий цикл такого доступу. Команді терміново потрібно підключити новий сервіс або дати підряднику можливість щось налаштувати. Часу мало, тому дозволи роблять ширшими, ніж потрібно. Після запуску їх планують обмежити.

Реліз проходить. З’являються нові завдання. Через кілька тижнів про тимчасове рішення вже ніхто не згадує. Через рік технічний ключ усе ще існує.

Проблема стає особливо серйозною, коли неможливо швидко встановити, кому належить обліковий запис, який процес його використовує і що станеться після вимкнення. Команда бачить потенційно небезпечний доступ, але боїться його видалити: раптом уночі перестане працювати якийсь старий процес.

Виникає парадоксальна ситуація. Непотрібний доступ зберігають саме тому, що система недостатньо добре задокументована.

Те саме стосується людей.

«Незамінна людина з повним доступом — це не гордість команди. Це діра, яку назвали компетенцією».

Досвідчений інженер справді може знати інфраструктуру краще за інших. Проблема починається, коли знання та права цієї людини стають єдиним способом підтримувати критичний процес. Тоді відпустка, хвороба, звільнення або звичайна недоступність співробітника перетворюються на технічний ризик.

Тому Никита Кузнецов пропонує дивитися на керування доступом не лише як на питання інформаційної безпеки. Це ще й питання стійкості бізнесу. Компанія повинна розуміти, хто має доступ до критичних систем, навіщо він йому потрібен, коли ним востаннє користувалися і чи існує альтернативний спосіб відновити систему без одного конкретного спеціаліста.

Чому мікросервіси ламаються не лише всередині сервісів

Никита Кузнецов — про зв’язки між сервісами, тайм-аути та повторні запити, які можуть перетворити локальний збій на системну аварію.

Архітектурні схеми часто виглядають дуже акуратно: прямокутник користувачів, прямокутник платежів, авторизація, каталог, сповіщення, аналітика. Кожен сервіс відокремлений від сусіднього й має зрозумілу функцію.

Никита Кузнецов пропонує дивитися насамперед на з’єднання між ними.

«Усі малюють квадратики. Майже ніхто не малює дороги. А падає зазвичай дорога».

Сенс тут у поведінці сервісів під час проблем у сусідів. Скільки один сервіс готовий чекати відповіді іншого? Що відбувається після тайм-ауту? Чи повторюється запит? Скільки разів? Через який проміжок? Чи можна взагалі безпечно повторювати цю операцію?

Уявімо, що платіжний сервіс зазвичай відповідає за 200 мілісекунд, але через навантаження почав відповідати за кілька секунд. Клієнтський сервіс вважає це помилкою й надсилає запит ще раз. Потім ще раз. Те саме одночасно роблять тисячі інших запитів.

У результаті система сама збільшує тиск на компонент, який уже має проблеми.

Це реальний клас відмов, відомий як retry storm — шторм повторних запитів. Неконтрольовані повтори під високим навантаженням здатні додатково перевантажити мережу та сервіс і тим самим знизити доступність. Серед стандартних способів захисту — обмеження кількості повторів, exponential backoff, випадкова затримка jitter і circuit breaker, який тимчасово припиняє звернення до явно проблемної залежності.

Повтори небезпечні ще з однієї причини. Не кожну операцію взагалі можна бездумно виконувати вдруге. Якщо перший запит фактично пройшов, але клієнт не отримав підтвердження, повтор може призвести до дублювання дії — наприклад, створення другої операції. Саме тому під час проєктування retry-механізмів необхідно враховувати ідемпотентність.

Через це фраза «якщо помилка — спробуємо ще раз» для Никиты Кузнецова не є повноцінною стратегією надійності. Інженеру необхідно розуміти, які помилки справді тимчасові, скільки повторів допустимо і що станеться, якщо одночасно повторювати запит почнуть тисячі клієнтів.

Так невелика проблема одного сервісу або залишається локальною, або стає аварією всієї системи.

Никита Кузнецов про логи, які є, але розслідувати за ними неможливо

Никита Кузнецов про спостережуваність: логи й телеметрія мають допомагати швидко відновити ланцюжок подій під час збою.

Наступна проблема виникає вже після збою. Компанія може зберігати величезну кількість логів і все одно майже нічого не знати про те, що сталося.

«Якщо після аварії ви пів години шукаєте потрібний рядок, у вас немає спостережуваності. У вас є щоденник, який ніхто не вів для читання».

Звичайний лог повідомляє, що в певний час конкретний компонент записав конкретну подію. Але в розподіленій системі цього недостатньо. Один користувацький запит може пройти через API-шлюз, авторизацію, кілька внутрішніх сервісів і базу даних. Якщо кожен із них веде окремий журнал без спільного зв’язку, інженерам доводиться вручну збирати історію за часом і непрямими ознаками.

Сучасна observability тому будується не лише навколо логів. Зазвичай використовуються кілька типів телеметрії — traces, metrics і logs. Distributed trace дозволяє простежити шлях одного запиту через різні компоненти, а окремі spans показують конкретні етапи цього шляху. Це дає змогу побачити не просто повідомлення про помилку, а місце й момент, де користувацька операція почала ламатися.

Особливо корисна кореляція логів із trace ID та span ID: записи різних сервісів можна пов’язати з однією конкретною операцією. Без такого контексту журнали розподілених компонентів часто залишаються розрізненим набором подій.

Для Никиты Кузнецова це принципова різниця між «ми збираємо дані» та «ми розуміємо систему».

Терабайти журналів самі по собі нічого не гарантують. Під час аварії інженеру потрібні відповіді на конкретні питання: коли почалася проблема, який користувацький сценарій постраждав першим, через які сервіси пройшов запит, де з’явилася початкова затримка, які помилки виникли слідом за нею і наскільки широко поширився збій.

Якщо відповіді вимагають кількох годин ручного зіставлення, спостережуваність існує формально, але не виконує своєї головної функції.

Система має повідомити про проблему раніше за клієнта

З цього Никита Кузнецов виводить ще один критерій зрілості продукту: хто першим дізнається про аварію.

Якщо технічна команда отримує перше повідомлення від клієнта, система вже втратила час. Користувач не повинен виконувати роль безкоштовного моніторингу.

Але хороший моніторинг — це не просто перевірка, чи відповідає сервер на запит. Сервіс може формально бути доступним і водночас фактично не виконувати свою функцію. Надійність потрібно оцінювати через реальний користувацький результат: система може мати майже безперервний uptime, але залишатися ненадійною, якщо ключова дія регулярно завершується неправильно.

Тому Никита Кузнецов пропонує дивитися на продукт на кількох рівнях одночасно. Потрібно знати не лише завантаження процесора й обсяг пам’яті, а й відсоток помилок, затримку відповідей, стан черг, час виконання ключових користувацьких операцій, роботу зовнішніх залежностей та аномальні зміни звичної поведінки системи.

І тут знову з’являється «критична нудьга». Моніторинг рідко приносить нову користувацьку функціональність. Хороший алерт узагалі бажано ніколи не показувати клієнту. Але саме він може дати команді десять або двадцять хвилин, які відділяють невелику деградацію від повноцінної аварії.

Чому компанії продовжують відкладати такі завдання

Причина, на думку Никиты Кузнецова, доволі прозаїчна: результат профілактичної інженерної роботи погано помітний.

Нова функція існує фізично — її можна відкрити й показати. Новий дизайн можна поставити в презентацію. Зростання швидкості можна виразити цифрою.

А результат вчасно продовженого сертифіката полягає в тому, що нічого не сталося. DNS не зламався. Старий ключ видалили, і ніхто цього не помітив. Проблемний сервіс автоматично обмежили до того, як він потягнув за собою інші. Моніторинг підняв тривогу раніше за клієнтів.

«Нудні речі не приносять демо. Їх не показують на нараді. Тому вони живуть без господаря, поки самі не влаштують нараду».

Це формулювання добре описує конфлікт між помітністю роботи та її реальною цінністю. Що краще працює профілактична інфраструктура, то менше подій вона створює для бізнесу. Тому її легко сприймати як другорядну статтю витрат — до першої серйозної аварії.

Після аварії ситуація зазвичай перевертається. Раптово знаходяться ресурси на моніторинг, аудит доступів, документацію та резервування. Але Никита Кузнецов вважає зрілішим протилежний підхід: не чекати, поки інфраструктура доведе свою важливість через простій.

Никита Кузнецов про чотири питання до кожної критичної залежності

Замість величезного списку формальних правил Кузнецов пропонує доволі практичний підхід. Для кожної справді критичної залежності команда повинна вміти відповісти на чотири питання: хто відповідає, коли перевіряємо, як дізнаємося про проблему і що робимо після сигналу.

У сертифіката має бути власник і автоматичний контроль строку. У DNS — зрозумілий процес зміни та можливість перевірити, куди фактично резолвиться домен. У технічного облікового запису — призначення, мінімально необхідні права та процедура перегляду. У міжсервісного виклику — тайм-аути, обмежена політика повторів і зрозуміла поведінка під час відмови. У користувацького запиту — достатня телеметрія, щоб простежити його шлях системою.

Найважливіше тут — прибрати залежність від пам’яті.

Пам’ять досвідченого співробітника корисна, але це не механізм відмовостійкості. Фраза «Саша зазвичай стежить за сертифікатами» не є процесом. «Ми знаємо, кому подзвонити» — не план відновлення. «Цей ключ, здається, ще потрібен» — не політика доступу.

«Якщо в критичної нудьги немає власника, строку перевірки й сигналу до аварії, це не інфраструктура. Це надія».

У цій фразі фактично зібрана вся позиція Никиты Кузнецова. Надійність продукту визначається не лише якістю написаного коду й не кількістю технологій в архітектурі. Вона визначається ще й тим, наскільки команда контролює прості, старі й зовсім неефектні залежності, без яких увесь складний продукт перестає існувати для користувача.

Можна побудувати десятки мікросервісів, використовувати сучасні моделі штучного інтелекту й обробляти величезні обсяги даних. Але якщо ніхто не знає, коли спливає строк критичного сертифіката, кому належить старий адміністративний ключ або чому сервіс п’ять разів повторює запит до вже перевантаженої залежності, технологічна складність мало допомагає.

Тому Никита Кузнецов пропонує шукати майбутні аварії не лише в найскладніших місцях системи. Іноді корисніше відкрити список DNS-записів, сертифікатів і сервісних облікових записів, подивитися правила взаємодії компонентів і спробувати відновити один користувацький запит за логами.

І поставити до кожного такого елемента кілька незручних питань: хто за нього відповідає, коли його востаннє перевіряли, як система повідомить про проблему і що станеться, якщо він перестане працювати просто зараз?

Якщо на ці питання є конкретні відповіді, «нудна» інфраструктура справді стає частиною інженерії. Якщо відповідей немає, продукт може роками виглядати надійним — просто тому, що досі йому щастило.

Open the news PDF proof

Document: PDF proof of the original version of the news item "Никита Кузнецов про невидиму інженерію, через яку хороший продукт одного дня може просто не відкритися". It records the publication content at the moment of the first scan, the preservation date and the source: Zavtra.UA - About What Will Happen Tomorrow.

Document: PDF proof of the original version of the news item "Никита Кузнецов про невидиму інженерію, через яку хороший продукт одного дня може просто не відкритися". It records the publication content at the moment of the first scan, the preservation date and the source: Zavtra.UA - About What Will Happen Tomorrow.

IT-інженер Никита Кузнецов — про невидиму інфраструктуру, від якої залежить стабільність цифрового продукту.

У розробці заведено обговорювати те, що можна показати: новий інтерфейс, швидкість застосунку, нову функцію, алгоритм, модель штучного інтелекту.

Значно рідше говорять про DNS, сертифікати, сервісні облікові записи, тайм-аути, повторні запити та логи.

Для користувача ці речі взагалі не існують — до моменту, коли одна з них ламається.

IT-інженер Никита Кузнецов вважає саме цю невидиму частину продукту однією з найбільш недооцінених зон сучасної розробки .

Можна написати якісний код, провести тестування, налаштувати сервери й місяцями без проблем обслуговувати користувачів.

А потім один старий DNS-запис, прострочений сертифікат або забутий технічний обліковий запис перекреслює все інше.

Застосунок фізично продовжує працювати, сервери справні, база відповідає, але користувач уже не може потрапити всередину.

Кузнецов називає такі елементи «критичною нудьгою»: речами, якими ніхто особливо не хоче займатися, тому що в нормальному стані вони не створюють помітного результату.

«Люди ремонтують вітрину й забувають, що будинок стоїть на трубах.

Поки вода йде, труби нікого не цікавлять.

Потім у суботу ввечері труба лопається, і з’ясовується, що вітрина тут ні до чого».

Ця метафора досить точно описує різницю між тим, як продукт виглядає зовні, і тим, як він існує технічно.

Користувач бачить сайт або застосунок.

Інженер бачить ще десятки залежностей, через які має успішно пройти один звичайний запит.

І що складнішою стає система, то частіше причина серйозного збою знаходиться не в найпомітнішій її частині.

Никита Кузнецов про те, чому справний код ще не означає справний продукт

Для користувача продукт існує як єдине ціле.

Він не знає і не зобов’язаний знати, що за однією кнопкою можуть стояти API-шлюз, кілька мікросервісів, база даних, черга повідомлень, сторонній платіжний провайдер та окрема система авторизації.

Якщо він натиснув кнопку й нічого не сталося, для нього не працює продукт.

Інженери бачать ситуацію інакше.

Кожен компонент можна перевірити окремо й отримати цілком обнадійливу картину: застосунок запущений, сервер відповідає, процесор не перевантажений, база доступна, нову версію не розгортали.

Але весь ланцюжок при цьому все одно може залишатися непрацездатним.

У цьому й полягає одна з неприємних особливостей розподілених систем: локальна справність компонентів не гарантує справності користувацького сценарію.

За словами Никиты Кузнецова, тут корисно відмовитися від звички вважати інфраструктуру другорядним технічним шаром:

«Критична нудьга працює як фундамент: її не видно на картинці, але на ній стоїть усе, що ви потім називаєте продуктом».

У нової функції майже завжди є зрозумілий власник.

Є завдання, виконавець, термін, тестування та реліз.

З інфраструктурними залежностями все часто набагато менш визначено.

Хто відповідає за домен?

Хто контролює сертифікати?

Хто знає про всі сервісні облікові записи?

Хто перевіряє, чи залишилися права в підрядника, який завершив роботу пів року тому?

Поки все функціонує, відсутність відповіді на ці питання майже непомітна.

Аварія миттєво робить їх головними.

DNS може вимкнути продукт, не змінивши в ньому жодного рядка коду

Никита Кузнецов пояснює, чому DNS та інші зовнішні залежності здатні зробити недоступним справно працюючий сервіс.

Одна з фраз, яку Никита Кузнецов вважає особливо характерною для аварійних ситуацій, звучить так: «Але ж ми нічого не деплоїли».

І це цілком може бути правдою.

Застосунок не змінювався.

Сервери працюють.

База відповідає.

Останній реліз був кілька днів тому.

Усередині інфраструктури сервіс навіть може відкриватися за прямою адресою.

Але звичайний користувач вводить звичне доменне ім’я й не отримує працюючого сайту.

«DNS — це табличка на будинку, яку ніхто не читає, поки не втратив вхід.

Потім уся компанія стоїть у під’їзді й сперечається, хто винен у коді».

Технічно DNS пов’язує зрозуміле людині доменне ім’я з інформацією, необхідною для знаходження потрібного ресурсу.

У ланцюжку беруть участь рекурсивні резолвери, кешування та авторитетні DNS-сервери.

Тому неправильний запис або невдале оновлення може поводитися не так очевидно, як звичайна помилка застосунку.

Різні користувачі певний час можуть отримувати різні результати через кеші.

Параметр TTL визначає, як довго DNS-запис може зберігатися в кеші: що він більший, то довше старе значення потенційно продовжує використовуватися після зміни.

Звідси виникає неприємний сценарій.

В одного інженера сайт уже відкривається, в іншого — ще ні.

З одного регіону запит іде правильно, з іншого продовжує використовуватися закешоване значення.

Команда бачить суперечливі симптоми й починає шукати нестабільність застосунку, хоча проблема знаходиться рівнем раніше.

Никита Кузнецов тому говорить про «аварії поза репозиторієм».

Зламатися може те, що взагалі не змінювалося разом із вихідним кодом: DNS-запис, мережеве правило, сертифікат, секрет, зовнішній обліковий запис або конфігурація провайдера.

Причому такі налаштування нерідко переживають кілька поколінь самого продукту.

Застосунок давно переписали, інфраструктуру мігрували, співробітники змінилися, а якийсь критичний запис усе ще існує лише тому, що п’ять років тому його одного разу створили вручну.

Головна проблема тут навіть не в конкретній технології.

Вона виникає тоді, коли в критичного об’єкта немає власника, історії змін і зрозумілого способу перевірки.

Прострочений сертифікат — аварія, дату якої можна було знати заздалегідь

Сертифікати Никита Кузнецов наводить як особливо показовий приклад.

На відміну від багатьох програмних помилок, строк дії сертифіката не є несподіванкою.

Дата відома заздалегідь.

«Сертифікат не ламає систему раптово.

Він ламає її рівно в той день, який усі бачили й ніхто не поставив у календар».

Сьогодні значну частину роботи з TLS-сертифікатами можна автоматизувати.

Системи автоматичного продовження здатні оновлювати сертифікати до завершення строку дії, а окремий моніторинг — заздалегідь повідомляти, якщо цей процес не спрацював.

Для короткострокових сертифікатів це особливо важливо: сама автоматизація не повинна бути єдиною точкою довіри, її роботу також необхідно контролювати.

Тому аварія через прострочений сертифікат цікава не своєю технічною складністю.

Навпаки — вона показує організаційну проблему.

Хтось був упевнений, що продовження автоматизоване.

Сповіщення надходили на стару адресу.

Система автоматичного оновлення одного разу перестала працювати, але окремого моніторингу її стану не існувало.

Відповідальний співробітник змінив посаду, а обов’язок формально нікому не передали.

У результаті браузер починає попереджати користувача про проблему захищеного з’єднання, частина клієнтів відмовляється продовжувати роботу, підтримка отримує звернення, а технічна команда раптово займається об’єктом, про існування якого до цього майже ніхто не згадував.

Кузнецов звертає увагу на важливу деталь: для користувача не існує виправдання «сам сервіс працює, проблема лише в сертифікаті».

Якщо людина не може безпечно відкрити продукт, значить, продукт для неї не працює.

Інфраструктурна дрібниця перетворюється на проблему бізнесу.

Тимчасові доступи небезпечні саме тому, що перестають здаватися тимчасовими

Ще серйозніша ситуація з правами доступу.

Тут наслідки можуть виходити далеко за межі звичайного простою.

«Найстрашніший обліковий запис — не хакерський.

А той, який завели “на кілька днів” і забули вимкнути».

Никита Кузнецов описує поширений життєвий цикл такого доступу.

Команді терміново потрібно підключити новий сервіс або дати підряднику можливість щось налаштувати.

Часу мало, тому дозволи роблять ширшими, ніж потрібно.

Після запуску їх планують обмежити.

Реліз проходить.

З’являються нові завдання.

Через кілька тижнів про тимчасове рішення вже ніхто не згадує.

Через рік технічний ключ усе ще існує.

Проблема стає особливо серйозною, коли неможливо швидко встановити, кому належить обліковий запис, який процес його використовує і що станеться після вимкнення.

Команда бачить потенційно небезпечний доступ, але боїться його видалити: раптом уночі перестане працювати якийсь старий процес.

Виникає парадоксальна ситуація.

Непотрібний доступ зберігають саме тому, що система недостатньо добре задокументована.

Те саме стосується людей.

«Незамінна людина з повним доступом — це не гордість команди.

Це діра, яку назвали компетенцією».

Досвідчений інженер справді може знати інфраструктуру краще за інших.

Проблема починається, коли знання та права цієї людини стають єдиним способом підтримувати критичний процес.

Тоді відпустка, хвороба, звільнення або звичайна недоступність співробітника перетворюються на технічний ризик.

Тому Никита Кузнецов пропонує дивитися на керування доступом не лише як на питання інформаційної безпеки.

Це ще й питання стійкості бізнесу.

Компанія повинна розуміти, хто має доступ до критичних систем, навіщо він йому потрібен, коли ним востаннє користувалися і чи існує альтернативний спосіб відновити систему без одного конкретного спеціаліста.

Чому мікросервіси ламаються не лише всередині сервісів

Никита Кузнецов — про зв’язки між сервісами, тайм-аути та повторні запити, які можуть перетворити локальний збій на системну аварію.

Архітектурні схеми часто виглядають дуже акуратно: прямокутник користувачів, прямокутник платежів, авторизація, каталог, сповіщення, аналітика.

Кожен сервіс відокремлений від сусіднього й має зрозумілу функцію.

Никита Кузнецов пропонує дивитися насамперед на з’єднання між ними.

«Усі малюють квадратики.

Майже ніхто не малює дороги.

А падає зазвичай дорога».

Сенс тут у поведінці сервісів під час проблем у сусідів.

Скільки один сервіс готовий чекати відповіді іншого?

Що відбувається після тайм-ауту?

Чи повторюється запит?

Скільки разів?

Через який проміжок?

Чи можна взагалі безпечно повторювати цю операцію?

Уявімо, що платіжний сервіс зазвичай відповідає за 200 мілісекунд, але через навантаження почав відповідати за кілька секунд.

Клієнтський сервіс вважає це помилкою й надсилає запит ще раз.

Потім ще раз.

Те саме одночасно роблять тисячі інших запитів.

У результаті система сама збільшує тиск на компонент, який уже має проблеми.

Це реальний клас відмов, відомий як retry storm — шторм повторних запитів.

Неконтрольовані повтори під високим навантаженням здатні додатково перевантажити мережу та сервіс і тим самим знизити доступність.

Серед стандартних способів захисту — обмеження кількості повторів, exponential backoff, випадкова затримка jitter і circuit breaker, який тимчасово припиняє звернення до явно проблемної залежності.

Повтори небезпечні ще з однієї причини.

Не кожну операцію взагалі можна бездумно виконувати вдруге.

Якщо перший запит фактично пройшов, але клієнт не отримав підтвердження, повтор може призвести до дублювання дії — наприклад, створення другої операції.

Саме тому під час проєктування retry-механізмів необхідно враховувати ідемпотентність.

Через це фраза «якщо помилка — спробуємо ще раз» для Никиты Кузнецова не є повноцінною стратегією надійності.

Інженеру необхідно розуміти, які помилки справді тимчасові, скільки повторів допустимо і що станеться, якщо одночасно повторювати запит почнуть тисячі клієнтів.

Так невелика проблема одного сервісу або залишається локальною, або стає аварією всієї системи.

Никита Кузнецов про логи, які є, але розслідувати за ними неможливо

Никита Кузнецов про спостережуваність: логи й телеметрія мають допомагати швидко відновити ланцюжок подій під час збою.

Наступна проблема виникає вже після збою.

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

«Якщо після аварії ви пів години шукаєте потрібний рядок, у вас немає спостережуваності.

У вас є щоденник, який ніхто не вів для читання».

Звичайний лог повідомляє, що в певний час конкретний компонент записав конкретну подію.

Але в розподіленій системі цього недостатньо.

Один користувацький запит може пройти через API-шлюз, авторизацію, кілька внутрішніх сервісів і базу даних.

Якщо кожен із них веде окремий журнал без спільного зв’язку, інженерам доводиться вручну збирати історію за часом і непрямими ознаками.

Сучасна observability тому будується не лише навколо логів.

Зазвичай використовуються кілька типів телеметрії — traces, metrics і logs.

Distributed trace дозволяє простежити шлях одного запиту через різні компоненти, а окремі spans показують конкретні етапи цього шляху.

Це дає змогу побачити не просто повідомлення про помилку, а місце й момент, де користувацька операція почала ламатися.

Особливо корисна кореляція логів із trace ID та span ID: записи різних сервісів можна пов’язати з однією конкретною операцією.

Без такого контексту журнали розподілених компонентів часто залишаються розрізненим набором подій.

Для Никиты Кузнецова це принципова різниця між «ми збираємо дані» та «ми розуміємо систему».

Терабайти журналів самі по собі нічого не гарантують.

Під час аварії інженеру потрібні відповіді на конкретні питання: коли почалася проблема, який користувацький сценарій постраждав першим, через які сервіси пройшов запит, де з’явилася початкова затримка, які помилки виникли слідом за нею і наскільки широко поширився збій.

Якщо відповіді вимагають кількох годин ручного зіставлення, спостережуваність існує формально, але не виконує своєї головної функції.

Система має повідомити про проблему раніше за клієнта

З цього Никита Кузнецов виводить ще один критерій зрілості продукту: хто першим дізнається про аварію.

Якщо технічна команда отримує перше повідомлення від клієнта, система вже втратила час.

Користувач не повинен виконувати роль безкоштовного моніторингу.

Але хороший моніторинг — це не просто перевірка, чи відповідає сервер на запит.

Сервіс може формально бути доступним і водночас фактично не виконувати свою функцію.

Надійність потрібно оцінювати через реальний користувацький результат: система може мати майже безперервний uptime, але залишатися ненадійною, якщо ключова дія регулярно завершується неправильно.

Тому Никита Кузнецов пропонує дивитися на продукт на кількох рівнях одночасно.

Потрібно знати не лише завантаження процесора й обсяг пам’яті, а й відсоток помилок, затримку відповідей, стан черг, час виконання ключових користувацьких операцій, роботу зовнішніх залежностей та аномальні зміни звичної поведінки системи.

І тут знову з’являється «критична нудьга».

Моніторинг рідко приносить нову користувацьку функціональність.

Хороший алерт узагалі бажано ніколи не показувати клієнту.

Але саме він може дати команді десять або двадцять хвилин, які відділяють невелику деградацію від повноцінної аварії.

Чому компанії продовжують відкладати такі завдання

Причина, на думку Никиты Кузнецова, доволі прозаїчна: результат профілактичної інженерної роботи погано помітний.

Нова функція існує фізично — її можна відкрити й показати.

Новий дизайн можна поставити в презентацію.

Зростання швидкості можна виразити цифрою.

А результат вчасно продовженого сертифіката полягає в тому, що нічого не сталося.

DNS не зламався.

Старий ключ видалили, і ніхто цього не помітив.

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

Моніторинг підняв тривогу раніше за клієнтів.

«Нудні речі не приносять демо.

Їх не показують на нараді.

Тому вони живуть без господаря, поки самі не влаштують нараду».

Це формулювання добре описує конфлікт між помітністю роботи та її реальною цінністю.

Що краще працює профілактична інфраструктура, то менше подій вона створює для бізнесу.

Тому її легко сприймати як другорядну статтю витрат — до першої серйозної аварії.

Після аварії ситуація зазвичай перевертається.

Раптово знаходяться ресурси на моніторинг, аудит доступів, документацію та резервування.

Але Никита Кузнецов вважає зрілішим протилежний підхід: не чекати, поки інфраструктура доведе свою важливість через простій.

Никита Кузнецов про чотири питання до кожної критичної залежності

Замість величезного списку формальних правил Кузнецов пропонує доволі практичний підхід.

Для кожної справді критичної залежності команда повинна вміти відповісти на чотири питання: хто відповідає, коли перевіряємо, як дізнаємося про проблему і що робимо після сигналу.

У сертифіката має бути власник і автоматичний контроль строку.

У DNS — зрозумілий процес зміни та можливість перевірити, куди фактично резолвиться домен.

У технічного облікового запису — призначення, мінімально необхідні права та процедура перегляду.

У міжсервісного виклику — тайм-аути, обмежена політика повторів і зрозуміла поведінка під час відмови.

У користувацького запиту — достатня телеметрія, щоб простежити його шлях системою.

Найважливіше тут — прибрати залежність від пам’яті.

Пам’ять досвідченого співробітника корисна, але це не механізм відмовостійкості.

Фраза «Саша зазвичай стежить за сертифікатами» не є процесом. «Ми знаємо, кому подзвонити» — не план відновлення. «Цей ключ, здається, ще потрібен» — не політика доступу.

«Якщо в критичної нудьги немає власника, строку перевірки й сигналу до аварії, це не інфраструктура.

Це надія».

У цій фразі фактично зібрана вся позиція Никиты Кузнецова.

Надійність продукту визначається не лише якістю написаного коду й не кількістю технологій в архітектурі.

Вона визначається ще й тим, наскільки команда контролює прості, старі й зовсім неефектні залежності, без яких увесь складний продукт перестає існувати для користувача.

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

Але якщо ніхто не знає, коли спливає строк критичного сертифіката, кому належить старий адміністративний ключ або чому сервіс п’ять разів повторює запит до вже перевантаженої залежності, технологічна складність мало допомагає.

Тому Никита Кузнецов пропонує шукати майбутні аварії не лише в найскладніших місцях системи.

Іноді корисніше відкрити список DNS-записів, сертифікатів і сервісних облікових записів, подивитися правила взаємодії компонентів і спробувати відновити один користувацький запит за логами.

І поставити до кожного такого елемента кілька незручних питань: хто за нього відповідає, коли його востаннє перевіряли, як система повідомить про проблему і що станеться, якщо він перестане працювати просто зараз?

Якщо на ці питання є конкретні відповіді, «нудна» інфраструктура справді стає частиною інженерії.

Якщо відповідей немає, продукт може роками виглядати надійним — просто тому, що досі йому щастило.

Open the news PDF proof

Document: PDF proof of the edited version of the news item "Никита Кузнецов про невидиму інженерію, через яку хороший продукт одного дня може просто не відкритися". It helps compare changes with the previous recorded version and confirms that the update was detected by the monitoring system. Source: Zavtra.UA - About What Will Happen Tomorrow.

Document: PDF proof of the edited version of the news item "Никита Кузнецов про невидиму інженерію, через яку хороший продукт одного дня може просто не відкритися". It helps compare changes with the previous recorded version and confirms that the update was detected by the monitoring system. Source: Zavtra.UA - About What Will Happen Tomorrow.

Download Download PDF