Niedawno rozpocząłem projekt, który nie wydawał się zbyt trudny do wykonania, koncepcja była dość prostą aplikacją, która musiała od czasu do czasu akceptować dane wejściowe (może 10 razy dziennie) i próbować wykonywać na nich pewne operacje i zbierać wszystkie wyniki na końcu. Ta aplikacja uzyskałaby wówczas front-portal internetowy, z którego klienci mogliby korzystać, aby zobaczyć wyniki, nie do końca rakietowe.
W tym celu początkowo korzystałem mądrze z wbudowanych bibliotek współbieżności Pythona ( ThreadPoolExecutor
) i korzystałem z łatwej w obsłudze biblioteki dla interfejsu (wybrałem Flask, ponieważ jest łatwy dla początkujących oraz stosunkowo łatwy w utrzymaniu i testowaniu).
Gdy byliśmy w połowie projektu, szef rządu stwierdził, że zamiast wątków musieliśmy korzystać z możliwości kolejki wiadomości innych firm i wdrożyć równoważenie obciążenia, co ostatecznie się skończyło, że w końcu zaczęliśmy współpracować z Celery, Redis, RabbitMQ, Nginx, uWSGI oraz szereg innych dużych usług stron trzecich, z którymi nikt nie miał prawdziwego doświadczenia.
Ostatecznie doprowadziło to do powstania spaghetti kodu, nie dających się przetestować zadań (ze względu na złożoność bibliotek stron trzecich, łatanie kodu nawet nie działało) i wielu kłopotów, ponieważ nikt nawet nie wiedział, jaka jest wartość dodana tych usług .
Zanim powiesz „Tak, powinieneś korzystać z tych usług”, pamiętaj, że nikt nie wie, jak z nich korzystać, a nawet nie wie, co robią, oprócz wprowadzenia zaraźliwego kodu dotyczącego warunków rasowych.
Co mam z tym zrobić? W tym momencie powrót do tego, co mieliśmy, byłby po prostu zbyt kosztowny, a premier jest całkowicie uzależniony od korzystania z tych usług, nawet jeśli produkt końcowy jest obecnie gorszy niż na początku. Czy dyskusja z nim jest w ogóle przydatna? Czy proszę o więcej czasu? Lub trudna odpowiedź: czy jestem po prostu zbyt głupia dla mojej pracy?
źródło
Odpowiedzi:
To nie jest właściwe, aby premier „jednostronnie” stwierdził. Dwa powody:
Decyzje projektowe powinny być podejmowane przez zasoby techniczne i wyłącznie w odpowiedzi na NFR . Dlatego uprzejmie zapytaj swojego premiera, czy jest nowy NFR i czy możesz podać szczegółowe informacje.
Jeśli NFR jest wprowadzany w połowie projektu, prawdopodobnie należy to zrobić za pomocą kontroli zmian . Kontrola zmian jest bardzo ważna z punktu widzenia zarządzania; będzie to nie tylko wkład w twoje wymagania, ale także ważny wkład w przypadki testowe QA, podręcznik wdrażania i wsparcia operacji oraz (tutaj jest naprawdę ważna część) harmonogram PM . Jeśli nowy wymóg wprowadza więcej pracy, zespół programistów powinien mieć możliwość przekazania nowych prognoz rozwoju, a premier będzie musiał zdecydować, czy może żyć z nową datą, dodać więcej zasobów lub odeprzeć interesariusza, który wprowadził NFR.
Teraz, jeśli naprawdę istnieje naprawdę dobry NFR i nie można go obejść, może być również właściwe zażądanie nowych lub różnych zasobów, które są zaznajomione z wprowadzanymi technologiami, lub zażądanie budżetu szkoleniowego dla niektórych z istniejących zasoby. Jest więc także aspekt kosztowy .
Jeśli mówisz w języku PM - harmonogram i koszty - myślę, że uzyskasz większą przyczepność niż mówienie o tym, jak deweloperzy myślą o wynikowym projekcie. Te rzeczy mają realny wpływ.
Premier powinien wiedzieć lepiej niż wprowadzać takie rzeczy w locie bez zarządzania, kontroli i konsensusu. Jeśli po prostu tego nie rozumieją, może zaistnieć potrzeba eskalacji do zarządzania produktem lub zarządzania programem, ponieważ niepotrzebnie naraża jakość i harmonogram.
źródło
Głupotą byłoby pozwolić sobie na marsz śmierci .
Opisujesz, że straciłeś krytyczne odczucia. Nie ma poczucia kontroli i nie ma wyraźnego powrotu do niego.
Ostatnią rzeczą, którą powinieneś zrobić, to ciężko pracować, nie spuszczać głowy i spokojnie cierpieć, aż w końcu przyznają, że projekt jest skazany na niepowodzenie.
Powinieneś bardzo mocno przemyśleć to, czego masz prawo oczekiwać.
Jeśli chcą, abyś używał technologii, których nie rozumiesz, powinieneś spodziewać się czasu na ich naukę. Nie wstydź się tego, czego nie wiesz. Użyj swojej ignorancji jako pałki. Kiedy domagają się czegoś, zapytaj dlaczego. Nie akceptuj „ponieważ”. Nie akceptuj „nowoczesnych najlepszych praktyk”. Nie akceptuj „skalowalności” bez uzyskania rzeczywistych, sprawdzalnych oczekiwań.
Przez testowalne mam na myśli, że MUSZĄ powiedzieć, ile żądań dziennie / godzinę / minutę chcą, aby było w stanie wykonać. Wyjaśnij, że zamierzasz zbudować coś, aby ćwiczyć ten system zgodnie z tymi specyfikacjami.
W ten sposób możesz skorzystać z 30-dniowego bezpłatnego okresu próbnego, aby udowodnić, że najnowsza rzecz, którą chcą, jest tego warta lub jeśli lepiej trzymać się tego, co już wiesz.
Teraz pamiętaj. To nie są narzędzia, które wprowadziły plagi rasowe. Zrobiliście to. Musisz dowiedzieć się, JAK to zrobiłeś, aby móc to cofnąć.
I nie. Powrót do tego, co miałeś, nie jest zbyt kosztowny. Premier nie może mieć tego, czego chce, żądając tego. Musisz się wycofać, aż będziesz mógł efektywnie wykorzystać to, czego chce PM lub udowodnić, że nie jest to potrzebne projektowi.
Poważnie, samo poddanie się temu jest nieprofesjonalne i zabójcze dla projektu.
Byłem tu stary. Więcej niż raz. To sprawia, że czujesz się głupio. To naprawdę nie to. Po prostu się zgubiłeś.
Porozmawiaj z premierem. Szczerze. Rozłóż to wszystko. Pokaż, że chcesz się uczyć, ale nie chcesz się zabierać na przejażdżkę. Nigdy nie projektuj ani nie koduj w oparciu o wiarę. Niech PM pokaże ci, jak robić, co chcą. Nie udawaj, że rozumiesz, kiedy tego nie rozumiesz. Nie mów, że to się skończy, kiedy to nie będzie. Jeśli chcesz wierzyć w coś, uwierz w siebie. Musisz być gotów powiedzieć NIE.
Jeśli to nie pomoże wypoleruj CV, ponieważ wkrótce będziesz go potrzebować. Tak, czy inaczej.
źródło
Now keep in mind. It isn't the tools that introduced race-condition plagued code. You guys did that. You need to learn HOW you did that so you can undo that.
Tak, ta część szczególnie mnie wyróżnia. Niezależnie od tego, czy jest to seler, czy wątek, każdy rodzaj współbieżności może wprowadzić warunki wyścigu. Te same problemy mogły istnieć w kodzie wątkowym.To naprawdę powinno być na miejscu pracy.stackexchange.com, ponieważ problemem nie jest tak naprawdę kwestia rozwoju oprogramowania, ale relacje w miejscu pracy.
Jeśli jesteś pewien, że twoje proste podejście zadziałałoby i przyniosło efekt pracy raczej szybko, to twój PM jest niszczącą siłą w twojej firmie, którą należy usunąć. Zastanów się, jak przenieść wiadomości na wyższy poziom: że Twój zespół ma proste, działające rozwiązanie, które poczyniło znaczne postępy, i z powodów, których nikt nie jest w stanie wyjaśnić swojemu PMowi, zmusił cię do próby rozwiązania bardziej złożonego, z wykorzystaniem wielu narzędzi, których nikt nie zna, nikt nie rozumie, nikt nie wie, czy są w ogóle przydatne, a ta niezgłębiona decyzja twojego premiera sprawiła ci wszystkie kłopoty i sprawiła, że projekt się spóźniał i nie działał.
źródło
Nie znając kontekstu i strategii produktu realizowanej przez kierownictwo, trudno jest obiektywnie odpowiedzieć na twoje pytanie.
Oto kilka obiektywnych argumentów. Możliwe jednak, że nie jest to oczekiwane:
Ostatecznie wybór ekonomiczny leży w gestii kierownika produktu. Omów z nim zalety i wady, aby upewnić się, że podejmie świadomą decyzję i nie lekceważy dodatkowej złożoności. A jeśli pozostanie na swoim torze, staraj się osiągnąć to, co najlepsze: nie masz nic do stracenia, aw najgorszym przypadku będziesz mieć nową technologię w swoim CV.
źródło
Istnieją dwa podejścia do bibliotek stron trzecich (i innych komponentów):
Moje podejście to (2). Wygląda na to, że twoje podejście to (2), ale kierownik projektu lubi to podejście (1).
Istnieją trzy sposoby poradzenia sobie z tą sytuacją. Albo pozwalasz premierowi robić, co chce, próbujesz go przekonać, by zmienił podejście do bibliotek stron trzecich, albo głosujesz stopami i wybierasz inną pracę.
Jeśli chcesz przekonać premiera do zmiany podejścia, rozważ następujące argumenty:
Uważaj szczególnie, jeśli biblioteka nazywa się szkieletem . Oznacza to, że biblioteka wymaga zbudowania całej aplikacji wokół siebie. Zasadniczo nie można mieć dwóch ram w tej samej aplikacji; będą walczyć ze sobą bez pokojowego współistnienia. Biblioteka narzędzi programistycznych? Tak, proszę, jest ich za mało. Jeśli kiedykolwiek znajdę lepszą bibliotekę niż ta, z której teraz korzystam, mogę użyć nowo znalezionej biblioteki w nowym kodzie, nadal korzystając ze starej biblioteki w starym kodzie. Ramy rozwoju sieci? Wielki trąbienie NIE!
źródło
Myślę, że twój premier dąży do stworzenia trudnego do zarządzania systemu, który będzie generował wiele prac konserwacyjnych podczas jego pracy, więc zapewni ci dochód.
Osobiście wydajesz się, że utknąłeś w pythonie, po prostu zapomnij na chwilę o pythonie, nie koduj go w ciągu roku, ucz się nowych rzeczy, zobaczysz, że istnieją inne języki, które mogą zrobić to samo i prawdopodobnie lepiej.
Jak powiedzieli inni, poznaj narzędzia, zanim zaczniesz je kodować. Może zasugerować, że dobrze byłoby wspólnie ocenić niezbędny stos na podstawie badań różnych narzędzi, które wydają się odpowiednie do zadania. A może zapytać, jak wymyślił tę listę, mógł skorzystać z pomocy kogoś, kto jest na bieżąco.
źródło
Deweloperzy nie powinni bać się nauczyć się korzystać z nowych bibliotek, frameworków, technologii itp. Jest to podstawowa część opisu pracy programisty i jest całkowicie rozsądne, aby ktoś sugerował, że zespół pracuje z rzeczami stron trzecich, których nikt nie ma doświadczenie w pracy, a nawet wymaganie od zespołu, aby był w stanie podejmować wiarygodne decyzje techniczne dla zespołu.
Jednak nie można oczekiwać, że możesz po prostu pobrać nową technologię (nie mówiąc już o kilku nowych technologiach jednocześnie) do swojego stosu i rób postępy. Powinno się zaplanować sporo czasu, aby poznać tajniki nowego podejścia i opracować dobry projekt uwzględniający nowe elementy, podczas którego nie można oczekiwać żadnego rzeczywistego postępu w zakresie rzeczywistego produktu (od osób wykonujących tę pracę związaną z uczeniem się / projektowaniem) , który może, ale nie musi być całym zespołem, ale jeśli nie, prawdopodobnie będzie więcej czasu dla osób, które nauczyły się przekazywać wiedzę reszcie zespołu). Taki jest koszt wprowadzenia tego rodzaju poważnych zmian. Uczenie się nowych technologii jest częścią pracy programisty, ale nie dzieje się tak przy zerowym koszcie czasu.
Wygląda na to, że z pytania nie doszło. Ludzie robią wszystko, co w ich mocy, starając się stworzyć dobre wdrożenia oparte na technologiach, których sami nie rozumieli. Oczywiście wynikowy kod jest okropny.
Spróbuj przekonać swojego premiera, że firma będzie musiała poświęcić na to więcej czasu. Albo przyjdzie w formie zatrzymania się, nauki i oceny nowych technologii, znalezienia dobrego projektu i uporządkowania obecnego bałaganu związanego z wdrażaniem. Lub przyjdzie w postaci więcej czasu zmarnowanego na błędy, konserwację, kosztowniejszy rozwój itp.
Nie można powiedzieć, czy techniczne opcje opisane w pytaniu (równoważenie obciążenia, kolejki komunikatów itp.) Są rzeczywiście odpowiednie. Nie sądzę, że „nikt w zespole ma doświadczenie w pracy z tym wcześniej” jest dobrym powodem, aby całkowicie wykluczyć decyzję, ale nie zwiększy krótkim okresie koszty podejmowania tej decyzji (która może zmienić " najlepsza decyzja w danym kontekście), a jeśli twój premier nie bierze tego pod uwagę i oczekuje, że zespół natychmiast stanie się tak produktywny, jak doświadczeni ludzie, powinieneś wycofać się z tych powodów; będą ustalać wysoce nierealistyczne harmonogramy projektów, co nie leży w interesie nikogo.
źródło