Zastanawiałem się ostatnio nad tym, jaki MUSI być godny zaufania freelancer-programista, a jaki być NIE MOŻE. Efektem jest kilka spostrzeżeń, które dla wielu ocierają się zapewne o banał... ale ze względu na spore zainteresowanie ostatnim postem o tej tematyce postanowiłem się nimi podzielić.
Co zatem cechuje profesjonalistę?
Zadowolenie klienta
Różne mogą być bodźce powodujące zostanie freelancerem i różne zrządzenia losu mogą być przyczyną radości bądź rozżalenia. Wartością numer jeden w tym zawodzie jest moim zdaniem zadowolenie klienta. To jest nagroda za samokształcenie, za pracę i włożony w projekt wysiłek oraz staranne jego wykonanie. Pieniądze są oczywiście głównym "namacalnym" powodem przyjmowania zleceń, ale powiększony stan konta nie przysporzy satysfakcji na "wyższym poziomie". Dla mnie osobiście wyraz uznania usłyszany od zleceniodawcy po udanej współpracy to jak taka finalna kostka cukru dla konia po udanym wyścigu. Zdarza mi się spotykać z opinią "klientowi nawet nie trzeba się starać dogodzić, bo sam nie wie czego chce - ważne żeby zapłacił". Ja myślę, że prawdziwą sztuką jest dokładne przeanalizowanie rozwiązywanego problemu i POMOC zleceniodawcy w wybraniu optymalnej drogi. To faktyczne uproszczenie jego życia/zwiększenie dochodów/automatyzacja powtarzalnych procesów powinno być celem naszej pracy - a nie jedynie wypełnienie zobowiązań płynących z suchych liter podpisanej umowy. Powinno się wychodzić poza czystą implementację zadanych instrukcji i szukać lepszych pomysłów, wynajdywać potencjalne zagrożenia, sugerować alternatywne (uzasadnione) ścieżki prowadzące do tego samego celu. Nie jesteśmy sprzedawcami w komisie samochodowym, gdzie liczy się wciśnięcie byle czego nieświadomemu klientowi i brzęk wyłudzonej mamony o dno kasy oznacza sukces - w naszym przypadku autentycznie da się wyjść poza prosty schemat usługodawca-usługobiorca. Takie podejście do tematu pozwoli na czerpanie większej przyjemności z życia zawodowego (a są i inne bonusy - kiedyś dostałem niespodziewanie 20% większą zapłatę "za dobrą robotę" i to od wcale niebagatelnej kwoty), płynącej spoza stanu konta na koniec miesiąca.
Terminowość
Elementem dość mocno powiązanym z poprzednią kwestią jest terminowość. A jednak warto wspomnieć o niej w osobnym akapicie... Niedawno byłem świadkiem, jak ktoś innego programistę-freelancera określa mianem "mistrza w przekładaniu terminów i wyszukiwaniu wymówek". Szczerze mówiąc trudno jest mi uwierzyć, że taka osoba potrafi utrzymać się na rynku. Przy szacowaniu terminu projektu należy dokładnie zapoznać się z wymaganiami, porównać je z własnymi umiejętnościami i porządnie zastanowić się, w ile czasu damy radę daną rzecz wykonać. Liczenie na to że "zadeklaruję najkrótszy termin więc ja zostanę wybrany do realizacji, a potem się ten termin przesunie" jest szczeniackie i niepoważne. Nadejście umówionego wcześniej terminu powinno nieść za sobą jeden z dwóch scenariuszy: "oddaję gotowy projekt" bądź "nie jestem w stanie zrealizować projektu nawet za milion lat". Renegocjacja terminu może według mnie wchodzić w grę, jeżeli faktycznie pojawią się poważne problemy które były nie do przewidzenia podczas zawierania umowy. I problem taki należy zgłaszać drugiej stronie momentalnie, bez zwlekania typu "im później się klient dowie tym bardziej nie będzie mógł znaleźć innego wykonawcy". I gwoli ścisłości: do takich "nieprzewidzianych problemów" nie zaliczam scenariusza, gdy rozgryzienie nowej technologii czy integracja z zewnętrznym systemem zajmuje tydzień zamiast zaplanowanego jednego dnia. I znowu przykład z własnego podwórka: raz zdarzyło mi się nie wyrobić w terminie z powodu tak zmieniających się wymagań, że system raz po raz był wywracany do góry nogami. Pierwotny czas zakładał 8 tygodni pracy. Pod koniec klient (sam) zasugerował wydłużenie go do 9 tygodni. Summa summarum z zaproponowanego tygodnia wykorzystałem 2 dni (no... 2 doby:) ). Na koniec polecam fajny tekst "Separate Estimating from Committing".
Dostępność
Dotrzymywanie umówionych terminów łączy się niejako z kolejnym punktem: dostępnością. "Wolne się lansowanie" z jednej strony faktycznie daje pewną swobodę, ale z drugiej - to nie jest zajęcie od 8 do 16 tylko to praca 24/7. I tak naprawdę definicja życia jako całości. Jeżeli klient wysyła jakieś pytanie - nie pozwól aby czekał na odpowiedź. Jeżeli dostałeś ofertę projektu lub prośbę o wycenę - nie ignoruj drugiej strony odkładając reakcję na "gdy będę miał czas". Daj poznać, że faktycznie jesteś osobą kryjącą się za skrzynką mailową. A w razie autentycznego braku możliwości porządnego zajęcia się poruszoną kwestią - potwierdź otrzymanie wiadomości i zadeklaruj termin bardziej rzeczowej odpowiedzi. I oczywiście nie zapomnij tego potem zrobić:).
Szczerość
Na sam koniec zostawiłem sobie klamrę spinającą wszystkie powyższe punkty oraz gwarantującą dobre relacje ze zleceniodawcami. Jest to szczerość w kontaktach z klientem. Nie dasz rady wykonać projektu w zadanym terminie? To go nie przyjmuj (o czym było wcześniej). Nie znasz proponowanej technologii? Nie kombinuj, że po cichu znajdziesz sobie podwykonawcę. Uważasz, że wymyślone wymagania są po prostu niewykonalne w określonych warunkach? Powiedz to od razu, a nie po przyjęciu zaliczki i rozpoczęciu prac. Czujesz, że jakaś część może sprawić problemy podczas realizacji? Ostrzeż o tym klienta bez myślenia "przecież ja wszystko wezmę na klatę, a potem się zobaczy". Po wycenie spotkałeś się z warunkiem "dostaniesz zlecenie ale za 50% tej kwoty"? Pamiętaj, że lepiej nie wykonywać projektu wcale niż robić go byle jak usprawiedliwiając się "dostaną tyle za ile zapłacili". I tak dalej, i tak dalej... Zlecenie zakończone sukcesem potrzebuje czystej atmosfery. Trzeba też spojrzeć prawdzie w oczy: taka szczerość prawdopodobnie spowoduje, że część zleceń po prostu przepadnie. Ale moim zdaniem lepiej już na samym początku postawić sprawę jasno, niż potem kombinować. I tu także historyjka z życia wzięta. Kilka tygodni temu zostałem poproszony o oszacowanie nakładu pracy potrzebnego do zrealizowania sporego przedsięwzięcia internetowego. Spotkania i rozmowy zajęły w sumie niemało czasu i doprowadziły mnie do konkluzji, że spełnienie wszystkich założeń w dostępnym przedziale czasowym jest niemożliwe. Moja porada mogła brzmieć: "spoko, biorę, robię, będzie git" i pewnie miałbym z tego niemało kasy. Ale brzmiała "do zaplanowanej premiery da się zrobić bardzo dobrze kluczowe 20% funkcjonalności; potem sugeruję na spokojnie rozejrzeć się za dodatkowymi ludźmi i prowadzić projekt dalej, opierając się na działającym szkielecie generującym już jakieś przychody". Odpowiedzi były dwie: "ale mamy przecież aż trzy miesiące!" oraz finalnie "dzięki, ale znalazłem osobę, która to zrobi". Naświetlając co nieco kontekst całej sytuacji: w założeniu do głównych komponentów zaliczał się serwis z wiadomościami, forum, rozbudowany profil użytkownika, osobisty kalendarz/organizer, wewnętrzny twitter, ogłoszenia pracy, ogłoszenia nieruchomości, sondy, konkursy, zintegrowana z mapą organizacja wydarzeń... cuda niewidy, nawet nie pamiętam wszystkiego. Względem każdej części istniały oczywiście pewne wymagania, które wykluczały wzięcie pierwszego lepszego CMSa prosto z pudełka. Przyznaję że z wielkim zainteresowaniem oczekuję na zaplanowaną datę premiery aby na własne oczy przekonać się o efekcie trzymiesięcznej pracy, jednego człowieka nad taką kobyłą.
Mam nadzieję po raz kolejny, że w jakiś sposób pomoże to komuś zwrócić uwagę na rzeczy ważne. Jak już się za coś bierzemy to dążyć należy do profesjonalizmu i nie zadowalać się amatorką oraz szybkim zyskiem na dzień dzisiejszy. Takie coś może się sprawdzić na krótką metę, ale... teraźniejszość to prawie przeszłość. A o wyżej wymienione czynniki dbać należy z myślą o przyszłości. (jak czasami przywalę jakiś aforyzm to sam nie wiem czy śmiać się czy płakać:) )
Czy o czymś zapomniałem, coś pominąłem? Jak jest Waszym zdaniem? Czy ETYKA zawodowa to faktycznie coś, o co warto walczyć, czy też puste dyrdymały dla niepoprawnych idealistów? Może się mylę i któryś z powyższych punktów wcale nie jest "najważniejszy"? Chętnie poznam dodatkowe głosy w tej kwestii.