O co start-up zadbać powinien. Część 3: Oprogramowanie i jego koszt

Temat rzeka o którym można by napisać książkę. Dla niektórych opisane tutaj rzeczy będą oczywiste a dla innych może kluczowe w podejmowaniu decyzji. Jeśli planujesz podjąć się realizacji projektu internetowego, po raz pierwszy a o programowaniu i procesach wytwórczych posiadasz podstawową wiedzę – ten artykuł jest dla Ciebie. Postaram Ci się pokazać w prosty sposób z jakich elementów składa się dobre i złe oprogramowanie, jakie niesie to za sobą konsekwencje kosztowe i na co warto zwrócić uwagę. Zacznijmy od początku…

Załóżmy, że zamierzasz stworzyć start-up. Masz bardzo dobrze sprecyzowany opis projektu, jasno określone wymagania i oczekiwania. Prawdopodobnie na tym etapie rozsyłasz zapytanie do wszelkiego rodzaju Software House’ów i agencji z zapytaniem o koszt i czas realizacji. W odpowiedzi dostajesz kosztorysy z rozstrzałem niekiedy 1000% (tak, tysiąca procent). Niemożliwe?  A jednak. Jak to się dzieje, że w jednej firmie za (teoretycznie) to samo musisz zapłacić kilkukrotnie więcej? Pomijając różne zrozumienie zakresu projektu (to się zdarza) każda firma posiada często inny proces wytwórczy, oferuje inną jakość tworzonego oprogramowania jak i komunikacji czy organizacji samego procesu. Przyjrzyjmy się zatem tym aspektom dokładniej.

Podstawowe elementy składowe oprogramowania bezpośrednio wpływające na jego koszt:

  • Sposób realizacji
    Mowa przede wszystkim o metodologii realizacji projektu, sposobie jego organizacji, zarządzaniu i pilnowaniu porządku. Jeśli projekt jest prowadzony z dużym zaangażowaniem przez doświadczonego project managera oczywiste jest, że jego realizacja jest będzie bardziej kosztowna niż „obsługa” przez team leadera programistów (a tak się też zdarza). Do tego dochodzi dostęp do narzędzi monitorujących postęp prac, dostęp do cyklicznych raportów. Dobra organizacja i utrzymanie porządku w nawet średniej wielkości projekcie, w którym bierze udział chociażby 5 osób wymaga bardzo dużej ilości pracy, którą ktoś wykonać musi. Jeśli nie mamy dużego budżetu – niestety programiści realizujący projekt nam go nie zapewnią a poczucie ładu i porządku zniknie. W mojej ocenie – lepiej jest zrobić mniej (funkcjonalnie) ale lepiej jakościowo i organizacyjnie.
  • Projektowanie 
    Czy wyobrażasz sobie budowę domu bez projektu architekta mówiąc na każdym kroku murarzom gdzie mają postawić daną cegłę? Nie? Ja też nie, natomiast przygotowanie dobrego projektu aplikacji, prototypów, specyfikacji, przyzwoitych opisów zajmuje czas i pochłania sporą część budżetu. Cóż, nie chce Cie przekonywać jak jest to ważne, natomiast próba rozpoczęcia projektu bez tego elementu to początek końca. Tworzenie oprogramowania to wiedza ścisła gdzie nie ma miejsca na niedomówienia i domysły. Wszystko musi być jasno napisane od A do Ż. Jeśli tego nie ma – żaden developer nie powinien dotknąć nawet klawiatury gdyż każda przepracowana przez niego godzina może być stracona. Zapamiętaj – dobre prototypy ze 100% pokryciem w ekranach interfejsu, specyfikacja funkcjonalna + techniczna oraz opisane algorytmy przeliczeniowe/działania (o ile występują w projekcie) to absolutne minimum i bezwzględnie warte inwestycji.
  • Kompetencje i doświadczenie członków zespołu realizującego
    Sprawa wygląda dość prosto – im mniej doświadczony zespół tym tańszy (znacznie). Doświadczenie jest kluczowe jeśli zależy Ci aby projekt został zrealizowany bezbłędnie i z zachowaniem bardzo wysokiej jakości i kultury kodu. Pamiętaj – osoba doświadczona zna efekt swojej pracy zanim ją wykona. Ta niedoświadczona dopiero sprawdzi czy jej sposób realizacji był prawidłowy czy błędny. Doświadczenie to wartość, którą się wypracowuje latami, dlatego się ją tak bardzo ceni. Jest też druga strona medalu – korzystając z usług specjalistów i płacąc za nich nawet 2x czy 3x więcej w ujęciu godzinowym zyskujesz przede wszystkim czas (szybciej wykonana praca), nerwy i oszczędzasz na przyszłym rozwoju oprogramowania. Czemu oszczędzasz również na rozwoju? Ponieważ rozbudowa świetnie napisanego oprogramowania jest 2-3x tańsza od takiego, gdzie trzeba większość przepisywać lub tworzyć na nowo.
  • Zarządzanie projektem
    Nawiązałem do tego w pierwszym punkcie „Sposób realizacji”. Mowa o zaangażowaniu osoby prowadzącego projekt po stronie Wykonawcy. Wierz lub nie ale możliwość spotkania się u Ciebie w biurze „za 2 godziny” jest bardzo cenną wartością. Wiemy, że w dzisiejszych czasach można pracować na odległość natomiast bezpośrednie spotkania mają jednak niezastąpioną wartość tym bardziej jeśli projekt nie dotyczy tylko prostej strony firmowej. Wspólne burze mózgów, rysowanie rozwiązań – gwarantuje Ci – jest dla projektu nieocenione!. Kolejną olbrzymią wartością (tym razem nawiązując do doświadczenia) są:

    • elastyczność (gotowość na drobne zmiany projektu podczas jego wdrażania)
    • terminowość (bezwzględnie!)
    • przewidywanie zagrożeń i zarządzanie ryzykiem (bardzo skomplikowane lecz wartościowe)

    Dobry project manager przewidzi zagrożenia w realizacji projektu zanim się one jeszcze pojawią, podpowie najlepsze rozwiązanie i dopilnuje aby zadania były zrealizowane w terminie. Brzmi prosto i banalnie ale uwierz mi – wymaga to bardzo dużego wysiłku, poświęcenia a przede wszystkim wiedzy i doświadczenia w zrealizowanych już projektach.

  • Wybór technologii
    Mowa tu przede wszystkim o umiejętnym doborze rozwiązań informatycznych gwarantujących nie tylko możliwość rozbudowy (ponieważ to oferuje prawie każdy developer) ale również: publiczny dostęp do bardzo dobrej dokumentacji, dużej społeczności ludzi korzystających z tych samych technologii oraz dostępu do firm (na danym rynku), które w razie potrzeby mogły by z powodzeniem przejąć i kontynuować projekt. Uwaga! Uważaj na gotowe platformy „autorskie” gdyż podstawową ich wadą jest fakt, iż nikt poza autorem i jego zespołem nie tego nie zna. W przypadku zakończenia współpracy z autorem dana platforma nie jest już rozwijana a znalezienie śmiałka chętnego dotykania tego graniczy czasem z cudem. Wybór technologii nie jest prosty, powinien być dokonany po dokładnej analizie wszystkich wymagań i oczekiwań a także z uwzględnieniem stanu rynku i możliwość zapewnienia odpowiednich specjalistów do późniejszej obsługi wybranych platform, systemów czy technologii.
  • Dodatkowe licencje
    Licencjonowanie, czyli to o czym się często zapomina tworząc pod hasłem „open source”. Niestety, nie zawsze jest tak, że wszystkie składniki systemu są bezpłatne. Niektóre wymagają osobnych licencji a niektóre mają licencje bezpłatne tylko do rozwiązań niekomercyjnych. Warto się temu dokładniej przyjrzeć gdyż może to wpłynąć znacznie na cenę finalną oprogramowania. Kilka przykładów:

    • Odtwarzacz video płatny lub bezpłatny?
    • Środowisko programistyczne płatne czy darmowe? (PHP/Python czy .NET)
    • Transkodowanie video darmowe czy płatne? (Red5 vs. Adobe Media Server)
    • Bazy danych płatne czy darmowe? (Oracle vs. MySQL)
    • Monitoring serwera płatny czy darmowy? (New Relic vs. Zabbix)

    To tylko kilka prostych przykładów z różnych obszarów oprogramowania, które ma duże przełożenie na koszt. Zwróć uwagę na każdy detal aby nie okazało się, że po roku musisz odnowić licencje o znacznej wartości.

  • Testy i ich zakres
    Przyzwoite i obszerne testy oprogramowania wiążą się z bardzo dużymi nakładami czasowymi a także finansowymi. Na etapie analitycznym projektu trzeba określić ryzyka i możliwą awaryjność odpowiednich fragmentów aplikacji a następnie podjąć decyzje co do koniecznego zakresu testów zapewniających należyte sprawdzenie poprawności działania – tak jednorazowo jak i w procesach cyklicznych (testy automatyczne). Typów i sposobów testowania jest bardzo wiele. Te najprostsze smoke-testy w większości możesz wykonać nawet sam natomiast nie ma to zbyt wiele wspólnego z profesjonalnym sprawdzeniem oprogramowania a jedynie pozornym przeświadczeniem, że „wszystko jest ok”. Temat testowania oprogramowania jest bardzo ważny natomiast doceniany niestety dopiero wtedy gdy dużo elementów nie funkcjonuje tak jak trzeba i jest konieczność „ratowania projektu” (zazwyczaj ASAP (wink)). Tworząc aplikacje dowiedz się jakie testy i w jakim zakresie są Ci oferowane jak również w jaki sposób mają być później przeprowadzone.
  • Gwarancja
    Powinna być minimum dwuletnia. Praktyką na rynku niestety jest ta roczna. Wiadomo, że gwarancja 24 miesięczna kosztować będzie więcej ale z doświadczenia wiemy, że w dużym oprogramowaniu pewne błędy pojawiają się dopiero po osiągnięciu pewnej krytycznej skali danych co może nastąpić na przykład po 1,5 roku. W mojej ocenie najlepszym rozwiązaniem jest długi okres gwarancyjny w połączeniu z usługa wsparcia technicznego. Dopiero taki zestaw pozwoli zachować najlepszy stan oprogramowania przez długi czas.
  • Utrzymanie i wsparcie po zakończeniu produkcji
    Pamiętaj, że nie jest to gwarancja. Jest to dodatkowa usługa dostarczająca Ci rozszerzoną opiekę Wykonawcy nad dostarczonym wcześniej produktem. Często w skali miesiąca zawiera godziny programistyczne, które możesz przeznaczyć na rozwój swojego oprogramowania. No i to co najważniejsze – masz pewność, że ktoś cały czas dba, konserwuje i utrzymuje wysoką jakość całego systemu a co za tym idzie – czas życia produktu będzie znacznie dłuższy.

Podsumowując – są wskaźniki łatwo mierzalne jak np. ilość lat gwarancji jak również te bardziej złożone jak proces wytwórczy. Realizując dużą inwestycję warto wziąć pod uwagę wszystkie i odpowiedzieć sobie na szereg pytań – na czym mi tak na prawdę zależy. Sama cena usługi w ofercie niestety w tej branży nie jest najlepszym kierunkowskazem i warto każdą rozbić na czynniki pierwsze.

Cookies

Nasza strona internetowa używa plików cookies (tzw. ciasteczka) w celach statystycznych, reklamowych oraz funkcjonalnych. Każdy może zaakceptować pliki cookies albo ma możliwość wyłączenia ich w przeglądarce, dzięki czemu nie będą zbierane żadne informacje. Czytaj więcej


Notice: ob_end_flush(): failed to send buffer of zlib output compression (1) in /home/gogomedia/public/blog/wp-includes/functions.php on line 4757

Notice: ob_end_flush(): failed to send buffer of zlib output compression (1) in /home/gogomedia/public/blog/wp-includes/functions.php on line 4757