I nie chodzi mi o to, że można członków zespołu traktować jak trybiki i dowolnie wymieniać. Chyba, że wyobrazisz sobie ręcznie robiony, szwajcarski zegarek, w którym każdy trybik jest długo i dokładnie szlifowany, aby pasował do reszty (wymiana go jest możliwa, ale zdajesz sobie sprawę z kosztów).
Ale wróćmy do głównego wątku. Jeśli nie byłeś nigdy członkiem takiego zespołu, a chciałbyś takim zarządzać, to czytaj uważnie.
Z natury jestem leniwy. Ale jestem dość specyficznym leniem, który nie lubi nic nie robić. Dlatego w ogóle zostałem programistą – lubię automatyzować i ulepszać rzeczy, które są nudne i żmudne do ręcznego wykonywania.
Zatem zaczął mi doskwierać pewien proces. Przy pewnym projekcie dość często musimy aktualizować utrzymywane systemy, które mają kilka instancji(w tej chwili 3, a ma być więcej). Wygląda to mniej więcej tak:
- zaloguj się na serwer
- cd instancja#1
- git pull
- wpisz hasło
- odpal migrację
- cd ../instancja#2
- git pull
- wpisz hasło
- odpal migrację
- cd ../instancja#3
- git pull
- wpisz hasło
- odpal migrację
- TADA!
Serio. Pierwszym krokiem było napisanie skryptu, które te kroki odpala samodzielnie. Zaczęło to wyglądać tak:
- zaloguj się na serwer
- ./update-me.sh
- wpisz hasło
- wpisz hasło
- wpisz hasło
Drugim krokiem było skonfigurowanie GITa tak, aby nie wymagał hasła na niektórych maszynach (przy pomocy kluczy rsa) Proces uprościł się do
- zaloguj się na serwer
- ./update-me.sh
Jaki jest efekt? Pierwszy, który się narzuca to oszczędność czasu. Zakładając, że taki update odbywał się 3 razy dziennie to zaoszczędziliśmy jakąś minutę. Nie wydaje się to rozsądne, gdyż oba zadania zajęły mi kilka godzin. Z księgowego punktu widzenia mamy stratę.
Jednak uważny obserwator mógł stwierdzić, że mamy w tym projekcie instancję główną i “towarzyszące”. W pierwotnym, ręcznym, procesie pozostałe dwie często zostawały w tyle. Rodziło to problemy przy testowaniu i mergowaniu zmian.
Dodatkowo prosty update to częsty update, zatem i testerzy nie muszą się dopraszać, żeby zaktualizować wersje, bo zwyczajnie są w najnowszej wersji.
Wracając do mojej tezy: Zespół to maszyna, programiści to (nie tak łatwo wymienialne) trybiki, procesy to miejsca, gdzie trybiki i inne części się ścierają. Niedoświadczonemu operatorowi może się wydawać, że przestoje spowodowane oliwieniem maszynerii to stracone pieniądze. W końcu przez te X godzin mogła wyprodukować Y $$$.
Refaktoring, automatyzacja i inne usprawnienia oliwią procesy w zespole programistów. Gdy nie ma niepotrzebnych tarć można rozwinąć optymalną prędkość, a awarie są mniej prawdopodobne.