Mobile and web app development - Appchance - Digital Products Experts

22 lutego, 2018

Dlaczego warto outsourcować usługi deweloperskie i co należy wiedzieć o outsourcingu?

Jedna z zasad biznesu mówi:

Jeżeli możesz zrobić coś taniej, a zarazem równie dobrze, to powinieneś zrobić to taniej. Jeżeli zaś możesz zrobić coś lepiej... to powinieneś zrobić to lepiej.

A gdyby tak można mieć jedno i drugie – i niższą cenę, i wyższą jakość?

In-house vs. outsourcing: co lepsze?

Zatrudnianie deweloperów in-house najczęściej wiąże się z koniecznością poniesienia dodatkowych kosztów – m.in.: rekrutacji, onboardingu, sprzętu, narzędzi, benefitów etc. Dochodzą do tego koszty weryfikacji kompetencji nowo zatrudnianych pracowników oraz straty wynikające z rotacji.

Nic więc dziwnego, że coraz więcej przedsiębiorców decyduje się na korzystanie z usług zewnętrznych firm deweloperskich. Usługi software house'ów zdejmują z nas odpowiedzialność za czasochłonny proces rekrutacji, wdrożenia i lojalizacji; w konsekwencji – skutecznie zmniejszają koszty projektu i skracają czas potrzebny na jego realizację.

Oszczędność czasu i pieniędzy to nie jedyne zalety outsourcingu. Poniżej przyjrzymy się innym aspektom związanym z zatrudnianiem zewnętrznego zespołu, zarówno tym, które niosą za sobą korzyści, jak i tym, które stanowią wyzwania.

5 zalet outsourcingu usług deweloperskich

Skupienie na kluczowym obszarze działalności

Jeżeli nie działamy na rynku usług programistycznych, to budowanie działu IT od podstaw może utrudnić lub opóźnić rozwój kluczowego obszaru naszej działalności. I nie chodzi tu tylko o zasoby finansowe – te zawsze możemy ulokować lepiej lub gorzej – ale o naszą pracę i czas. Konieczność równoległego rozwijania kilku aspektów działalności rzadko oddziałuje korzystnie na którykolwiek z nich. Delegowanie prac programistycznych na zewnątrz pozwoli nam zachować większą kontrolę nad kluczowym obszarem naszej działalności i lepiej zarządzać strategicznymi aspektami rozwoju naszego biznesu.

Ułatwione zarządzanie

Dzieląc czas pomiędzy kluczowym obszarem naszej działalności i budowaniem od podstaw nowego działu, ryzykujemy sytuację, w której ani jeden, ani drugi nie będzie zarządzany poprawnie. Rekrutowanie, a następnie organizowanie pracy kilku lub kilkunastoosobowego zespołu, związane jest ze znacznym wysiłkiem po stronie kadry zarządzającej. Natomiast zatrudnianie dodatkowych managerów każdorazowo wiąże się z kosztami i długotrwałym procesem rekrutacyjnym.

Zarządzanie outsourcingiem firmy zewnętrznej jest prostsze, ponieważ cały proces realizacji projektu znajduje się po stronie wykonawcy, a po stronie zleceniodawcy praca jest koordynowana przez jedną (lub kilka) wyznaczoną do tego osobę.

Co więcej, firmy takie, działając na bardzo konkurencyjnym rynku, dążą do maksymalnego usprawnienia procesu prowadzenia projektu. Ich pracownicy mają duże umiejętności i doświadczenie w zakresie realizacji tego rodzaju zadań. Pozwala im to rozwiązywać bieżące i antycypować przyszłe problemy, co pozytywnie wpływa nie tylko na czas realizacji projektu, ale również na jego jakość.

Większa elastyczność

Zatrudnianie kontraktorów i outsourcing firm zewnętrznych zwiększają elastyczność zarządzania biznesem. Możemy więc np. prowadzić outsourcing sezonowy, tj. zatrudniać firmy zewnętrzne i podwykonawców tylko wtedy, kiedy rzeczywiście ich potrzebujemy. Dla przykładu – celem wprowadzania cyklicznych aktualizacji w naszej sklepowej aplikacji. Możemy też outsource’ować poszczególne projekty; zewnętrzny software house chętnie zajmie się dla nas realizacją takiego zlecenia, a po ich zamknięciu nie będziemy musieli martwić się o organizowanie zadań dla nowych pracowników.

Transfer wiedzy

Jedną z najważniejszych zalet outsourcingu jest częściowy transfer wiedzy pomiędzy firmą zewnętrzną a nami. Działa to zresztą w obie strony – tak jak nasi pracownicy uczą się od pracowników kontraktora, tak i jego uczą się od naszych. My zyskujemy specjalistyczną wiedzę na temat sposobów implementacji konkretnych rozwiązań i technologii; software house – na temat specyfiki rynku, na którym działamy, oraz oferowanych przez nas produktów. Zarówno jedna, jak i druga strona mogą wykorzystać tę wiedzę w przyszłości: my – przy kolejnej implementacji, software house –  przy kolejnej współpracy.

Ponadto, transferowi podlegają też, przynajmniej po części, umiejętności miękkie, związane z organizacją pracy i rozdzielaniem pracy w zespole, komunikacją wewnętrzną i zewnętrzną, a także kulturą organizacyjną.

Inna perspektywa oceny projektu

Zyskujemy możliwość zweryfikowania swoich przekonań i uzyskania opinii na temat naszego projektu z perspektywy zewnętrznego podmiotu. Wiedza software house'u zgromadzona podczas wcześniejszych realizacji jest dobrą bazą do wdrożenia usprawnień w naszym projekcie. Istnieją rozwiązania, które doskonale się sprawdzają w poszczególnych typach biznesu. Zatem nie ma potrzeby wyważania otwartych drzwi. Dobrym rozwiązaniem dla części klientów jest przeprowadzenie warsztatów określających zakres projektu.

5 rzeczy, które musisz wiedzieć przed rozpoczęciem współpracy z software house'em

Punkt kontaktu

Osobą odpowiadającą za kontakt z klientem po stronie software house'u będzie najczęściej Project Manager. Jest to człowiek odpowiedzialny za zarządzanie projektem, kontakt zewnętrzny (z klientem) i wewnętrzny (z zespołem programistów). Najlepiej myśleć o nim jak o swojego rodzaju tłumaczu – jego zadaniem jest przełożenie języka potrzeb klienta na język pracy programistów. Nadzoruje on również prace projektowe, dba o harmonogram i terminy, rozdziela zadania i weryfikuje postęp prac.

Najrozsądniej wyznaczyć jedną osobę odpowiedzialną za kontakt z Project Managerem również po naszej stronie, choć takich osób może być naturalnie więcej. Najważniejsze jednak, żeby ustalić pomiędzy nimi hierarchię ważności. Pozwoli to uniknąć chaosu komunikacyjnego, uspójnić i usprawnić przepływ informacji, a także uniknąć sytuacji, w których Project Manager software house'u otrzymuje sprzeczne (lub pozornie sprzeczne) wytyczne od więcej niż jednej osoby.

Skuteczne zarządzanie projektami

Nie mniej istotną kwestią jest ustalenie zasad i kanałów komunikacji. W pracy z zespołem zewnętrznym szczególnie ważne okazuje się to ostatnie. Komunikować się możemy w standardowy sposób, np. telefonicznie lub mailowo, jednak dobrym pomysłem jest wykorzystanie do tego celu narzędzi do zarządzania projektami, takich jak np. Trello. Platformy tego typu umożliwiają sprawny przebieg komunikacji, a także bezpośredni wgląd w postępy prac nad produktem.

Wykorzystanie narzędzi do zarządzania projektami służy rozdzielaniu prac, przedstawianiu postępów, udzielaniu feedbacku i nadzorowaniu procesu. Szczególnie przydatne okazuje się w następujących sytuacjach:

  • kiedy chcemy zachować bezpośrednią kontrolę nad pracami naszego zewnętrznego zespołu programistów,
  • kiedy posiadamy też zespół wewnętrzny i chcemy wesprzeć jego pracę, zatrudniając do wybranej części zadań zespół zewnętrzny,
  • kiedy musimy zgrać w czasie pracę dwóch lub większą liczbę zespołów zewnętrznych (np. software house'u z agencją marketingową).

Do najczęściej stosowanych narzędzi zarządzania projektem należą:

  • Jira i Trello – popularne narzędzia do zarządzania zadaniami w ramach projektu. Jira umożliwia szeroką customizację widoku zadań – z tego powodu najczęściej wykorzystywana jest wewnętrznie, w ramach zespołu. Trello natomiast to cyfrowa wersja tablicy Kanban – z tego powodu często korzysta się z tego narzędzia do komunikowania klientowi postępów prac.
  • Slack – najpopularniejszy firmowy komunikator. Oprócz bezpośredniego kontaktu umożliwia m.in. przesyłanie plików i tworzenie grup wymiany informacji. Używany zarówno wewnętrznie, jak i do komunikacji z klientami.
  • Skype – najpopularniejsze narzędzie komunikacji zewnętrznej. Przy bardziej złożonych kwestiach – takich, które wymagają wzajemnej konsultacji – Project Managerowie często wykorzystują Skype do bezpośredniego kontaktu z klientami.
  • Bitbucket – popularne wśród programistów narzędzie do śledzenia oraz implementacji zmian w kodzie. Umożliwia wspólną pracę nad jednym programem wielu osobom.
  • Fabric – narzędzie do zarządzania wersjami testowymi aplikacji oraz feedbackiem otrzymywanym od testerów.

Więcej o podstawach dobrej komunikacji na linii klient–software house – w naszym artykule Sztuka słuchania, czyli podstawa dobrej komunikacji.

Więcej o roli Project Managera i jego miejscu w software house'ie – w tekście: Kto jest kim w software house'ie?

Agile w zarządzaniu projektami

Odpowiednia organizacja komunikacji jest istotna nie tylko ze względu na koszty i wygodę. Dużo częściej okazuje się ona po prostu zwykłą koniecznością i wynika ze specyfiki pracy nad produktami tego rodzaju – zwłaszcza nad bardziej rozbudowanymi aplikacjami. Zważywszy na poziom skomplikowania tych zadań, a czasem również na ewoluujące wraz z rozwojem programu oczekiwania klienta, najlepiej nadają się do tego metodyki zwinnościowe (tzw. Metody Agile). Wśród nich Scrum jest jedną z najpopularniejszych. Praca w metodzie Scrum ma wiele zalet:

  • Pozwala na szybkie i łatwe pivotowanie, tj. zmianę wyjściowych założeń w odpowiedzi na zmieniające się warunki i oczekiwania oraz feedback od testerów i wczesnych użytkowników (o ile zdecydujemy się udostępnić im nasz produkt na zasadach early access, wersji beta lub MVP). Umożliwia nam to uniknięcie sytuacji, w której po wielu miesiącach prac nad produktem okazuje się on zupełnie niedopasowany do potrzeb użytkowników. Zwiększa też pewność, że będzie on dopasowany do ich preferencji pod względem UI i UX.
  • Przyspiesza prace nad projektem i sprzyja kreatywności. Praca programisty wymaga ogromnej kreatywności. Jest to szczególnie istotne w większych zespołach, gdzie liczy się gra zespołowa i wspólne rozwiązywanie większych problemów; pewna elastyczność jest tu nie tylko wskazana, ale konieczna do przeprowadzenia projektu.
  • Stanowi odpowiedź na potrzeby programistów. Praca nad oprogramowaniem rzadko stanowi proces liniowy – od punktu A do punktu Z. Metodyki zwinnościowe, w tym Scrum, powstały w odpowiedzi na konkretną potrzebę: konieczność uporządkowania prac nad tego typu projektami, zapanowania nad nimi, a także, co równie ważne, zdawania z nich raportów.

Jako klient software house'u powinniśmy przygotować się do pracy w ramach metodyk zwinnościowych, i to nawet jeżeli z jakiegoś powodu nie jesteśmy ich zwolennikami. Przygotowanie to nie musi być, co zrozumiałe, eksperckie; wystarczy podstawowa terminologia i podstawowa wiedza teoretyczna. Z zapoznaniem się z nią może nam pomóc Słownik pojęć branży IT. Poza tym niektóre software house'y proponują klientowi przeprowadzenie warsztatów z zakresu metodologii agile (w tym m.in. nasz) tak aby pokazać flow procesu oraz zakres odpowiedzialności pomiędzy poszczególnymi funkcjami.

Doświadczeni programiści sami najlepiej wiedzą, jaka metoda pozwoli im osiągnąć cele. W razie wątpliwości najlepiej będzie zapytać Project Managera o powody przemawiające za konkretnymi decyzjami. W przeważającej większości mają one bowiem na celu przyspieszenie prac nad projektem i... zaoszczędzenie nam nieplanowanych wydatków w przyszłości.

Brief produktowy a specyfikacja funkcjonalna

Zastosowanie metodyk zwinnościowych nie oznacza jednak rezygnacji z tradycyjnych elementów tego typu współpracy – tj. konieczności sporządzenia briefu produktowego i specyfikacji funkcjonalnej.

Specyfikacja funkcjonalna jest dokumentem opisującym funkcje i zastosowanie tworzonego produktu; brief produktowy – dokumentem umożliwiającym sporządzenie tej specyfikacji. Dokumenty te, co zrozumiałe, często ewoluują. Bardzo rzadko zdarza się, by klient, przychodząc do software house'u, miał już gotowy brief produktowy. Najczęściej jest on opracowywany już we współpracy z Project Managerem, który doskonale zdaje sobie sprawę, jakich informacji będą potrzebować programiści, oraz jakie rozwiązania warto zarekomendować klientowi. Przeważnie nie trwa to długo – doświadczenie osoby zarządzającej projektem pozwala jej szybko i sprawnie przeprowadzić klienta przez meandry (nierzadko dość skomplikowanych) zagadnień programistycznych. Jednocześnie przygotowywana jest specyfikacja funkcjonalna. Choć w teorii specyfikacja powstaje na podstawie briefu, w praktyce oba te dokumenty często tworzone są równocześnie.

Więcej informacji na temat briefów produktowych i specyfikacji funkcjonalnych (a także o ich zawartości) można znaleźć w poradniku Jakie informacje software house potrzebuje aby wycenić projekt?

Testowanie jako jeden z ważniejszych aspektów rozwoju oprogramowania

Software house może również wziąć na siebie odpowiedzialność za przetestowanie stworzonego przez siebie produktu. W pierwszej kolejności zajmują się tym osoby pracujące na stanowisku Quality Assurance. Są to profesjonalni testerzy oprogramowania, osoby z doświadczeniem w testowaniu tego rodzaju produktów, nierzadko posiadające specjalistyczną wiedzę nt. preferowanej przez użytkowników architektury aplikacji czy kwestii związanych z UX i UI.

Następnie, o ile klient wyrazi zgodę, produkt zostaje udostępniony do testów zamkniętych, otwartych lub półotwartych (np. na zasadzie dostępu ograniczonego czasowo albo geograficznie). Wnioski z takich testów umożliwiają znalezienie błędów i zmodyfikowanie funkcjonalności jeszcze przed wprowadzeniem produktu na rynek.

Kiedy outsourcing aplikacji mobilnych i webowych jest optymalnym rozwiązaniem?

Współpraca z software house'em to coś więcej niż tylko propozycja dla osób wyczulonych na kwestię kosztów alternatywnych. To również wygoda związana z możliwością uwolnienia zasobów wewnętrznych oraz skupieniem się na naszej kluczowej działalności. Jeżeli to właśnie na tym zależy nam najbardziej – to rozwiązanie zdecydowanie jest dla nas.

Więcej o kwestiach, które należy wziąć pod uwagę, wybierając software house znajdziemy w artykule Jak wybrać odpowiedni software house?