Czy warto rozpocząć współpracę z software house? Czy jest sens outsourcingować prace programistyczne? A może lepiej stworzyć stworzyć własny zespół programistów, lub wynająć freelancera?
Postanowiliśmy przedstawić cechy współpracy z software house i porównać je z innymi rozwiązaniami.
Czym jest software house
Zacznijmy od określenia, co rozumiemy przez “software house”. Jest to firma specjalizująca się w tworzeniu oprogramowania. To dość szeroka definicja obejmująca zarówno spółki programistyczne, produkujących oprogramowanie jedynie na potrzeby określonego środowiska biznesowego, jak i niezależne studia programistyczne.
W tym artykule będziemy używać nazwy software house w znaczeniu firmy oferującej usługi programistyczne dla szerokiego grona klientów, zarówno w formie body leasing, czyli “wynajmowania” swoich programistów, jak i realizacji projektów i prac zleconych przez klientów zewnętrznych.
Często oprócz kompetencji czysto programistycznych software house’y oferują również powiązane usługi, takie jak konsultacje, analizy biznesowe, projektowanie UX i UI albo działania SEO. Takie firmy z reguły nie zajmują się usługami marketingowymi ani reklamą, jak to ma miejsce w przypadku agencji interaktywnych.
Software house, to firma do której zwracasz się w celu realizacji projektów programistycznych.
Zalety dobrych software house’ów
1. Specjalizacja technologiczna
Każdy software house posiada swój tech stack, czyli zestaw używanych przez siebie technologii. Język programowania (np. PHP, JavaScript, Python, Java, C++), frameworki (np. Symfony, Laravel), biblioteki, narzędzia do projektowania UI i UX, rozwiązania serwerowe.
Taka specjalizacja wiąże się ze zgromadzeniem istotnie większego doświadczenia w realizacji projektów w danej technologii, wiedzą na jej temat, używaniem narzędzi optymalizujących pracę (punkt nr 2).
W większości przypadków umiejętności członków zespołu wzajemnie się uzupełniają – programiści specjalizujący się w pracach front-endowych współpracują z programistami back-endowymi, testerzy sprawdzają działanie i jakość produktu, a project managerowie zarządzają procesem realizacji.
Podobny zespół specjalistyczny można oczywiście stworzyć również w firmie, jako dział programistyczny. Najczęściej jednak jedynie spółki technologiczne, lub korporacje mają wystarczające środki i potrzeby, by pozwolić sobie na budowę tego rodzaju jednostki. Wymaga to doświadczenia i odpowiedniej wiedzy i nie da się tego zrobić ”na szybko”. Istotny jest też rachunek korzyści, takie przedsięwzięcie nie będzie się opłacało jeśli do wykonania jest stosunkowo niewiele pracy (na przykład tylko jeden projekt).
Freelancerzy także bywają wyspecjalizowani w określonych technologiach. Z reguły jednak specjalizacja w jednego rodzaju technologii (np. programowanie w C++), uniemożliwia wystarczająco dobre poznanie innych technologii (np. JavaScript), a zatem wykonanie zlecenia o dużej złożoności może być dla pojedynczego freelancera niemożliwe.
2. Opracowane metody projektowe i sprawna komunikacja
Software house’y z konieczności muszą wypracować sobie sprawny proces realizacji projektów i komunikacji z klientem. W przeciwnym razie przetrwanie na tak konkurencyjnym rynku nie jest możliwe. Zatem jeżeli firma utrzymuje się na rynku i ewoluuje, to prawdopodobnie znaczy, że skutecznie realizuje swoje zadania.
Doświadczone firmy programistyczne podczas pracy nad swoimi projektami działają metodycznie. Najczęściej posługują się jednym z istniejących i sprawdzonych standardów wytwarzania oprogramowania. Metody takie jak: agile, scrum, waterfall – jeśli są prawidłowo używane, bardzo poprawiają efektywność i umożliwiają pracę nad złożonymi zadaniami, w które zaangażowane jest wiele osób.
Zespół projektowy to nie tylko grupa programistów, która próbuje “wytworzyć” program komputerowy. To także osoby odpowiedzialne za koordynację, zarządzanie zadaniami i harmonogramem, komunikację z klientem, identyfikowaniem i usuwaniem potencjalnych przeszkód pojawiających się się w czasie realizacji projektu. To wszystko istotnie zwiększa szansę, że projekt zostanie prawidłowo wykonany, zrealizowany w terminie, a klient będzie miał możliwie pełną świadomość na temat przebiegu całego przedsięwzięcia.
Realizacja projektu informatycznego nie ogranicza się jedynie do programowania. Kluczowe jest też określenie potrzeb i celów klienta, przygotowanie specyfikacji, analiza adekwatnych rozwiązań, testowanie, zbieranie informacji zwrotnej i wdrożenie. Każdy z tych etapów jest ważny i każdy ma swoje metodologie i procedury. Tak samo jak w interesie klienta, także w interesie firmy programistycznej jest, aby te etapy były skuteczne i przebiegały sprawnie. Dobre software house’y nie zajmują klientowi więcej czasu, niż to konieczne.
Istotna różnica występuje w przypadku porównania software house z freelancerami, w przypadku których metodyka prac, używane narzędzia z reguły nie są stosowane. W takich przypadkach to na kliencie spoczywa odpowiedzialność za identyfikowanie problemów, monitorowanie prac oraz egzekwowanie ich efektów.
3. Jakość realizacji
Ze względu na to, że software house’y skupiają się na pracach programistycznych są w stanie zarówno opracować efektywne procesy realizacji prac, jak i wydelegować do tych prac najlepszych specjalistów. Środowisko pracy w tego typu firmie wymaga ciągłego rozwoju zawodowego, gromadzenia doświadczenia i doskonalenia swoich umiejętności, a więc i specjalizacji.
Software house’y już na etapie rekrutacji pracownika analizują jego doświadczenie, wiedzę i potencjał selekcjonują najlepszych kandydatów. Zatem specjalizacja software house’ów w domenie programowania pozwala na stworzenie kompetentnego zespołu, co przekłada się na jakość realizowanego przez niego prac. Można powiedzieć, że działa tu zasada naturalnej selekcji – w firmach o takim charakterze z reguły pracują najlepsi programiści.
Software house’y z reguły posiadają wewnętrzne narzędzia i procedury weryfikacji jakości prac. A zatem Klient otrzymuje sprawdzony produkt o wysokiej jakości.
Natomiast freelancerzy, mimo tego, że ich umiejętności oraz doświadczenie może być znaczne, z reguły nie pracują w zorganizowanych zespołach, w których proces kontroli jakości pozwala na jej weryfikację, co przenosi konieczność kontroli dostarczonego produktu na klienta.
4. Kontrola budżetu i elastyczność finansowa
Programista to aktualnie jeden z najlepiej opłacanych zawodów, a co za tym idzie koszt rekrutacji i zatrudnienia dobrego developera jest wysoki.
Firmy starające się zbudować swój własny zespół programistów narażone są na stały, wysoki koszt jego utrzymania, niezależnie od tego, czy taki zespół ma w danym okresie realną pracę do wykonania, czy jej nie ma. Outsourcing prac programistycznych do specjalistycznych firm programistycznych pozwala na redukcję kosztów i uzależnienie ich od bieżących potrzeb.
Współpraca z software house na zasadzie fixed price (z góry określony budżet), pozwala Klientowi na ścisłe kontrolowanie koszty realizacji projektu. Nawet przyjęcie metody rozliczeń time&material (otwarty budżet, rozliczanie za czas pracy), w większym stopniu umożliwia kontrolowanie kosztów, bo zobowiązuje software house do dokładnego raportowania czasu pracy i tego na co został wykorzystany.
W tym punkcie ujawnia się istotna różnica pomiędzy software house, a własnym zespołem programistycznym. O ile software house może zaproponować konkretne warunki finansowe za realizację określonych prac, czy to na zasadzie fixed price, czy pakietu rozliczeń time & materials, to w przypadku własnego działu programistycznego koszty realizacji konkretnego projektu są stosunkowo duże trudniejsze do prognozowania.
Począwszy od kosztów rekrutacji i utrzymania pracowników, kosztów zarządzania zespołem, zapewnienie odpowiedniego sprzętu i oprogramowania, wynajmu biura i administracyjnych, premii, urlopów i zwolnień lekarskich.
Istnieją metody i narzędzia monitorowania czasu pracy i raportowania kosztów, jednak nie pozwalają one na taką dokładność, jak w przypadku outsourcingu, gdzie całkowity koszt pracy ustalony jest z góry (fixed price), lub można go łatwo zweryfikować na podstawie wystawionych przez wykonawcę faktur.
5. Oszczędność czasu
Jedną z największych korzyści płynących z zatrudnienia software house jest oszczędność czasu którą uzyskuje klient. Jest to czas który potrzebny byłby na rekrutację programistów, weryfikację ich kompetencji, zatrudnienia, lub delegowania osób, które zajmowałyby się planowaniem i koordynacją prac projektowych, raportowaniem, testami.
W przypadku współpracy z software house’ami po stronie klienta często wystarcza jedna osoba odpowiedzialna za werbalizację potrzeb klienta i weryfikację dostarczonych produktów, ich zgodności z oczekiwaniami i specyfikacją. Niezależnie czy projekt prowadzony jest metodą agile, czy metodą waterfall wszystkie procesy nie wymagające udziału klienta realizowane są w ramach zespołu software house.
6. Support powdrożeniowy
Większość firm gwarantuje w ramach realizowanych prac okres opieki (support powdrożeniowy). W przypadku Smultron jest to zwykle 12 miesięcy i z doświadczenia wiemy, że jest to rozsądny i wystarczający okres. Pomimo testów oraz kontroli jakości, ważne jest monitorowanie przez pierwsze tygodnie od publikacji projektu (strony, sklepu internetowego, aplikacji, czy innego narzędzia webowego) jego działania. Tego typu support szybka reakcja pozwala na wychwycenie ewentualnych błędów związanych z działaniem produktu, jak również jest punktem wyjścia do jego doskonalenia i rozwoju.
O ile własny dział programistyczny daje gwarancje supportu i umożliwia wewnętrzne rozwijanie produktu, to trudno oczekiwać takiej obsługi gwarancyjnej od programistów działających na zasadzie freelance. Szczególnie gdy pracują oni w pojedynkę i nie mają wsparcia pozwalającego na szybkie zweryfikowanie zgłoszeń klientów i ich sprawdzenie.
Podsumowanie
Wybór sposobu realizacji projektu zależy od kilku czynników: od jego budżetu, harmonogramu, złożoności i wymagań technologicznych oraz perspektywy rozwoju.
W niektórych przypadkach zatrudnienie freelancera nie musi być złym pomysłem, szczególnie jeśli projekt nie jest złożony, ma dokładnie określoną specyfikację i opracowany layout, a freelancer ma dobrą renomę.
Jednak nawet w takim przypadku osobie nie będącej specjalistą trudno jest zweryfikować kompetencje programisty i najczęściej sama musi nadzorować jego pracę, a jej efekty czy support postprodukcyjny z reguły nie jest gwarantowany.
W przypadku większych, bardziej złożonych projektów pozostaje wybór między stworzeniem albo rozwijaniem własnego działu programistycznego, lub zatrudnieniem software house.
Własny dział konieczny jest w dużych firmach, szczególnie tych technicznych, produkujących oprogramowanie na swój użytek, czy rozwijających własne produkty. Choć tutaj współpraca wewnętrznego działu IT z firmą software house nie jest wykluczona, a nawet bywa efektywna, co możemy potwierdzić z własnego doświadczenia.
Największa zaleta współpracy z software house, jak przy większości outsourcingów, wynika z wygody i elastyczności tej współpracy. Można ją w stosunkowo prosty sposób zaplanować, określić jej ramy i koszty. Pozwala na kontrolę kosztów i czasu. Z reguły gwarantuje też wysoką jakość realizowanego produktu.
Mamy nadzieję, że wiedza zawarta w tym artykule będzie dla Ciebie pomocna, a jeśli miałbyś jakieś uwagi, to zapraszamy do komentowania na naszym Facebookowym fanpage’u 🙂