Nasze wymagania
✔ Masz minimum 5 lat komercyjnego doświadczenia w budowie i utrzymaniu produktów z wykorzystaniem języka statycznie typowanego, np. C#, .NET, Java, Go, C++, Rust lub Kotlin;
✔ Masz doświadczenie z produktem, który funkcjonuje na produkcji dłużej niż rok i potrafisz ocenić, jak decyzje techniczne sprawdzają się w czasie;
✔ Potrafisz diagnozować problemy produkcyjne, analizować ich przyczyny źródłowe oraz pracować z zagadnieniami wydajności, pamięci, I/O i współbieżności;
✔ Potrafisz projektować rozwiązania z uwzględnieniem kompromisów pomiędzy wydajnością, kosztem, złożonością i czasem realizacji;
✔ Masz doświadczenie z aplikacjami działającymi w środowisku kontenerowym i orkiestrowanym, np. Kubernetes;
✔ Masz doświadczenie w pracy z bazami SQL i NoSQL - w tym modelowaniu, optymalizacji zapytań i migracjach danych;
✔ Dobrze znasz Windows i Linux na poziomie pozwalającym diagnozować zachowanie aplikacji;
✔ Potrafisz pracować ze starym kodem - rozumiesz go przed wprowadzeniem zmian i potrafisz stopniowo poprawiać jego jakość bez przepisywania całego rozwiązania;
✔ Traktujesz obserwowalność jako część projektowania - wiesz, jakie metryki, logi i trace'y będą potrzebne, aby zrozumieć zachowanie systemu na produkcji;
✔ Traktujesz testowanie jako część projektowania rozwiązania i masz doświadczenie z testami jednostkowymi oraz integracyjnymi;
✔ Swobodnie korzystasz z Git i znasz pracę w modelu trunk/feature flow;
✔ Masz doświadczenie z narzędziami AI wspierającymi development i potrafisz krytycznie ocenić wygenerowany kod;
✔ Potrafisz wziąć odpowiedzialność za rezultat, a nie tylko za realizację przypisanego zadania.
Ważne jest dla nas również:
✨Myślenie produktowe - interesuje Cię, jaki problem użytkownika rozwiązujemy, zanim zaczniesz implementować;
✨Samodzielność w niejednoznaczności - potrafisz doprecyzować wymagania i zaproponować rozwiązanie bez czekania na kompletną specyfikację;
✨Umiejętność podejmowania decyzji przy niepełnych danych oraz gotowość do przyznania, że wcześniejsza decyzja wymaga zmiany;
✨Umiejętność komunikowania ryzyka technicznego osobom nietechnicznym i prowadzenia merytorycznej dyskusji technicznej;
✨Dzielenie się wiedzą i kontekstem zamiast budowania własnej „niezastępowalności”;
✨Gotowość do mentoringu i wspierania rozwoju innych inżynierów.
Mile widziane
✨Masz doświadczenie z rozwiązaniami backupowymi, storage, systemami plików lub mechanizmami recovery;
✨Znasz VMware lub Hyper-V;
✨Masz doświadczenie z S3 lub rozwiązaniami kompatybilnymi z S3;
✨Pracowałeś z API zewnętrznych platform, takich jak Microsoft 365, SharePoint, Atlassian, GitLab, GitHub czy Azure DevOps;
✨Brałeś udział w dyżurach produkcyjnych lub analizach poincydentalnych;
✨Masz doświadczenie w migracji istotnych komponentów lub technologii w działającym produkcie;
✨Pracowałeś blisko klienta - np. przy POC, wdrożeniach lub eskalacjach technicznych;
✨Automatyzowałeś powtarzalną pracę, np. poprzez CI/CD, skrypty operacyjne lub narzędzia wewnętrzne;
✨Masz doświadczenie we wdrażaniu praktyk AI-assisted development w zespole.
Twój zakres obowiązków
✨ Odpowiadać end-to-end za wybrany obszar produktu Xopero ONE lub GitProtect - od architektury i decyzji technicznych, przez implementację, aż po zachowanie rozwiązania na produkcji;
✨ Analizować problemy klientów i użytkowników, kwestionować wymagania, jeśli nie rozwiązują właściwego problemu, oraz projektować rozwiązania odpowiadające na realne potrzeby;
✨ Podejmować i uzasadniać decyzje techniczne, świadomie ważąc wydajność, koszt, złożoność, czas i dług technologiczny;
✨ Rozwijać platformę o nowe źródła backupu, przywracania i integracje oraz oceniać wykonalność i ryzyko techniczne nowych funkcjonalności;
✨ Diagnozować i systemowo rozwiązywać problemy produkcyjne związane m.in. z wydajnością, pamięcią, I/O, współbieżnością i niezawodnością;
✨ Pracować nad poprawą stabilności, wydajności i obserwowalności naszych produktów - tak, aby nie tylko działały, ale były łatwe do utrzymania i monitorowania;
✨ Rozwijać rozwiązania w istniejącym kodzie, świadomie spłacając dług technologiczny i poprawiając fundamenty produktu bez niepotrzebnego przepisywania wszystkiego od zera;
✨ Przygotowywać swój obszar do przyszłych dyżurów aplikacyjnych - dbając o metryki, logi, tracing, alerting i runbooki;
✨ Prowadzić code review i design review, a także wspierać mniej doświadczonych inżynierów poprzez mentoring i dzielenie się kontekstem;
✨ Współtworzyć i egzekwować standardy wytwarzania oprogramowania, mając wpływ na to, kiedy rozwiązanie jest rzeczywiście gotowe do wydania;
✨ Wykorzystywać narzędzia AI w codziennej pracy programistycznej - świadomie delegując zadania, weryfikując wygenerowane rozwiązania i biorąc pełną odpowiedzialność za kod, niezależnie od sposobu jego powstania.