Inżynieria oprogramowania

Wycena projektów

Wiele razy na forum lub grupach dyskusyjnych, można napotkać posty z prośbą o wycenę jakiegoś projektu. Najczęściej w takich wypadkach, pada odpowiedź: 1/10 samochodu. Chciałbym, aby ten tekst został potraktowany jako swego rodzaju poradnik – odpowiedz na pytanie: „ile mogę zarobić na takim i takim programie”. Chciałbym również ostrzec Czytelnika przed paroma błędami, które sam popełniłem. Tekst ten adresowany jest głównie do programistów amatorów, wolnych strzelców. Nie uwzględnia wielu czynników planowania projektu dla większych klientów, czym zajmują się menadżerowie projektu. Z tym zagadnieniem odsyłam do fachowej literatury.

Szukając pracy, często rozglądamy się za ofertami na forach lub grupach dyskusyjnych. Autorzy takich postów, opisują w paru zdaniach cele projektu po czym spodziewają się jednoznacznej odpowiedzi na pytanie: „za ile?”. Tutaj mała rada dla osób publikujących takie posty: starajcie się opisywać więcej szczegółów projektu. Rozumiem, że niektórym zależy na tym, aby nie zdradzać swojego pomysłu na biznes na forum publicznym, ale kilka szczegółów nie zaszkodzi. Przykład ogłoszenia, którego powinno się unikać:

Poszukuję pilnie osoby, która chciałaby zarobić tworząc programik na komórkę

Autor takiego posta zostawia jedno zdanie + nr. telefonu. Przydałoby się tutaj parę szczegółów, np. jakiego rodzaju ma to być program, język programowania. Na pewno znając więcej detali, pare osób więcej odpowiedziałoby na taki anons.

Tutaj mamy przykład ogłoszenia, w którym autor przedstawił kilka szczegółów:

Kupiłbym od jakiegoś speca chyba dość skomplikowany skrypcik php na moją stronkę. Byłby to skrypt dzięki któremu możemy dodawać różne oferty na stronę oraz wyszukiwać je poprzez wyszukiwarkę. Bardzo szczegółowy opis podam indywidualnie osobie zainteresowanej zleceniem.

W takim przypadku, przynajmniej wiemy z czym mamy do czynienia, ale oczywiście nie znamy specyfikacji projektu. Po to zgłaszamy się do autora postu.

Klient dając ogłoszenie o prace prawdopodobnie, w większości przypadków oczekuje oferty cenowej. Oczywiście możemy napisać maila z zapytaniem o szczegóły i dołączając przypis: „cene projektu ustalimy po ustaleniu specyfikacji projektu”. Jest jednak większa szansa, że taki mail zostanie zignorowany. Spotkaliście się czasem z przypisami do anonsów: „odpowiedzi bez ofert cenowych zostaną zignorowane”. Nie sposób jest określić ceny projektu znając tak mało detali. Dlatego na takie oferty zawsze odpowiadamy ceną widełkową: 500 – 1000 zł. W przypadku drugiego anonsu (skrypt PHP umożliwiający dodawanie ogłoszeń na stronę) mamy następujące dane:

  • projekt będzie pisany w PHP
  • komunikacja z bazą danych. Jaką? MySQL, Postgres? Może Oracle? Możemy założyć, że z jakąś darmową
  • projekt ma umożliwiać dodawanie ofert
  • projekt ma uwzględniać wyszukiwanie ofert
Mamy tu jednak sporo niewiadomych:
  • projekt zakłada przygotowanie kodu XHTML, CSS? W ogłoszeniu nic o tym nie wiadomo, zakładamy, że nie
  • projekt ma umożliwiać kasowanie, edycje wpisów? Nic nam o tym nie wiadomo, ale zakładamy, że tak
  • Jak zaawansowana ma być wyszukiwarka? Nie wiemy
  • Czy system ma w założeniach komunikować się z systemem szablonów (smarty, rozwiązanie własne). Nie wiemy.
  • jakiego typu ogłoszenia? Nie wiemy.
  • Jak skomplikowany ma być formularz dodawania ogłoszenia (ilość pól, struktura tabel). Nie wiemy.

Niewiadome w tym wypadku można mnożyć. Możemy mieć tutaj do czynienia z banalnym projektem składającym się na dwa skrypty (dodawanie, wyszukiwanie) lub serwisem ogłoszeniowym typu gratka.pl. Należy zakładać, że klient nie posiada fachowej wiedzy, nie używa/nie rozumie terminologii technicznej. Nie wiemy więc co dokładnie siedzi w jego głowie. W naszym przykładowym anonsie autor pisze, że więcej szczegółów udostępni osobom zainteresowanym. To dobrze, ale jeżeli mielibyśmy określić widełki cenowe dla tego zlecenia przy tak małej ilości danych? Równie dobrze może to być 500 zł, ale również 5000 zł.

Podsumowując: odpowiadając na takie oferty, można stosować widełki : im mniej informacji otrzymujemy, tym bardziej mogą one być rozległe. Naturalnie, aby nie przestraszyć klienta na wstępie, widełki dolne mogą być  małą sumą (i tak wiemy, że za taką cenę nie kiwniemy palcem, lecz klienta może to skłonić do odpisania na naszą ofertę).

Jeżeli znamy już szczegóły projektu, znamy poziom jego zaawansowania, musimy oszacować czas. Czas jest bowiem najważniejszym czynnikiem potrzebnym do wyceny projektu. Im trudniejszy projekt, tym więcej czasu będziemy potrzebowali na jego realizacje. Stąd cena takiego projektu powinna być wyższa.  

I tutaj przychodzi kolejny bardzo ważny czynnik: samoocena. Należy więc odpowiedzieć sobie na dwa zasadnicze pytania:

  1. Ile godzin dziennie mogę przeznaczyć na pracę?
  2. Jaka stawka za godzinę pracy mi odpowiada?

W tym momencie nasuwają się jednak bardziej szczegółowe pytania:

  1. Czy mam doświadczenie w tej dziedzinie?
  2. Czy robiłem podobny projekt już wcześniej?
  3. Zawartość mojego portfolio, czyli czym mogę się pochwalić.

Odpowiadając sobie na te wszystkie pytania możemy określić jak długo zajmie nam praca nad projektem i ile możemy sobie za niego życzyć. Określenie czasu potrzebnego na realizacje projektu jest bardzo trudne. Każdy człowiek ma inne tempo pracy, inne umiejętności (im więcej umiesz tym szybciej rozwiążesz napotkany problem), doświadczenie (robiłeś to wcześniej czyli pójdzie dużo szybciej), stopień koncentracji (czy nic Cię nie rozprasza? Czy całkowicie poświęcasz się pracy?) oraz czas (czy nie masz dodatkowych obowiązków domowych? Uczysz się? Studiujesz?). W bardziej zaawansowanych projektach dużych firm stosowany jest model PERT</wiki>.

Jeżeli znasz dokładną specyfikację, wiesz co masz robić i ile powinno Ci to zająć, należy skupić się na godzinowej stawce pracy. Naturalnie jeżeli jesteś doświadczonym programistom z bogatym portfolio, zapewne niepotrzebnie czytasz ten tekst, gdyż wiesz dobrze ile kosztuje Twoja praca. Jeżeli nie masz większego doświadczenia, niestety będziesz zapewne musiał nieco spuścić z ceny, aby podbudować swoje portfolio. Może to jednak zaprocentować w przyszłości gdyż zapewne Twoje stawki pracy będą coraz większe.

Cóż, zapewne wielokrotnie spotkasz się z zerową reakcją na Twoją ofertę. Często otrzymywałem odpowiedzi w stylu: „Jesteśmy zainteresowani współpracą z Panem, musi Pan jednak trochę zejść z ceny” ; bardzo często klienci po usłyszeniu ceny robią wielkie oczy i patrzą z niedowierzaniem. Takie osoby nie znają realiów rynku, w którym praca programisty kosztuje. Wówczas zapewne takie osoby skorzystają z pracy osób z małym doświadczeniem za dużo niższą stawkę. Klient musi jednak zdać sobie sprawę, że jakość kosztuje i wybierać: cenę albo jakość.

Nie zrażaj się jednak odmowami . Bywało tak, że wysyłałem kilkanaście ofert nim dostałem jakąś odpowiedz. W końcu znajdzie się ktoś kto doceni Twoje umiejętności, ktoś kto zna trochę realia rynku i zaoferuje Ci odpowiednie wynagrodzenie adekwatne do umiejętności i złożoności projektu.

Chciałbym jeszcze na chwilę cofnąć się do specyfikacji i kroku, w którym ustalamy czas wykonania na podstawie złożoności projektu. Przy wycenie należy zwrócić uwagą na wiele szczegółów.

Podpisałem swego czasu umowę na wykonanie projektu na wykonanie serwisu WWW. Oczywiście do umowy dołączona była specyfikacja, jak mi się wówczas zdawało – bardzo szczegółowa. Dostarczono mi grafikę strony głównej oraz również podstron. Jednak nie była kompletna, brakowało wielu podstron które musiałem zaprojektować sam. Wziąłem więc header oraz footer strony i pisałem kod XHTML/CSS do brakujących podstron. Czy musiałem to zrobić? W końcu wykonanie layoutu strony nie leżało w moich obowiązkach. Miałem natomiast w specyfikacji jasno określone szczegóły systemu. Takich detali umowa nie regulowała, nie spodziewałem się tego, ale pracę i tak wykonałem. Wolałem pozostawić po sobie dobre wrażenie, może zaprocentuje to w przyszłości?

Tak czy inaczej, chciałbym uczulić na tego typu sprawy: analizujcie dokładnie specyfikacje i wyjaśniajcie z klientem wszelkie nieścisłości. Jeżeli umowa zakłada pocięcie grafiki na stronę WWW musimy znać również ilość stron oraz poziom skomplikowania grafiki. Wiadomo: im bardziej skomplikowana grafika, więcej elementów tym więcej pracy i czasu nad dopasowaniem strony pod różne przeglądarki. Należy o tym pamiętać.

Podobnie ma się sprawa ze zmianami w specyfikacji. Wiadomo – projekt rzecz żywa, w trakcie pracy może się zdarzyć, że klient będzie chciał zmian, często drobnych. Teoretycznie moglibyśmy żądać podpisania aneksu do umowy i wyższej stawki. Czy warto? To pytanie zostawiam Czytelnikowi.

Jak wspomniałem na wstępie, częstą odpowiedzą na pytanie: „za ile” jest „1/10 wartości samochodu”. Zastanówmy się o co chodzi w tym sformułowaniu? Samochód można kupić za 500 zł, ale może kosztować również 2,000,000 zł. Nie warto więc zadawać tego typu pytań na forach dyskusyjnych, a postarać się odpowiedzieć na nie samemu. Można oczywiście prosić o rady, ale przy podaniu większych szczegółów. Na większość pytań jednak należy odpowiedzieć sobie samemu.

4 komentarze

estee.me 2016-10-20 13:20

Właśnie testujemy nasz nowy soft do wycen projektów IT. Jeśli chcielibyście wypróbować i dać nam feedback to zapraszam na http://estee.me

konrad.g 2007-03-05 16:19

Przydatny artykuł i zrozumiale napisany. Musze przyznać, że przydał mi się ;]

Grzybu 2007-03-04 22:27

Artykuł trafiony jakiego dawno nie było :)

Dryobates 2007-03-04 12:49

Moim zdaniem ten artykuł, po usystematyzowaniu, powinien wylądować w jakimś dziale Inżynieria Oprogramowania. Temat wyceny projektów to jeden z elementów tej dziedziny nauki.