Legacy, ale nie porzucone
Buildy, które znów przechodzą, zależności aktualizowane po kolei, testy wokół części, których ludzie się boją, wdrożenie, które jedna osoba może uruchomić. Potem backlog drobnych ran.
C# i .NET, 2009 do 2021
Dziesięć lat C#, .NET, ASP.NET, Entity Framework i XAML, w tym własny czat na shardowanych serwerach .NET z 30 000 równoczesnych użytkowników. Od 2017 TypeScript i Node.js. Utrzymuję legacy .NET przy życiu, stabilizuję, a gdy przyjdzie czas, przenoszę bez przepisywania od zera.
Dostępny od listopada 2026 · Wrocław, zdalnie

Buildy, które znów przechodzą, zależności aktualizowane po kolei, testy wokół części, których ludzie się boją, wdrożenie, które jedna osoba może uruchomić. Potem backlog drobnych ran.
Wzorzec strangler: nowa usługa w TypeScripcie z przodu, jeden endpoint na raz, oba systemy żyją, aż liczby się zgodzą. Przeniosłem desktopowy produkt 3D do przeglądarki z backendem .NET zostawionym na miejscu.
LINQ na metody tablic, Task<T> na Promise<T>, rekordy na interfejsy, nullable reference types na | null. Pokaz niżej robi część mechaniczną, żeby rozmowa mogła być o projekcie.
Skalowane poziomo, shardowane serwery C#, panel moderacji i automatyczna detekcja NSFW dla produktu z 1,5 miliona pobrań. Wiem, jak wygląda produkcyjny .NET o trzeciej w nocy.
Dowody
Problem, co zrobiłem, efekt. Nazwy klientów tylko tam, gdzie wolno mi ich użyć.
Zobacz też: SaaS i MVP
Zobacz też: Gry
Zobacz też: React
Jedna noga w drzwiach
Dwa sposoby, żeby zobaczyć, jak pracuję, zanim zamówisz sprint. Stały zakres, liczba na piśmie po krótkiej rozmowie.
Czytam repo, CI, testy, bezpieczeństwo i miejsca, których zespół unika. Dostajesz pisemny raport z ustaleniami według ryzyka, plan z kamieniami milowymi i decyzję go/no-go, którą da się obronić. Robiłem taki audyt dla dużego software house’u, zanim jego klienci zobaczyli kod.
Przyślij diff, który Cię martwi. W kilka dni dostajesz komentarze do linii, trzy rzeczy, które zmieniłbym najpierw, i werdykt: zmergowałbym czy nie.
Pokaz na żywo
Translator regułowy, działający w całości w Twojej przeglądarce: properties na pola, async Task<T> na Promise<T>, łańcuchy LINQ na metody tablic, rekordy na interfejsy, typy nullable na unie. Jest celowo prosty. Chodzi o pokazanie, które części migracji są mechaniczne, a które wymagają człowieka.
Ładuję pokaz…
Wklej klasę ze swojego kodu. Jeśli wynik jest zły, ta linia to dokładnie miejsce, gdzie migracja wymaga namysłu.
Jak to działa
Opisujesz produkt i problem. Ja zadaję pytania, które zadałbym pierwszego dnia. Jeśli nie jestem właściwą osobą, mówię to i wskazuję kogoś, kto jest.
Potem krótki plan na piśmie: co budujemy najpierw, co mierzymy, jak pracujemy i ile to kosztuje. Bez prezentacji.
Pierwszy wycinek wychodzi w pierwszym tygodniu: wdrożony, zmierzony, do przejrzenia. Dalej tempo wyznaczają liczby.
Dopasowanie
Styl pracy
Błąd jest naprawiony albo świadomie zamknięty, nigdy odłożony. Alerty i śledzenie błędów w każdym projekcie, więc o problemach dowiaduję się przed klientem.
Setki przejrzanych pull requestów. Patrzę na produkt i jego powody. Kod jest drugi.
PostHog w każdym projekcie od pierwszego dnia. Plan zdarzeń per funkcja i dashboardy, które zarząd naprawdę czyta.
FAQ

Bezpłatna rozmowa 30 minut. Ty przynosisz problem, ja pytania. Bez cen na tej stronie, bo najpierw zakres.
Jeśli nie jestem właściwą osobą, powiem to na rozmowie i wskażę kogoś lepszego.
Po umówieniu: zaproszenie do kalendarza, potem rozmowa. Nic więcej do wypełniania.
Dostępny od listopada 2026 · B2B albo etat · Wrocław, zdalnie