Ewolucja narzędzia wewnętrznego: od bota Telegram do skalowalnego systemu webowego
Analityk strat magazynowych zmagał się z rutynowym zadaniem: codzienne przetwarzanie kilku plików Excel wymagało 5 godzin dziennie lub 150 godzin miesięcznie. To odpowiadało znacznym kosztom czasu. Rozwiązanie — MVP w postaci bota Telegram w Pythonie: użytkownicy wysyłali pliki, bot zwracał przetworzony wynik. Logika przetwarzania pozostawała pod kontrolą programisty, interfejs nie był wymagany.
Podejście zadziałało początkowo: Telegram zapewniał szybki dostęp, bez konieczności tworzenia UI. Jednak wraz ze wzrostem złożoności ujawniły się ograniczenia.
Ograniczenia Telegrama jako podstawy systemu
Telegram nie jest przeznaczony do roli centralnego jądra systemu. Problemy pojawiły się szybko:
- Limit plików 20 MB blokował duże zrzuty danych.
- Przetwarzanie stało się "czarną skrzynką" bez widoczności statusu.
- Brakowało pełnoprawnego interfejsu do zarządzania.
- Rozwój funkcjonalności stał się skomplikowany.
- Problemy z dostępem w Rosji z powodu regulacji.
Telegram sprawdził się jako punkt wejścia, ale nie jako core. Rozwiązanie — przeniesienie logiki do osobnego backendu.
Stopniowe przejście do aplikacji webowej
Przejście nie było pełnym refaktoringiem: bot pozostał jako klient, ale delegował zadania backendowi. Pojawił się interfejs webowy z możliwościami:
- Wczytywanie plików dowolnej wielkości.
- Śledzenie statusu przetwarzania.
- Zarządzanie procesami.
Projekt zyskał cechy systemu: podział odpowiedzialności uprościł rozwój. Backend przetwarza dane i logikę biznesową, część webowa — interakcję, integracje (Google Sheets, Dysk Yandex) — przechowywanie i przekazywanie.
Architektura: podział na poziomy
System jest ustrukturyzowany według poziomów:
- Backend: przetwarzanie danych z pandas, logika biznesowa.
- Interfejs webowy: warstwa API, frontend dla użytkowników.
- Klienci: bot Telegram jako jeden z interfejsów.
- Integracje: OAuth dla Dysku Yandex, Google Sheets API.
Taki podział pozwala zmieniać interfejsy niezależnie od logiki. Ograniczenie polityki firmy (brak bezpośredniego dostępu do bazy danych bez proxy) wymusiło to podejście.
Rozwiązanie problemu dużych plików
Kluczowy moment — obejście limitu Telegrama. Integracja z Dysk Yandex przez OAuth: bot akceptuje link, backend pobiera i przetwarza plik. To zapewniło stabilność i szybkość, bez zależności od ograniczeń platformy.
UX dla narzędzi wewnętrznych
Narzędzia wewnętrzne często ignorują interfejs, ale proste ulepszenia są kluczowe:
- Wskaźniki postępu przetwarzania.
- Zrozumiałe przyciski i formularze.
- Responsywność na urządzenia mobilne.
To zwiększa użyteczność: system staje się narzędziem do codziennego użytku.
Środowisko programistyczne: od PyCharm do agentów AI
Rozwój prowadzono w PyCharm do analizy danych i debugowania. Przejście na Cursor z agentami AI przyspieszyło rutynę:
- Generowanie kodu boilerplate.
- Proste refaktoringi.
- Implementacja nowych funkcji.
Cursor jest efektywny dla architektury i rozwoju webowego. PyCharm pozostaje do głębokiej analizy danych. Podejście hybrydowe: AI do automatyzacji, klasyczne narzędzia do złożonych zadań. Planowane jest testowanie Claude Code i n8n dla integracji AI w przetwarzanie danych.
Wyniki i oszczędności
System zaoszczędził 150 godzin miesięcznie zespołu analityków. Kluczowa zmiana — rezygnacja z Telegrama jako centrum: dodawanie interfejsów i integracji stało się możliwe bez ryzyka awarii.
Co ważne:
- Stopniowe wydzielenie backendu z bota uczyniło system skalowalnym.
- Integracja Dysku Yandex rozwiązała problem limitów plików.
- Podział UI i logiki uprościł rozwój.
- Agenci AI w Cursor przyspieszyli rozwój boilerplate.
- Interfejs webowy dodał kontrolę nad procesami.
Lekcje i plany rozwoju
Wnioski: zaczynać od MVP, następnie refaktoryzować w miarę wzrostu. Nie budować idealnej architektury od razu. Narzędzia jak Cursor wpływają na produktywność.
Dalej: analiza BI w webie, pulpity nawigacyjne, konteneryzacja docker. To materiał techniczny dla programistów middle/senior, budujących systemy wewnętrzne.
— Editorial Team
Brak komentarzy.