Ostatnio dużo się piszę w polskim internecie na temat tego, że powinniśmy się cały czas rozwijać, sprawdzać nowe to rozwiązania, wykorzystywać coraz to nowsze biblioteki, może nawet i tworzyć takie, które nam ułatwią życie.
Większość tych postów jest nastawiona negatywnie – w sposób jawny lub nie jawny – do osób/firm, które nie przechodzą lub nie mają możliwości przejścia na najnowsze technologię.
Każdy z postów przeważnie zakłada, iż jak ktoś chce być programistą lub tworzyć oprogramowanie to trafia on do pewnej szufladki – szufladki samodoskonalenia.
Jest to taka szufladka, do której wrzuca się ludzi, o których ma się mniemanie ludzi, dążących do lepszego jutra poprzez spędzanie dodatkowego czasu na uczeniu się nowinek. Geeków, nerdów i innych jak ich sobie nazwiemy, którzy wstają wcześnie rano lub kładą się późną nocą, bo chcą opanować coś nowego, nauczyć się i wykorzystać zdobytą wiedzę w projekcie.
Jednak, czy aby na pewno znacie tylko takich programistów? Tylko z takimi ludźmi pracujecie, co wracają do domu, włączają komputer i dalej się szkolą? Ale ten świat byłby nudny gdyby każdy tak robił!
Podczas mojej współpracy z programistami, natrafiałem na różnych ludzi, każdy miał własne wartości i podchodził do życia inaczej. Niektórzy lubili siedzieć i próbować każdą nową technologię, inni nie chcieli o tym słyszeć a jeszcze inny chcieliby ją spróbować/wypróbować, jednak nie kosztem czasu prywatnego.
Czy w takim momencie wchodzenie w najnowsze technologie, wykorzystywanie w projekcie zespołowym za każdym razem innej technologii/innej biblioteki jest dobrym rozwiązaniem? Czy to co sądzimy jako geek, że pomoże w projekcie, na pewno pomoże?
Czy ktoś z was naprawdę zastanowił się nad kosztem wprowadzenia np.: Knockout w następnym projekcie – nie prywatnym, firmowym? Ile to tak naprawdę będzie kosztowało? Jaki będzie z tego zysk? Jakie ma zobowiązania firma? Jak dobrzy wy (lub wasi lokalni guru w projekcie) jesteście by w razie fiasku wprowadzenia Knockout, wyprowadzić projekt na prostą.
Jeżeli nie, to warto byście się tym zainteresować, gdyż nie zawsze technologia, która ma pomóc w projekcie, pomoże.
Istnieje coś takiego jak learning curve, i w zależności od tego ile tych rzeczy nowych wprowadzacie, jak i jak zmieniacie architekturę itp., może się okazać, że learning curve będzie zbyt duże dla danego projektu.
Łatwo jest powiedzieć: wykorzystajmy (ćwierknąć o tym i powiedzieć jaka zajebista firma), gorzej zachęcić innych do wykorzystania, albo nauczyć ich jak z tego korzystać.
Wyobraźcie sobie zespół ludzi, którzy chcą napisać nową stronę, chcą wykorzystać knockout, ale do tego uczą się wciąż programować, nie czują się pewnie. Do tego jeszcze zaczynamy wykorzystywać ASP.NET MVC i trzeba opanować w miarę możliwości HTML, CSS i obsługę zdarzeń za pomocą JavaScript (czy to przez bibliotekę zewnętrzną czy natywnie). Dodajmy do tego CQRS, Massive, SQL CE, Path.JS oraz Twitter Bootrsap.
Ustalmy termin oddania oprogramowania na za dwa/trzy miesiące, i wrzućmy w to 5 programistów plus dwóch, którzy już trochę poznali te biblioteki.
Jak sądzicie, jaki będzie wynik? Jakie morale? Czy dalej będziecie myśleć, że najnowsza biblioteka, lub ta fajna nowa, którą dodaliście do projektu to był dobry pomysł? Czy zespół będzie z chęcią siedział po godzinach w domu i poznawał nowe biblioteki? Czy 2-5 dni szkoleń wystarczą?
Czy firma, która w tym momencie nie godzi się na wykorzystanie biblioteki jest zła i niefajna i nas ogranicza?
Oczywiście przypadki są różne i odpowiedzi różne, czasami firma mówi nie i nie daje wytłumaczenia lub mówi bo tak, czasami da odpowiedź, czasami klient nie zezwala na tego typu biblioteki, a jeszcze indziej zespół mówi wal się i odpala ASP.NET WebForms i przeciąga kontrolki na formularz w wizualnym edytorze.
Jednak, nawet mając zespół, który jest chętny i chce wykorzystać najnowsze technologię i ich się nauczyć, oraz firma się na to zgadza, czy to aby na pewno dalej jest dobry pomysł?
Z doświadczenia mogę powiedzieć, że nie, to nie jest dobry pomysł, chyba że jest to jakiś rodzaj company pet project gdzie te technologie są wykorzystywane dla testu. Jest czas na naukę, na konsultacje, na próbowanie itp. Wszystko w ramach godzin pracy.
Jednak, możliwość wykorzystania tych technologii w projekcie komercyjnym może narzucić zbyt duży learning curve, który spowoduje, iż cała przyjemność z pisania kodu gdzieś ucieknie. Zamiast pisać kod będziemy zbyt dużo czasu poświęcać na próbowaniu i testowaniu pewnych kolejnych pomysłów, jak i czytaniu jak to można poprawnie wykorzystać. Na spotkaniach zespołu nie będziemy mówili o postępach a o problemach.
Nagle całą tą zajebistość szlak trafi. By zdążyć na czas, spadnie jakość projektu, nie wspominając już o testach i innych dobrych zasadach programowania. Będziemy pisać coś by to napisać, skończyć i o tym zapomnieć – starają się nie przyznawać, że w takim projekcie braliśmy udział.
Nawet, jak dostaniemy ekstra czas na do by przygotować solution do pracy, stworzyć architekturę i ustalić konwencję – czy dalej to ułatwi adaptację danej biblioteki? Nie, wręcz może to jeszcze bardziej zaszkodzić, gdyż w tym momencie pewnie trzeba by wytłumaczyć, na jakich zasadach działa całe solution.
Wszystko to jednak zależy od teamu, i jak bardzo jest on zaawansowany. Niezależnie od tego, na pewno nie będzie to dream team (o tym tylko czytałem, nie widziałem), a co najwyżej naprawdę dobrze zgrany zespół (to nie raz widziałem), gdzie każdy jest na różnym poziomie wiedzy programistycznej (a to raczej nazwał bym standardem). Czyli wciąż będzie występował learning curve.
Tak czy siak, następnym razem zanim wprowadzicie nową(e) bibliotekę, zastanówcie się jaki ona będzie miała impact na zespół i czy czas spędzony nad poznawaniem jej i zrozumieniem jak działa, naprawdę się opłaci w tym projekcie czy może lepiej po projekcie usiąść i w wolnej chwili przeprowadzić szkolenie i pokazać gdzie ta biblioteka pomoże, na jakiej zasadzie ona działa i jak mogłaby ona przyspieszyć czas pracy gdy każdy ją poznał. Nawet jak firma nie da wam możliwości przeprowadzanie potem pet project, to na pewno 2h spotkanie podsumowujące ostatni projekt będzie możliwe, można to wykorzystać i tam przedstawić swoje obserwacje. I zachęcić do spróbowania biblioteki.
Osoby, które nie chcą siedzieć w domu po godzinach nad projektem, znajdą te 20-30 minut podczas dnia by się nią pobawić, zobaczyć jak z niej korzystać. Zaczną się z nią zaprzyjaźniać a to już wystarczy by w kolejnym projekcie zmniejszyć learnig curve i zwiększyć wydajność zespołu.
Pytanie do was: Czy dalej uważacie, że jeżeli nie wykorzystacie tej biblioteki, którą chcielibyście to na tym stracicie? Czy zespół na tym straci? Czy firma, która wam odmówiła jest zła?
A niech cię, też chciałem mniej więcej o czymś takim niedługo pisać:). Dodam tylko że dodatkowym ryzykiem wprowadzenia "nowej" biblioteki jest to, że ktoś musi potem projekt utrzymywać. Zostając przy przykładzie Knockout: ja się zajaram, nauczę, wrzucę do projektu i mi będzie fajnie. Odejdę z pracy i ktoś inny MUSI uczyć się Knockout żeby projekt rozwijać. A jeśli on to MUSI robić, niezależnie od tego czy chce, to istnieje prawdopodobieństwo większe od zera, że zajmie się tym byle jak, byle szybciej, klnąć pod nosem na mnie i moją rodzinę. I w efekcie wyjdzie klops, mimo moich dobrych intencji na samym początku.
true, support rozwiazan to kolejny problem o ktorym tak naprawde nikt nie pomysli. Pamietam jak w jednej firmie spedzilem okolo tygodnia czasu tlumaczac support team co i jak, czas ktory moglaby firma wykorzystac zupelnie innaczej.
OO… jak pięknie wpisuje mi się to w podsumowanie mojej ostatniej serii, pozwolisz, że zalinkuje
Comments are closed.