Wiadomość została wysłana.
Przetworzymy Twoją prośbę i skontaktujemy się z Tobą tak szybko, jak to możliwe.
Formularz został pomyślnie przesłany.
Więcej informacji można znaleźć w skrzynce pocztowej.
Jak wskazują raporty z całej branży, obecnie rośnie wyspecjalizowany sektor dla inżynierów, którzy koncentrują się na poprawianiu błędów w kodzie generowanych przez AI.
Wzorzec ten stał się niezwykle spójny. Firmy zwracają się do ChatGPT, aby wygenerować skrypty migracyjne, integracje lub całe funkcje, mając nadzieję na oszczędność czasu i obniżenie kosztów. W końcu technologia wydaje się szybka i dostępna.
Wtedy systemy zawodzą.
I dzwonią do nas.
Ostatnio otrzymujemy coraz więcej takich próśb. Nie chodzi o dostarczenie nowego produktu, ale o rozwiązanie bałaganu, który pozostał po tym, jak ktoś zaufał modelowi językowemu w swoim kodzie produkcyjnym.
W tym momencie zaczyna to wyglądać jak własna niszowa branża. Naprawianie błędów generowanych przez AI jest teraz płatną usługą. W niektórych przypadkach bardzo kosztowną.
Raport GitClear 2024 potwierdza to, co zaobserwowaliśmy u klientów: Narzędzia do kodowania AI przyspieszają dostawę, ale także napędzają powielanie, ograniczają ponowne wykorzystanie i zawyżają długoterminowe koszty utrzymania.
Wyjaśnijmy jednak, że nie jesteśmy "przeciwko AI". My też go używamy. I jest pomocny we właściwym kontekście, z odpowiednimi zabezpieczeniami. Ale to, co frustruje mnie w nadmiernym poleganiu na AI i jego powszechnych implikacjach - i prawdopodobnie także ciebie - to magiczne myślenie. Pomysł, że model językowy może zastąpić prawdziwą pracę inżynierską.
Nie może. A jak mówi przysłowie, dowód tkwi w budyniu. Kiedy firmy udają, że jest inaczej, w końcu płacą komuś takiemu jak my, aby to posprzątał.
Jak więc wygląda jedna z tych prac porządkowych? Oto, czego AI-afficionados nie mówią, jeśli chodzi o stracony czas i zmarnowane pieniądze.
Wiadomość jest zazwyczaj następująca:
"Hej, możesz rzucić okiem na mikrousługę, którą zbudowaliśmy? Użyliśmy ChatGPT do wygenerowania pierwszej wersji. Przesunęliśmy ją do etapu przejściowego, a teraz nasza kolejka RabbitMQ jest całkowicie zalana".
Ale jest jedna rzecz: objawy pojawiają się znacznie później. Czasami nawet kilka dni później. A kiedy to robią, rzadko jest oczywiste, że główną przyczyną był kod wygenerowany przez AI. Po prostu wygląda na to, że... coś jest nie tak.
Po kilkunastu takich przypadkach zaczynają pojawiać się wzorce:
I oczywiście, gdy wszystko się zawali, AI nie zostawi ci komentarza mówiącego: "Przy okazji, zgaduję tutaj".
Ta część zależy od ciebie.
Ta pochodzi od szybko rozwijającej się firmy z branży fintech.
Wprowadzali nową wersję modelu danych klientów, dzieląc jedno duże pole JSONB w Postgres na wiele znormalizowanych tabel. Dość standardowa rzecz. Ale z napiętymi terminami i niewystarczającą liczbą rąk, jeden z programistów postanowił "przyspieszyć pracę", prosząc ChatGPT o wygenerowanie skryptu migracyjnego.
Na pierwszy rzut oka wyglądało to dobrze. Skrypt przeanalizował JSON, wyodrębnił informacje kontaktowe i wstawił je do nowego pliku user_contacts
tabela.
Więc go uruchomili.
Brak pracy na sucho. Żadnej kopii zapasowej. Prosto do etapu przejściowego, który, jak się okazało, udostępniał dane produkcji za pośrednictwem repliki.
Kilka godzin później obsługa klienta zaczęła otrzymywać wiadomości e-mail. Użytkownicy nie otrzymywali powiadomień o płatnościach. Inni nie mieli numerów telefonów w swoich profilach. Wtedy do nas zadzwonili.
Wyśledziliśmy problem w skrypcie. Wykonał on podstawową ekstrakcję, ale przyjął trzy fatalne założenia:
NULL
lub brakujące klucze w strukturze JSON.ON CONFLICT DO NOTHING
, więc wszelkie nieudane wstawienia były po cichu ignorowane.Wynik: o 18% danych kontaktowych został utracony lub uszkodzony. Brak dzienników. Brak komunikatów o błędach. Po prostu cicha utrata danych.
Wyznaczyliśmy niewielki zespół, którego zadaniem było rozplątanie tego bałaganu. Oto, co zrobiliśmy:
Dwóch inżynierów, trzy dni. Koszt dla klienta: około $4,500 in service fees.
But the bigger hit came from customer fallout. Failed notifications led to missed payments and churn. The client told us they spent at least $10,000 on support tickets, SLA compensation, and goodwill credits over that one botched script.
The ironic thing is that a senior developer could’ve written the correct migration in maybe four hours. But the promise of AI speed ended up costing them two weeks of cleanup and reputation damage.
Ten pochodził od startupu zajmującego się technologiami prawnymi, który tworzył platformę do zarządzania dokumentami dla firm prawniczych. Jedną z ich podstawowych funkcji była integracja z rządową usługą e-powiadomień - zewnętrznym interfejsem API REST z OAuth 2.0 i ścisłym ograniczeniem szybkości: 50 żądań na minutę, bez wyjątków.
Zamiast przydzielić integrację doświadczonemu programiście backendu, ktoś z zespołu postanowił "prototypować" ją za pomocą ChatGPT. Wrzucili specyfikację OpenAPI, poprosili o klienta Python i otrzymali czysto wyglądający skrypt z requests
, logika ponawiania próby przy użyciu tenacity
, i odświeżanie tokenów.
Na papierze wyglądał solidnie. Więc go wysłali.
Oto, co faktycznie się wydarzyło:
X-RateLimit-Remaining
lub Retry-After
nagłówków. Po prostu wysyłał żądania na ślepo.httpx.AsyncClient
, zaimplementował przepustnicę opartą na semaforach, dodał wykładniczy backoff z jitterem i poprawnie obsługiwał Retry-After
i nagłówki ograniczające szybkość.Dwóch inżynierów, rozłożone na dwa i pół dnia. Koszt dla klienta: około $3,900.
Większym problemem jest to, że ich największy klient - firma prawnicza, której zależy na czasie - przegapił dwa okna składania wniosków sądowych z powodu awarii. Klient musiał naprawić szkody i zaoferować zniżkę, aby utrzymać konto.
Wszystko dlatego, że model językowy nie rozumiał różnicy między "kodem roboczym" a "kodem gotowym do produkcji". I tak po prostu, kolejna warstwa długu technicznego AI została po cichu dodana do stosu.
The scary part isn’t that these things go wrong. It’s how predictable it’s all becoming.
Every one of these incidents follows the same pattern. A developer asks ChatGPT for a code snippet. It returns something that works just well enough not to throw errors. They wire it into the system, maybe clean it up a little, and ship it, assuming that if it compiles and runs, it must be safe.
But here’s the catch: Large language models don’t know your system.
They don’t know how your services interact.
They don’t know your latency budget, your deployment pipeline, your observability setup, or your production traffic patterns.
They generate the most likely-looking code based on patterns in their training data. That’s all. There’s no awareness. No guarantees. No intuition for system design.
And the output often reflects that:
Co gorsza, kod wygląda poprawnie. Jest składniowo czysty. Przechodzi lintery. Może być nawet objęty podstawowym testem. Ale brakuje mu jednej rzeczy, która ma znaczenie: kontekstu.
Dlatego te błędy nie pojawiają się od razu. Czekają na wdrożenia w piątek wieczorem, na okna o dużym natężeniu ruchu, na rzadkie przypadki brzegowe. Taka jest natura długu technicznego AI - jest niewidoczny, dopóki nie zepsuje czegoś krytycznego.
As we mentioned earlier, we use AI too. Pretty much every engineer on our team has a Copilot-like setup running locally. It’s fast, helpful, and honestly, a great way to skip the boring parts.
But here’s the difference: nothing makes it into the main branch without going through a senior engineer, and in most cases, a CI pipeline that knows what to look for.
LLMs are great at:
Czym są nie dobry w projektowaniu. Lub kontekst. Lub bezpieczne ustawienia domyślne.
Właśnie dlatego stworzyliśmy nasze przepływy pracy, aby traktować dane wyjściowe LLM jak sugestie, a nie źródło prawdy. Oto jak to wygląda w praktyce:
Używany prawidłowo, oszczędza czas. Używany na ślepo jest bombą zegarową.
We’re not here to tell you to ban AI tools. That ship has sailed.
But giving a language model commit access? That’s just asking for trouble.
Here’s what we recommend instead:
Pozwól im pomóc z powtarzalnym kodem. Niech proponują rozwiązania. Ale nie ufaj im w podejmowaniu krytycznych decyzji. Każdy kod wygenerowany przez AI powinien zostać sprawdzony przez starszego inżyniera, bez wyjątków.
Niezależnie od tego, czy są to tagi commit, metadane czy komentarze w kodzie, wyjaśnić, które części pochodzą z AI. Ułatwia to późniejszy audyt, debugowanie i zrozumienie profilu ryzyka.
Zdecydujcie jako zespół, gdzie dopuszczalne jest korzystanie z LLM, a gdzie nie. Boilerplate? Jasne. Przepływy autoryzacji? Być może. Systemy transakcyjne? Absolutnie nie bez weryfikacji. Jasno określ zasady i częścią standardów inżynieryjnych.
Jeśli pozwalasz kodowi wygenerowanemu przez AI dotknąć produkcji, musisz założyć, że coś w końcu się zepsuje. Dodaj kontrole syntetyczne. Monitory ograniczające szybkość. Śledzenie zależności. Uczyń niewidzialne widzialnym, zwłaszcza gdy oryginalny autor nie jest człowiekiem.
Największe awarie spowodowane przez AI, jakie widzieliśmy, nie wynikały ze "złego" kodu. Wynikały one z cichych błędów - brakujących danych, uszkodzonych kolejek, burz ponownych prób - które pozostawały niewykryte przez wiele godzin. Zainwestuj w obserwowalność, logikę awaryjną i wycofywanie. Zwłaszcza jeśli pozwalasz ChatGPT pisać migracje.
Krótko mówiąc, AI może zaoszczędzić czas zespołu, ale nie może przejąć odpowiedzialności.
To wciąż ludzka praca.
AI can help you move faster. But it can’t think for you.
It doesn’t understand your architecture. It doesn’t know what “done” means in your context. And it definitely doesn’t care if your data pipeline silently breaks on a Friday night.
That’s why, as CTOs, we need to stay focused on system resilience, not just speed.
It’s tempting to let AI handle the boring parts. And sometimes that’s fine. But every shortcut comes with a tradeoff. When AI-generated code slips through unchecked, it often becomes AI technical debt. The kind you don’t see until your ops team is firefighting in production.
If you’ve already run into that wall, you’re not alone. We’ve helped teams recover from everything from broken migrations to API disasters. We don’t just refactor code. We help refactor the thinking behind it.
Because in the end, that’s what actually makes systems reliable.
Wiadomość została wysłana.
Przetworzymy Twoją prośbę i skontaktujemy się z Tobą tak szybko, jak to możliwe.
Rejestrując się, wyrażasz zgodę na naszą Politykę Prywatności, w tym korzystanie z plików cookie i przekazywanie Twoich danych osobowych.