Świat inżynierski to miejsce, w którym nowe narzędzia i technologie rozwijane są bardzo szybko
Świat inżynierski to miejsce, w którym nowe narzędzia i technologie rozwijane są bardzo szybko i w ciągu jednej kariery można przeżyć kilka przełomów technologicznych (chociażby rozwój blockchaina, czy AI, a w niedługim czasie zapewne upowszechnienie komputerów kwantowych). Pomijając aspekt jak wymagające jest obecnie dla inżynierów aby być „na topie” pod kątem nauki oraz psychologicznym (co byłoby tematem na cały osobny artykuł), jest jeszcze oczywiście aspekt samej kariery jako inżyniera. I choć jest to tylko wycinek tematu, to na tym ostatnim aspekcie chciałbym się dziś skupić.
Programiści, jako inżynierowie, stoją przed tymi samymi wyzwaniami i muszą mieć sposoby, żeby się odnaleźć w takiej rzeczywistości, która dodatkowo zmienia się praktycznie każdego dnia. To trudne, ponieważ programista musi mieć na uwadze wiele aspektów swojego rozwoju i swojej pracy. Niemniej w swojej karierze pracowałem z wieloma inżynierami i chciałbym nakreślić proces rozwoju takiego inżyniera – zwłaszcza dla nowych oraz młodych programistów dopiero opuszczających ściany uczelni. A ponieważ piszę o branży programistycznej, to choć cały ten schemat jest do przełożenia na inne branże, będę go używał w kontekście programistycznym często też stosując zamiennie określenia „inżynier” oraz „programista”.
Opisuję więc z jakimi poziomami świadomości inżynierskiej spotkałem się w swojej profesjonalnej pracy. Dla programisty uważam, że powinno być kluczowe, by w ogóle mieć świadomość takich aspektów, a w szczególności otaczającego go świata biznesowego. Każdy kolejny poziom, który opisuję w tym artykule, mówi o kolejnym stopniu „wtajemniczenia” inżyniera w procesy otaczające go i rozumieniu swojej pracy w szerszym kontekście.
Więc przez „świadomość inżynierską” opisywaną w tym artykule będę rozumiał głębię zrozumienia przez inżyniera jego roli, wpływu zadań, obowiązków i wyborów w coraz szerszym kontekście na każdym poziomie organizacyjnym i biznesowym. Mam nadzieję, że pomoże to nakreślić ścieżkę rozwoju oraz zdefiniować czytelnikowi, gdzie „jest” jako inżynier. W konsekwencji też poznasz co należy w dalszej kolejności zrobić, by „wejść na wyższy poziom”.
1. Stażysta lub Absolwent – Wykonywanie Pracy Zorientowane na Zadania
Młodzi inżynierowie oraz magistrowie, który, którzy dopiero opuszczają ściany uczelni, są właśnie na tym poziomie. W pierwszej pracy koncentrują się oni przede wszystkim na wykonywaniu zadań pod nadzorem, które są skrupulatnie opisane. Rzadko kiedy wychodzą poza te ramy. Ci inżynierowie potrafią wykorzystać swoją wiedzę zdobytą dzięki wykształceniu, ale rzadko kiedy wychodzą poza ten zakres. Ich odpowiedzialność również jest ograniczona, obejmuje stosowanie znanych technik do wykonywania przypisanych zadań pod ścisłym nadzorem oraz testingiem.
Programista na tym poziomie charakteryzuje się podstawową wiedzą teoretyczną z zakresu programowania i narzędzi developerskich, ale nie posiada jeszcze doświadczenia komercyjnego. Najczęściej pracuje nad drobnymi poprawkami błędów i prostymi funkcjonalnościami (na przykład „zmiany wielkości guzików”). De facto osoba na tym poziomie generuje dla firmy koszt a nie zysk, ponieważ musi poświęcić dużo czasu również na poznanie procesów wewnętrznych firmy czy lepszego użycia narzędzi.
Kluczowe cechy:
Zakres świadomości: Zrozumienie na poziomie zadań z widocznością niewykraczającą poza bezpośrednie wykonanie zadania.
2. Inżynier-Technik, Wykorzystywacz Narzędzi – Junior
Inżynier na drugim poziomie świadomości to taki, który zrozumiał już, że wiedza zdobyta na uczelni nie wystarcza do wykonywania dobrej pracy. Narzędzia, z których do tej pory korzystał, potrafi wykorzystać efektywniej (żeby szybciej lub lepiej dostarczać powierzone zadania) ale nauczył się też wykorzystać nowe narzędzia narzucone przez zespół. Nie jest to osoba, która wyjdzie ze swoją inicjatywą, natomiast zwiększa się jej niezależność i trudność podejmowanych zadań.
Programista na tym poziomie pracuje samodzielnie nad naprawą błędów oraz wprowadza proste zmiany. Bez problemu posługuje się znanymi sobie technologiami i narzędziami oraz swobodnie programuje w „swoim” języku. Potrafi zaimplementować gotowe rozwiązania i wzorce, ale w trudniejszych tematach jest zależny od starszych programistów. Potrafi aplikować proste standardy kodowania w swojej pracy (na przykład wykorzystać Interfacey).
Kluczowe cechy:
Zakres świadomości: Rozszerzone zrozumienie techniczne wraz ze wzrostem świadomości kontekstu projektu i dynamiki zespołu. Rozumienie kontekstu zadań w ramach większych funkcjonalności, świadomość wpływu swojej pracy na moduł lub komponent.
3: Ulepszacz Procesów i Innowator – Mid Level
Inżynier na trzecim poziomie zaczyna rozumieć ograniczenia swojego narzędzia, ale również umie je obchodzić. Albo dostosowuje narzędzia pod siebie, albo szuka nowych, które spełniają jego wymagania i jednocześnie wymagania projektowe. Inżynier na tym poziomie rozumie już jego swój wpływ na projekt oraz zespół projektowy. Taki inżynier może również śmielej artykułować swoją opinię, na przykład na temat procesów które mogą być niepotrzebne lub zoptymalizowane.
Programistycznym odpowiednikiem jest mid-developer. Potrafi samodzielnie wykonywać powierzone mu zadania i bez problemu posługuje się technologiami, na których pracuje. W zespole Scrumowym aktywnie uczestniczy w eventach (sprint planningu czy retrospektywie). Potrafi zaproponować usprawnienia technologiczne dla projektu lub organizacyjne dla zespołu. Uczestniczy w code review i dzieli się wiedzą z juniorami, a także sam wybiera odpowiednie narzędzia i biblioteki do realizacji powierzonych zadań.
Kluczowe cechy:
Zakres świadomości: Zrozumienie na poziomie projektu z rozpoznaniem, w jaki sposób indywidualny wkład wpływa na wyniki zespołu i sukces projektu. Perspektywa całego projektu, rozumienie jak poszczególne komponenty współpracują ze sobą i wpływają na jakość produktu.
4. Przywódca Techniczny i Mentor Zespołu – Senior Level
Inżyniera na „czwartym poziomie świadomości” można już nazwać starszym inżynierem. Taki inżynier powinien mieć już w zespole moc decyzyjną, która nie tylko optymalizuje sposób działania całego zespołu, ale też może być propozycją zmiany działania dla innych zespołów. Takiego inżyniera wyróżnia, że rozumie wpływ różnych wykorzystywanych procedur oraz narzędzi na efektywność pracy całego zespołu – czasem rozumie to na poziomie podświadomym, a czasem potrafi nazwać te elementy. Przeważnie taka osoba jest też. Już specjalistą w swojej wąskiej dziedzinie, natomiast nie ogranicza go to w rozumieniu architektur systemów interdyscyplinarnych.
Oprócz dobrego rozumienia wpływu środowisk i narzędzi na sam zespół taki inżynier rozumie jeszcze zależności na jednej dodatkowej płaszczyźnie – to jest w czasie. Można to nazwać perspektywą wieloprojektową. Oznacza to, że ta osoba rozumie oraz poprawnie przewiduje jak decyzja czy zmiana, którą właśnie podejmuje, wpłynie nie tylko na projekt obecnie robiony, ale może również wpłynąć na przyszłe projekty, którymi będzie zajmował się zespół. Może to być na przykład przyjęcie nowego frameworka jako standardu dla obecnego i przyszłych projektów.
Jako programista, senior powinien z jednej strony ściśle współpracować z architektem w projektowaniu systemów (lub sam pełni tę rolę), a z drugiej strony być wsparciem dla wszystkich innych niżej postawionych programistów. Jego kod powinien być absolutnie wzorowy, spełniający wszystkie standardy przyjęte w firmie. Przy rozwiązywaniu skomplikowanych problemów – tam gdzie mid napisze tysiąc linii kodu – on po godzinach myślenia potrafi wprowadzić nową warstwę abstrakcji upraszczają i redukując poziom skomplikowania oraz ilość kodu na przykład o połowę.
Kluczowe cechy:
Zakres świadomości: Perspektywa wieloprojektowa ze zrozumieniem wpływu decyzji technicznych na możliwości organizacyjne i alokację zasobów.
5. Integrator Międzysystemowy i Międzyfunkcjoyjny – Inżynier Sztabowy
Inżyniera na piątym poziomie świadomości można nazywać już inżynierem sztabowym lub głównym. Taki inżynier będzie miał moc decyzyjną nie tylko w swoim zespole, ale też będzie miał duży wpływ na działanie innych zespołów. Inżynier taki jest wyspecjalizowany w swojej dziedzinie, ale posiada rozległą (i nie podstawową) wiedzę na temat zasad i praktyk z różnych pokrewnych dziedzin. Trochę trudniej jest przeskoczyć na ten poziom, ponieważ wymaga on już systemowego i całościowego myślenia.
Kolejną wyróżniającą cechą między poziomem czwartym a poziomem piątym jest to, jak jego decyzje wpływają na całą firmę, na biznes – nawet jeśli jest to rozumienie ograniczone. To znaczy nie potrafi na przykład określić wszystkich skutków decyzji, ale mimo wszystko potrafi wskazać jej kierunek jaki dana decyzja nada całej firmie. Taka osoba będzie już rozumiała, że nie każda decyzja optymalna inżynieryjnie nie będzie również optymalna biznesowo oraz że biznes ma większe znaczenie niż lokalna optymalizacja (chociażby technologiczna).
Jako programista inżynier z takim poziomem świadomości będzie idealnym kandydatem jako organizator, gdy kilka zespołów dostarcza wspólną funkcjonalność. Przykładowo gdy w firmie istnieje kilka zespołów Scrumowych, ale skutkiem ich działań ma być jeden produkt. Taka osoba odnajdzie się bez problemu w firmie, gdzie wprowadzone jest na przykład SAFe.
Kluczowe cechy:
Zakres świadomości: Systemowe zrozumienie na poziomie systemów z rozpoznaniem współzależności między rozwiązaniami technicznymi a wynikami biznesowymi. Rozumienie roli użytkownika końcowego w procesach biznesowych przy wytwarzaniu oprogramowania.
6. Integrator Biznesowo-Technologiczny – Engineering Manager/Lider Technologiczny
Stanie się inżynierem na szóstym poziomie jest naturalną konsekwencją lepszego zrozumienia procesów biznesowych inżyniera z poziomu piątego. Najczęściej będzie to osoba, która w nazwie pozycji ma dokładnie to samo stanowisko, co osoba z poziomu piątego. Natomiast ponieważ lepiej rozumie procesy biznesowe czy zależności w samej korporacji będzie to osoba, która będzie potrafiła dobrać decyzję inżynierską tak, by była optymalna pod kątem biznesowym. Taka osoba będzie miała świadomość komercyjną organizacji. Będzie rozumiała, że biznes zależy od użytkownika końcowego, otoczenia gospodarczego oraz że rozwiązania technologiczne muszą spełniać oczekiwania nie tylko technologiczne czy biznesowe, ale przede wszystkim klienta docelowego.
Inżynier na tym poziomie proponując jakąś zmianę będzie ją rozważał pod kątem optymalizacji pod użytkownika, a niekoniecznie optymalizacji technicznej, nawet jeśli może to spowodować problemy w zespołach inżynierskich. Przykładowo, jeśli zespoły inżynierskie chcą wykorzystywać narzędzie A, natomiast w wyniki działania narzędzia A nie są optymalne dla klienta końcowego, inżynier na tym poziomie zaproponuje wykorzystanie narzędzia B – które da większą wartość użytkownikowi. Może to oczywiście powodować pewne konflikty w pionie inżynieryjnym, lecz jest niezbędne do dostarczania jeszcze lepszej wartości.
Programista na tym poziomie będzie łączył głęboką wiedzę techniczną ze zrozumieniem procesów biznesowych. Będzie potrafił skutecznie komunikować się z nietechnicznymi stakeholderami i przekładać wymagania biznesowe na rozwiązania techniczne. Powinien umieć analizować zachowania użytkowników oraz przewidywać jak konkretne zmiany wpłyną na konkretne przyzwyczajenia oraz napływ lub odpływ użytkowników.
Kluczowe cechy:
Zakres świadomości: Zintegrowana z biznesem perspektywa ze zrozumieniem, w jaki sposób decyzje techniczne wpływają na wyniki finansowe, pozycję rynkową i przewagę konkurencyjną.
7: Strategiczne Przywództwo Organizacyjne – Prezes ds. Inżynierii/Dyrektor ds. Technicznych
W naszej kategoryzacji jest to najwyższy poziom świadomości inżynierskiej i nie jest to istotne czy wywodzi się ze środowiska programistycznego czy innej inżynierii (będzie to miało znaczenie tylko w kwestii specjalizacji samej firmy). Taka osoba oczywiście nie będzie już podejmować prac stricte inżynierskich, raczej będzie pełnić rolę konsultanta i będzie wskazywać kierunek w którym inni inżynierowie mają dążyć. Raczej będzie przedstawicielem pionu inżynierskiego przed – albo w – zarządzie spółki. Stanowisko to może się nazywać stanowiskiem głównego inżyniera lub np. CTO. Inżynier szóstym i inżynier na siódmym poziomie mogą się niewiele różnić między sobą w zakresie wiedzy. Bardziej będą to różnice w zakresie mocy decyzyjnej i autorytatywności w podejmowaniu decyzji.
Kluczowe cechy:
Zakres świadomości: Holistyczna perspektywa organizacyjna obejmująca strategiczne, finansowe, operacyjne i konkurencyjne rozważania ze zrozumieniem długoterminowych trendów branżowych i dynamiki rynku.
Ścieżki Postępu i Rozwoju Inżyniera Programisty
Podróż przez te poziomy świadomości nie jest ściśle liniowa, a inżynierowie mogą rozwijać różne aspekty świadomości w różnym tempie. Kluczowe czynniki wpływające na postęp obejmują:
Działania w zakresie rozwoju zawodowego:
Na tym zestawieniu również dobrze widać, że powyżej poziomu czwartego główna specjalizacja przestaje mieć aż takie znaczenie, a „wejście” na wyższy poziom świadomości związane jest coraz mocniej z wiedzą biznesową i strategiczną. Dlatego też należy pamiętać, że nie każda osoba będzie chciała przechodzić przez te wszystkie poziomy. Inżynierowie, którzy mają bardzo ścisłe umysły, ale nie mają serca ani zrozumienia dla biznesu, mogą zatrzymać się na poziomie trzecim lub czwartym i nigdy nie awansować wyżej. I to jest w porządku, jeśli sami czują się z tym dobrze oraz to rozumieją.
Co prawda dla każdego „poziomu” wyróżniłem nazwę stanowiska, jednak kilkukrotnie zaznaczyłem że nie jest to sztywny podział, a im mniejsza organizacja, tym bardziej te poziomy przenikają się między różnymi stanowiskami. Niemniej można wyróżnić kilka kluczowych „przejść” które wymagają zmiany myślenia:
Jak pewnie zauważyłeś, celowo unikałem w tym artykule przypisywania lat doświadczenia do danego poziomu rozwoju. Oczywistym jest że potrzeba czasu na każdy poziom, ale tempo każdej osoby będzie inne i zależne od wielu czynników. Dlatego uznałem, że nie ma to sensu, choć można by szacować że na każdy poziom potrzeba 1-3 lat doświadczenia.
Zestawienie Tabelaryczne Poziomów Świadomości Inżynierskiej
Poniżej prezentuję prosty skrót wszystkiego co opisałem powyżej.
| Poziom | Tytuł | Główne Zainteresowanie | Zakres Świadomości | Główne Obowiązki | Władza Decyzyjna |
|---|---|---|---|---|---|
| 1 | Praktykant/Absolwent – Praca zorientowana na zadania | Realizacja szczegółowych instrukcji | Poziom zadania | Poprawki błędów, proste funkcjonalności pod nadzorem | Brak – wymaga stałego nadzoru |
| 2 | Inżynier-Technik/Junior | Efektywność narzędzi i podstawowa niezależność | Poziom modułu/komponentu | Samodzielne poprawki błędów, implementacja wzorców, podstawowe zadania projektowe | Ograniczona – w ramach przydzielonych zadań |
| 3 | Ulepszacz procesów/Poziom średni | Adaptacja narzędzi i optymalizacja procesów | Poziom projektu | Aktywne uczestnictwo w Scrum, przeglądy kodu, mentoring juniorów | Ulepszenia procesów zespołowych |
| 4 | Lider techniczny/Mentor zespołu – Poziom starszy | Optymalizacja zespołu i perspektywa wieloprojektowa | Poziom wieloprojektowy | Projektowanie systemów, mentoring zespołu, strategiczne decyzje techniczne | Decyzje techniczne na poziomie zespołu |
| 5 | Integrator międzysystemowy/Starszy inżynier | Koordynacja międzyzespołowa i świadomość biznesowa | Poziom firmy/systemu | Standardy techniczne, współpraca międzyzespołowa, projektowanie architektury | Wpływ techniczny na poziomie międzyzespołowym |
| 6 | Integrator biznesowo-technologiczny/Kierownik inżynierii/Lider technologiczny | Optymalizacja zorientowana na użytkownika i integracja biznesowa | Poziom zintegrowany z biznesem | Planowanie strategiczne, komunikacja ze stakeholderami, zarządzanie budżetem | Decyzje techniczne zgodne z celami biznesowymi |
| 7 | Strategiczny lider organizacyjny/CTO | Strategia organizacyjna i reprezentacja branży | Holistyczny poziom organizacyjny | Programy strategiczne, reprezentacja zarządu, przywództwo branżowe | Decyzje strategiczne na poziomie organizacji |
Świadomość inżynierska reprezentuje wielowymiarową progresję od realizacji skoncentrowanej na zadaniach do strategicznego przywództwa organizacyjnego. Każdy poziom opiera się na poprzednich kompetencjach, jednocześnie rozszerzając zakres zrozumienia i odpowiedzialności. Organizacje odnoszą korzyści z rozpoznawania i wspierania rozwoju inżynierów na tych poziomach świadomości, ponieważ wyższe poziomy świadomości przyczyniają się do skuteczniejszego podejmowania decyzji, lepszej współpracy międzyfunkcyjnej i silniejszego dopasowania między pracą techniczną a celami biznesowymi. Warto jednak, by w tym wszystkim nie zapominać o najważniejszym: o samym człowieku, naszym Inżynierze.



