W tym artykule poruszę bardzo ważny temat, który dla początkującego programisty, programistki może wydawać się mało istotny. Chodzi o wymagania biznesowe, czyli to, jak ma działać tworzony system lub jak działa istniejący system według osoby, która zleca jego napisanie. Często, to jak ma działać system nie jest istotne dla programisty, programistki oraz nie idzie w parze z jego wizją, co stanowi poważny problem i prowadzi do wielu nieporozumień.
Kim jest osoba, która zleca napisanie oprogramowania?
Zanim przejdę do wyjaśnienia pojęcia wymaganie biznesowe, odpowiem na pytanie kim jest osoba, która zleca napisanie oprogramowania, systemu? Może, to być dowolna osoba dla, której tworzymy system np. nasz pracodawca, firma, do której zostaliśmy oddelegowani w ramach outsourcingu, gdzie pracujemy jako podwykonawca. Zazwyczaj jest, to osoba nie posiadająca rozległej wiedzy technicznej, ale wie jak ma działać system, moim zdaniem, to bardzo dobrze, że jest, to osoba nietechniczna, bo taka osoba nie patrzy przez pryzmat “ograniczeń” języka programowania czy framework’a.
Co to są wymagania biznesowe?
Wymagania biznesowe, to założenia, co do funkcji, które ma realizować tworzony system np. wykonywanie przelewów w systemie bankowym, założenie konta walutowego. Aby zrozumieć wymagania biznesowe należy rozumieć tworzony system np. przelew bankowy wymaga wiedzy z dziedziny związanej z bankowością takiej jak np. rachunek, przelew, odsetki, kapitalizacja.
Źródła wymagań biznesowych
Taką wiedzę można nabyć samemu czytając różne książki i poradniki, ale jest, to dłuższa droga i nie koniecznie kończy się sukcesem. Drugim sposobem jest po prostu komunikacja w zespole z analitykiem biznesowym, który powinien wyjaśnić działanie systemu pod kątem przelewu bankowego.
Ten drugi sposób, komunikacja w zespole jest w 90% przypadków wymagany od programistów, dawno już minęły czasy, w których, to programista “zamykał się w piwnicy, pisał magiczny kod” i inni musieli być zachwyceni z efektów jego pracy, bo użył w kodzie najnowszych elementów danego języka programowania. Tak, to nie działa, więcej o komunikacji w zespole i umiejętnościach miękkich pisałem w Junior Java Developer umiejętności techniczne, a umiejętności miękkie. Programista musi rozumieć dziedzinę tworzonego systemu inaczej nie będzie w stanie napisać dobrego systemu.
Dlaczego wymagania biznesowe są tak ważne?
Należy pamiętać, że w 99% przypadków piszemy kod dla kogoś chyba, że tworzymy własny system w ramach np. start-up’u. Język programowania i tworzony w nim kod jest tylko narzędziem do realizacji wymagań biznesowych. Rolą programisty jest tworzenie wysokiej jakości kodu, który realizuje założone wymagania biznesowe.
Co programista robi z wymaganiami biznesowymi?
Skoro już wiemy jak ważne są wymagania biznesowe i komunikacja z osobą zlecającą wykonanie systemu, to teraz przedstawię na przykładzie, co będzie, jeżeli programista nie zrozumie dokładnie wymagania biznesowego i napisze daną funkcję systemu. Wyobraźmy sobie, że programista otrzymuje zadanie napisanie kodu realizującego przelew zagraniczny w obcej walucie.
Nie rozumie wymagań
Opiszę teraz wariant, w którym, to programista nie zrozumiał wymagań biznesowych, a tym samym nie zna dziedziny systemu. Programista stworzył kod odpowiedzialny za przelew zagraniczny. Do wykonania operacji przelewu potrzebuje informacji o dwóch kontach, pierwszego z którego przelewamy pieniądze oraz drugiego, na które przelewamy pieniądze. Dla pierwszego konta należy sprawdzić czy klient ma środki na koncie, to jest oczywiste i zostało dobrze zaimplementowane. Programista pomyślał również o tym, że przelewy mogą być wykonywane w dni pracy banku, banking-days.
Jak widać jedno wymaganie biznesowe kryje w sobie dwa kolejne, tak jest zawsze, rzadko kiedy jedno wymaganie jest tak proste, że nie wymaga implementacji innych elementów. Programista oddaje zaimplementowane przelewy zagraniczne, a podczas testów wychodzą błędy w samym kodzie jak również błędy w logice biznesowej, te drugie są równie istotne jak te pierwsze. Do programisty wraca informacja, że przelew nie został poprawnie przewalutowany ponieważ każdy przelew zagraniczny należy najpierw przewalutować na Euro, a następnie na walutę docelową, czyli np. przelew z PLN na USD wymaga przewalutowania PLN na EUR, a następnie EUR na USD.
Tego programista nie wiedział, bo nie zagłębił się dokładnie w wymagania biznesowe i/lub nie zrozumiał dziedziny tworzonego systemu. Jakie konsekwencje ma takie błędne zaimplementowanie dowolnej funkcjonalności w systemie? Po pierwsze konsekwencje finansowe, jeżeli taka funkcjonalność zostałaby udostępniona publicznie, gdzie bank ma setki tysięcy klientów. Do tego dłuższy czas realizacji, ponowne przejście ścieżki implementacji, wdrożenia i testów, co angażuje różne osoby. Dodatkowo, jeżeli taka sytuacja powtarza się częściej może, to wiązać się ze spadkiem reputacji danego programisty.
Rozumie wymagania
Wariant, w którym, to programista zrozumiał wymagań biznesowe po prostu nie ma negatywnych konsekwencji opisanych powyżej. Dodatkowo programista, który już zrozumiał fragment systemu łatwiej przyswoi kolejne wymagania biznesowe i lepiej zrozumie dziedzinę tworzonego systemu.
Należy pamiętać, że wymagania biznesowe odnośnie tworzonego systemu zmieniają się w czasie i to, co było aktualne wczoraj jutro może wymagać zmiany. Dlatego programista musi znać bardzo dobrze język programowania, aby dostosować się do zmieniających się wymagań biznesowych dla danego systemu. Celem programisty nie jest programowanie samo w sobie i używanie najnowszych technologii za wszelką cenę, jego celem jest implementacja działającego systemu zgodnie z wymaganiami biznesowymi.
Porady dla programisty
Co należy zrobić w przyszłości, aby uniknąć takich sytuacji? Na pewno skupić się na zrozumieniu dziedziny tworzonego systemu, współpracować z analitykami biznesowymi lub osobami, które mają wiedzę biznesową na temat tworzonego systemu. Programista dodatkowo musi szlifować swój warsztat w danym języku programowania tak, aby później w łatwy sposób przełożyć wymagania biznesowe na język programowania.
Odnośnie tworzenia systemu zgodnie z wymaganiami biznesowymi, to idealne byłoby podejście Domain-Driven Design – DDD. W kwestii szlifowania warsztatu programisty, to należy wykonać jak najwięcej ćwiczeń, tutoriali związanych z aktualnie używaną technologią i językiem. Można również skorzystać z www.codewars.com, gdzie poprzez zadania można trenować umiejętności programistyczne oraz współzawodniczyć z innymi programistami. Polecam również https://challengerocket.com/ – Solve a SkillChallenge and get immediate feedback to see if you qualify for the recruitment process. All done remotely.
Jak widać wymagania biznesowe są bardzo ważnym elementem tworzonego systemu informatycznego.