Softverski inženjeri imaju tendenciju da imaju visoko mišljenje o alatima koje koriste u svakodnevnom životu. Ova mišljenja često oblikuju njihova prethodna iskustva i mogu postati ključni dio identiteta inženjera. „Ona je Java programer.“ „Treba nam Python tip.“ Zapravo, ove dvije fraze odnose se na softverskog inženjera, ali primijetite kako te vještine opredjeljuju inženjera.
Ovo temeljno uvjerenje može biti toliko snažno da kad se pojavi konkurentska alternativa, inženjeri su prisiljeni da žestoko brane svoj izbor. Snažna želja za zagovaranjem neke tehnologije može biti dobra stvar jer poboljšava nivo stručnosti za tu određenu vještinu.
Međutim, inženjeri ne bi smjeli izgubiti iz vida činjenicu da gotovo svaki alat, stil, uzorak i arhitektura utjelovljuju kompromis. Imati otvoren um kada se suočavate ili vam se predstavlja konkurentska tehnologija kritična je soft vještina za inženjere. Ova vještina im pomaže da donose bolje obrazovane odluke za probleme koji nemaju jasna rješenja. Okolnosti koje okružuju problem su ono što obično pokreće vrstu kompromisa koje su inženjeri spremni napraviti.
Inženjeri moraju naučiti da odvoje svoje predrasude kako bi vodili rješenja u najrazumnijim smjerovima u datim okolnostima. To zahtijeva informisanje svih zainteresovanih strana o kompromisima kroz tipično neugodan razgovor. Priprema za taj razgovor zahtijeva nekoliko koraka, uključujući opravdanje tehnološkog izbora i identificiranje pogođenih područja softvera. Međutim, najvažnije je jasno pokazati zašto dolazi do ovih kompromisa.
U softverskom inženjerstvu često postoji mnogo različitih rješenja problema. Najčešće je optimalno rješenje koje je najbolje opravdano trenutnim okolnostima. Na primjer; ispravan pristup implementaciji nove karakteristike može biti prepisivanje modula kako bi se optimizirala ta karakteristika. Međutim, vjerojatno će trebati značajan napor, a mogao bi se pokazati i kratkoročnim rizičnim pothvatom. Dakle, kompromis je uvođenje funkcije bez optimizacije, prihvaćajući da kasnije mogu biti problemi s performansama ili složenošću.
Kompromisi se ne pokazuju uvijek na takav način. Mnogo je tehničkih kompromisa u kojima se odlučuje između alata, platformi ili tehnika. To zahtijeva drugačiji skup razmatranja koja obično uključuju mnoge članove vašeg osoblja. Neki primjeri su:
- Da li bismo trebali koristiti Kubernetes?
- Da li bismo trebali implementirati arhitekturu mikro usluga?
- Da li bismo trebali koristiti PostgreSQL ili MongoDB?
U svakom od ovih slučajeva važno je razmotriti ima li članova u vašem timu koji imaju tehničku stručnost za primjenu i održavanje ovih alata. Ako nema, onda je poticanje dokazivanja koncepata jedan od načina da se tim pomogne da se upozna s njihovim mogućnostima. Proizvod dokaza koncepta uključuje veće poznavanje alata i jasniju sliku o tome koji od njih odabrati. Oni također pomažu u preoblikovanju problema u trenutni kontekst, a ne samo u neki izmišljeni scenarij. Ovo je važno jer određivanje pravih kompromisa često uključuje vrlo duboko razumijevanje problema.
Ukratko, za izgradnju sjajnih softverskih proizvoda potrebno je savladati vještinu odabira pravih kompromisa. To zahtijeva iskustvo i čvrsto razumijevanje onoga što predstoji. Najuspješniji kompromisi su oni koji minimiziraju rizik dok uspostavljaju temelje za rješavanje negativne strane kompromisa.
Članak „Trade-Offs In Software Engineering” autora Jesus Bello-a je preveden sa Forbes.