Zespół

ImpiCode Sp. z o.o.

ImpiCode Sp. z o.o. jest firmą programistyczną z Warszawy oferującą szeroki zakres usług informatycznych, ze szczególnym naciskiem na tworzenie i rozwój oprogramowania. Działamy na terenie Polski oraz za granicą. Naszą mocną stroną jest dogłębna znajomość wielu różnych technologii, co pozwala nam znajdować najlepsze rozwiązania dla naszych Klientów i ich potrzeb. Jako że technologia nas nie ogranicza, reprezentujemy bardzo wysoką elastyczność i skuteczność realizowanych rozwiązań. Tworzymy systemy, które pomagają w pracy i rozwijają biznes naszych Klientów.

 

Grzegorz Papaj Partner Spółki

Przez kilka lat zdobywał doświadczenie biznesowe, pracując kolejno jako programista, inżynier sprzedaży oraz project manager. Bioinformatyk wykształcony na Uniwersytecie Warszawskim, posiada przeszło siedmioletnie doświadczenie w pracy naukowej w prestiżowych ośrodkach badawczych w Polsce i na Węgrzech.

 

Piotr Lewandowski Partner Spółki

Ukończył matematykę i informatykę na Uniwersytecie Warszawskim. Przez kilka lat wraz z zespołem tworzył i rozwijał nowe technologie informatyczne. Zdobył również niebagatelne doświadczenie jako kierownik projektów, które obejmuje między innymi projekt, realizację oraz skuteczne wdrożenie systemu zarządzania pracą, z którego aktualnie korzysta ponad 10.000 użytkowników.

Pracownicy

Naszym pracownikom stawiamy szereg wymogów kompetencyjnych, wśród których najważniejsze to doskonała umiejętność programowania, świetna znajomość zagadnień algorytmicznych i optymalizacyjnych oraz chęć stałego rozwoju technicznego i pozatechnicznego.


Klasyfikacje zespołów

W ImpiCode mamy zespoły o różnych doświadczeniach, kompetencjach i specjalizacji. Najłatwiej je sklasyfikować według technologii:

Zespół technologi Microsoft, pracujący głównie na platformach .NET/ASP.NET oraz SharePoint.

Zespół technologii Java/Oracle, rozwijający i utrzymujący szereg aplikacji webowych i desktopowych.

Zespół technologii Open Source, pracujący głównie w rozmaitych webowych frameworkach opartych o Pythona, Ruby, PHP czy JavaScript.

Zespół oprogramowania systemów elektronicznych, operujący zarówno nisko- (rozmaite mikrokonrtolery) jak i wysokopoziomowo (Raspberry Pi, inne rozwiązania robotyczne).

Zespół aplikacji mobilnych, pracujący zarówno na Androidzie jaki i na iOS, a ostatnio coraz częściej także na hybrydowym React Native.


Jak pracujemy

Przygotowania

Pracę nad każdym projektem rozpoczynamy od przydzielenia kierownika, który poprowadzi projekt z naszej strony. Kierownicy ImpiCode są nie tylko jednymi z najlepszych programistów w firmie, lecz również osobami o szerokim zakresie kompetencji, obejmującym zarządzanie projektami, consulting IT oraz doradztwo biznesowe.

Rolą kierownika jest nie tylko dobór i nadzorowanie zespołu w projekcie oraz osobiste pisanie najbardziej wymagających części kodu. Jego zadaniem jest przede wszystkim zrozumienie potrzeb biznesowych i organizacyjnych klienta. Celem kierownika jest osiągnięcie stanu, w którym będzie on nie tylko głównym programistą, lecz także partnerem i doradca klienta. Dążymy do sytuacji, w której nasz zespół nie będzie postrzegany jak dostawca, którym trzeba zarządzać, ale jak własny dział programistyczny, zmierzający do tych samych celów.

Rozpoznanie potrzeb

Zadaniem kierownika jako pierwszej osoby w projekcie jest rozpoznanie potrzeb klienta. Zależnie od sytuacji może to polegać na analizie funkcjonalnej, inspekcji już istniejącej bazy kodu, sprawdzenie kompletności (technicznej i prawnej) dostarczonego systemu czy też uruchomienie środowiska testowego. Etap rozpoznania służy nie tylko uszczegółowieniu celów projektu, lecz również rzeczowej ocenie aktualnego stanu oraz identyfikacji największych problemów i potencjalnych trudności. Stworzenie dobrej specyfikacji projektu informatycznego znacząco zwiększa szansę na uzyskanie produktu, który będzie zgodny z potrzebami.

Budowanie zespołu

Po uzyskaniu pełnego obrazu sytuacji w projekcie kierownik (w porozumieniu z klientem) przydziela członków zespołu do poszczególnych zadań. Dobór konkretnych ludzi podyktowany jest jak najlepszym dopasowaniem umiejętności i doświadczeń programistów do bieżących potrzeb projektu, aby w ten sposób zapewnić możliwie wysoką efektywność prac.

Rola kierownika nie kończy się na przypisaniu zadań – wraz z przydziałem prac przekazuje on członkom zespołu zdobytą na etapie rozpoznania wiedzę o projekcie, a w późniejszych etapach nadzoruje prace i dba o ich właściwą realizację, zgodnie z oczekiwaniami klienta.

Adaptacja do zmian

W trakcie projektu często zmieniają się bieżące potrzeby. Nie chodzi tylko o zmiany w dalekosiężnych celach projektu, choć i te nie są rzadkie. Chodzi głównie o zmiany wynikające z naturalnego biegu projektu. Przykładowo w trakcie dojrzewania systemu stopniowo zmniejsza się rola projektantów i analityków, natomiast wzrasta zapotrzebowanie na testerów. Natomiast udział specjalistów od integracji na ogół wymagany jest „punktowo”, w ściśle określonych momentach w projekcie.

Jedną z funkcji kierownika jest monitorowanie bieżących potrzeb i odpowiadanie na nie poprzez zmianę składu osobowego. Kierownik pozostaje przy tym stałym elementem projektu, zapewniając spójną wizję i wymianę wiedzy w zespole. Dzięki temu podejściu zespół jako całość zachowuje bardzo wysoką elastyczność i skuteczność działań.

Komunikacja

Kierownik jest również kluczową osobą w komunikacji z klientem – raportuje stan projektu oraz postępy prac, uzgadnia z klientem najbliższe cele oraz działania, a także informuje o możliwych problemach i proponuje możliwe rozwiązania.

Projekty realizujemy zwykle w oparciu o metody zwinne (agile), najczęściej w postaci luźnych iteracji scrum. Oznacza to, iż pracujemy w cyklach – na początku każdego z nich omawiamy z klientem aktualny stan projektu i wspólnie wyznaczamy cele na kolejny sprint. Określamy zakres planowanych prac, szacując ich czasochłonność i spodziewany efekt.

Szacowanie czasochłonności

W stosowanym w ImpiCode modelu rozliczeń godzinowych (time & materials) kluczowym czynnikiem jest nie tylko dobra komunikacja, lecz jest bliska współpraca między klientem a wykonawcą oraz transparentność działań.

W każdym cyklu produkcyjnym kierownik wstępnie szacuje czasochłonność realizacji poszczególnych zadań i przedstawia ją klientowi. Jest to kluczowe nie tylko dlatego, że klient w oparciu o oszacowania może podejmować decyzje o kolejności realizacji poszczególnych zadań. Równie istotne jest to, że szacowanie jest podstawowym narzędziem kontroli, przez co służy budowaniu zaufania, co jest niezwykle ważne w modelu rozliczeń godzinowych.

Oczywiście szacowania nie zawsze są trafne. Niektóre projekty (np. wymagające pracy z cudzym kodem) potrafią wiążą się z różnego rodzaju „niespodziankami”, przez co siłą rzeczy szacowania dla nich muszą być bardzo luźne. Niemniej jednak zestawienie wstępnych prognoz z rzeczywistymi czasami realizacji pozwala określać długofalową skuteczność. Istotne jest, by jeśli już zdarzy się większe niedoszacowanie lub przeszacowanie, nigdy nie zostało ono bez komentarza. To kolejne zadanie kierownika, który zobowiązany jest przedstawić klientowi powody błędnych szacunków. I nie chodzi tylko o „tłumaczenie się”, lecz przede wszystkim o pogłębienie u klienta świadomość stanu projektu.

Dzięki takiemu transparentnemu podejściu oraz stałej ścisłej współpracy obu stron nieprzewidziane trudności są raportowane natychmiast po wykryciu, dzięki klient zachowuje maksymalną kontrolę nad projektem.

Rozliczanie prac

Zwykle podpisujemy umowę ramową, która pozwala klientowi na składanie zamówień na prace programistyczne w określonym wymiarze godzinowym na jeden lub więcej kolejnych miesięcy. Przykładowo możliwe jest zamówienie 0,5 osobomiesiąca (80 godzin) na 3 kolejne miesiące kalendarzowe.

Na koniec każdego miesiąca objętego zamówieniem przedstawiamy klientowi szczegółowy raport (worklog) zrealizowanych prac. Podczas gdy stała operacyjna komunikacja służy planowaniu i nadzorowaniu bieżących prac, raport godzinowy daje klientowi perspektywę strategiczną. Każdy wpis w worklogu zawiera nazwisko programisty, godziny rozpoczęcia i zakończenia pracy nad konkretnym zadaniem oraz sporządzony przez programistę krótki opis podjętych działań.

Worklog stanowi nie tylko podstawę rozliczenia między klientem a ImpiCode, lecz również między ImpiCode a programistą. Jest to fundamentalny element naszej organizacji i z najwyższą starannością dbamy o jego rzetelne wypełnianie, korzystając z autorskiego systemu rejestracji godzin pracy.

Zamówienia w ramach umowy ramowej pozwalają na planowanie intensywności prac. W praktyce zdarza się jednak, że z różnych powodów projekt wymaga zwiększenia bądź zmniejszenia zaangażowania naszego zespołu w określonym czasie. W takich sytuacjach zawsze staramy się wyjść na przeciw potrzebom klienta. Jeśli wymagane jest krótkotrwałe zwiększenie intensywności prac, a dysponujemy odpowiednimi zasobami, przydzielamy do projektu dodatkowe osoby. Analogicznie, jeśli chwilowo prace muszą być wstrzymane, przekładamy ich realizację na kolejny miesiąc. Dzięki temu prace przebiegają płynnie, a klienci nie są obciążeni koniecznością szczegółowego planowania.


Jeżeli masz ochotę dowiedzieć się więcej na temat naszej pracy sprawdź nasz proces lub napisz do nas przez formularz kontaktowy.