17 stycznia 2019

Na czym polega nasz proces wytwórczy kodu

Poza świetnym i dobrze zarządzanym zespołem programistów jest jeszcze jeden czynnik, który wpływa na wysoką jakość naszej pracy. Jest to dopracowany proces wytwórczy. Bez niego, nawet najlepszy zespół polegnie, tworząc stosunkowo prosty kod. Jak wygląda nasz proces wytwórczy i dlaczego jest taki skuteczny?

Rejestr czasu pracy

Po pierwsze – szczegółowo rejestrujemy każdą minutę pracy naszych programistów. Mamy do tego celu wewnętrzny system, który sami stworzyliśmy na swoje potrzeby. Na koniec każdego miesiąca system generuje szczegółowy worklog, który przesyłamy naszym klientom.

System raportuje czas pracy w rozbiciu na projekty, z czego każdy projekt dzieli się na pojedyncze taski. Dzięki temu klient ma bezpośredni wgląd w ogólny i szczegółowy czas naszej pracy, a nasi kierownicy zawsze mają aktualne porównanie szacunków z rzeczywistym czasem pracy.

Teraz opowiem o naszym systemie tasków.

System tasków

Taski w naszym procesie to dobrze określone, techniczne zadania o wielkości 40-80 godzin pracy. Ich rozmiar dobieramy tak, żeby programiści potrafili dokładnie oszacować ich czasochłonność. Małe taski grupujemy, a większe dzielimy i dzięki temu kierownicy cały czas mają jasny pogląd na postęp prac. Zapytani w dowolnym momencie o progres, są w stanie udzielić precyzyjnej odpowiedzi oraz kontrolować rzeczywisty czas pracy nad konkretnym zadaniem.

To ułatwia im pracę i zarządzanie całym projektem, a naszym klientom daje konkretną informację, nad jakimi zdaniami obecnie pracuje nasz zespół, ponieważ każda godzina pracy MUSI być podpięta pod task.

Tak więc kierownik ma skuteczny system do śledzenia realizacji wszystkich tasków swojego zespołu. Jednak wprowadziliśmy do niego jeszcze jedną procedurę, która ma mu pomóc jeszcze lepiej zarządzać budżetem.

Procedura ta polega na tym, że w połowie szacowanego czasu pracy nad danym takiem, nasz programista powinien mieć już pierwszy prototyp oraz znać wszelkie wyzwania i niewiadome. To daje kierownikowi wgląd w jego pracę i jeśli kierownik uzna, że task przekroczy pierwotne szacunki, wtedy natychmiastowo konsultuje to z klientem.

Wynikiem tej konsultacji może być przeszacowanie kosztu, zmiana zakresu, rezygnacja z taska lub inne, optymalne w tej sytuacji rozwiązanie. Każdą taką zmianę potwierdzamy co najmniej e-mailem.

To kolejny sposób, w jaki zapewniamy przejrzysty wgląd w projekt nie tylko naszym kierownikom, ale także klientom.

Po oddaniu skończonego taska, monitorujemy też koszty stabilizacji. Za każdym razem zakładamy, że 20% z kosztu szacowanego na wykonanie danego taska, przeznaczymy na jego optymalizację. Jeśli koszt ten jest większy, jest to przesłanka, że jakość kodu była poniżej oczekiwanej, lub nastąpił problem w analizie zadania.

W takiej sytuacji za każdym razem szukamy przyczyny i na jej podstawie wprowadzamy optymalizację w szacowaniu następnych zadań.

Tak więc wiesz już, jak zarządzamy czasem i jak monitorujemy postęp realizacji najmniejszych zadań. Ale każdy projekt musi składać się z większych części, które grupują te mniejsze i odpowiadają za realizację konkretnych części lub modułów systemu. Nazywamy je inicjatywami.

Inicjatywy

Inicjatywa to większe zadanie, definiowane przez pryzmat celów biznesowych. Reprezentuje ona konkretną funkcję lub moduł systemu, który musi pojawić się w systemie ze względu na wymagania klienta. W skład inicjatywy wchodzi od kilku do kilkunastu tasków, które razem tworzą daną funkcjonalność.

Inicjatywą być na przykład moduł komunikacji z zewnętrzną bazą danych udostępnianą przez inną firmę lub instytucję. Moduł ten musi się znaleźć w systemie, bo jest niezbędny do jego prawidłowej pracy – więc jest on celem biznesowym.

Skoro wiemy już, jaka będzie inicjatywa, możemy zaplanować jakie zadania musimy wykonać w jej ramach tak, aby wdrożyć moduł komunikacji. Kierownik dzieli ją więc na taski i przydziela je do konkretnych osób w swoim zespole.

Realizacja każdej inicjatywy jest bardziej formalna, porównując ją do tasków. Każdą inicjatywę reprezentuje dokument, który opisuje jej cel, zakres prac, szacowany czas pracy oraz jej harmonogram. Dokument ten musi być zaakceptowany przez klienta oraz przez zarząd naszej firmy.

Na koniec każdej inicjatywy kierownik przygotowuje protokół odbioru ze strony klienta, po uruchomieniu wersji produkcyjnej.

Głównym celem kierownika projektu z naszej strony jest takie planowanie tasków i komunikacja z klientem, aby w założonym czasie pracy uzyskać optymalne wdrożenie celów biznesowych danego projektu. Inicjatywy i późniejszy podział na taski skutecznie pomagają mu realizować ten cel.

Znasz już w pełni nasz podział projektu i to, jak zarządzamy czasem. Czy jest coś jeszcze, co wpływa na skuteczną realizację naszych projektów? Jak najbardziej. I jest to bardzo ważny proces, który gwarantuje klientom pełny wgląd w postęp naszej pracy.

Raportowanie

Mowa tu oczywiście o raportowaniu. Co miesiąc przekazujemy naszym klientom:

  • Szczegółowy worklog godzin pracy
  • Postępy realizacji rozpoczętych tasków i plany na kolejny miesiąc
  • Stan realizacji inicjatyw

Raporty z tasków i inicjatyw informują także o zmianie szacunków czasu pracy względem planów z poprzedniego miesiąca. Mogą to być informacje takie jak: zwiększenie szacunków dla trudniejszego taska, zmiana zakresu ze strony klienta, zmiana priorytetów itp.

To w zasadzie już wszystko, pozostaje nam jedynie ostatni element układanki… Od którego zależy, jak będzie układać się nasza współpraca w dłuższym okresie.

Nieustanne doskonalenie procesu

Kierownicy regularnie spotykają się z naszym CEO odpowiedzialnym za produkcję i przeglądają wspólnie projekty, inicjatywy oraz taski. Celem tych spotkań jest potwierdzenie, że projekty idą dobrze oraz wykrycie potencjalnych problemów, jeszcze zanim zgłosi je klient.

Poza tym regularnie spotykamy się z klientami, aby podsumować cele osiągnięte w ostatnim okresie, zaplanować kolejne oraz poznać ocenę naszej współpracy i metodyki. Wszystkie problemy i niepowodzenia analizujemy i szukamy ich przyczyn. Wnioski z tych analiz i rozmów z klientami wdrażamy do naszej metodyki, aby eliminować podobne problemy w przyszłości. Następnie te usprawnienia wdrażamy w naszych wszystkich projektach i w ten sposób nieustannie doskonalimy nasz proces wytwórczy.

Świetne zarządzanie jest naszym priorytetem

Praca nad rozbudowanymi projektami IT wymaga nie tylko technicznego mistrzostwa, ale i świetnego zarządzania. Mam nadzieję, że powyższym artykułem wyjaśniłem Ci, na czym polega nasze zarządzanie projektem i w jaki sposób realizujemy proces wytwórczy kodu. Podsumowując wszystko, zawsze skupiamy się na precyzyjnej kontroli procesu, dajemy klientowi pełny wgląd w naszą pracę oraz doskonalimy współpracę, bazując na wnioskach, jakie płyną z problemów lub niedomówień.

Nasz proces wytwórczy jest świetnym uzupełnieniem wysokich umiejętności naszych programistów i pozwala im wykorzystać swój talent w realizacji projektów dla naszych klientów.