Kazi yako si kuandika kodi tu. Ni kufanya maamuzi. Unajifunza kutoka kwao. Baada ya muda, unafanya makosa machache zaidi. Hatimaye, unawaongoza wengine kupitia ukungu uleule. Mchakato huo—kuanzia kuandika mantiki hadi kumiliki matokeo—ndio unaomtofautisha mtu anayeandika sintaksi na mtu anayejenga mifumo.
Unafanya maamuzi kila siku. Baadhi yanaonekana kuwa madogo, kama kuchagua rangi ya kitufe. Mengine yanabadilisha bidhaa nzima. Siri ni kutambua mapema kwamba mambo haya mawili yanahusiana. Uamuzi mdogo uliofanywa bila uangalifu unaweza kuwa kikwazo kikubwa baadaye, wakati uamuzi mgumu uliofanywa mapema mara nyingi huonekana kama akili ya ajabu unapoitazama kwa nyuma.
Eneo la Athari la Maamuzi ya Mapema
Unapoanza, makosa yako yanatokea katika mazingira madogo. Commit mbaya inaharibu ujenzi wa ndani (local build). Function isiyo makini inachelewesha skrini moja tu. Eneo la athari linabaki kuwa dogo. Unawaathiri watu wachache, na gharama ya kurekebisha ni ndogo.
Lakini unapoendelea kukua, iwe kama mhandisi binafsi au kama kampuni, maamuzi yako yanagusa mifumo mingi zaidi. Uamuzi uleule unapofanywa kwa kiwango kikubwa kinaweza kugharimu wiki kadhaa. Hii ndiyo sababu lazima ujifunze kufanya maamuzi ya kukadiria sasa, kabla ya gharama kuwa kubwa.
Fikiria mitego mitatu ya kawaida:
Kutumia jukwaa ambalo dependencies zako haziaungi mkono kunaweza kupoteza masaa mamia ya uhandisi. Masaa hayo si ya kuandika tu. Ni ya kutatua matatizo ya uoanishaji (compatibility issues), kurekebisha maktaba (libraries), na kuelezea kwa wadau kwa nini kipengele rahisi kimechukua robo mwaka mzima.
Kuhama kutoka kwenye uthibitishaji wa kulingana na kikao (session-based authentication) kwenda kwenye JWTs mapema katika maisha ya bidhaa kunazuia uandishi upya wa gharama kubwa baadaye. Ni rahisi zaidi kurekebisha (refactor) mantiki ya kuingia (login logic) unapokuwa na watumiaji maelfu kuliko unapokuwa na mamilioni na muda wa mfumo kutofanya kazi (downtime) unagharimu pesa halisi.
Kukadiria muda mara mbili ya makadirio yako bora hufanya kazi tu ikiwa unatumia muda huo wa ziada (buffer) kulinda ubora. Kuongeza muda kwenye ratiba ili uweze kupitia mitandao ya kijamii ni upotevu. Kuongeza muda ili uweze kuandika majaribio (tests), kupitia hali zisizo za kawaida (edge cases), na kuhakikisha uwezo wa kufuatilia mfumo (observability) ni uwekezaji.
Mtindo hapa ni rahisi: deni la kiufundi (technical debt) huongezeka kwa kasi. Lipia deni hilo wakati kiasi cha msingi ni kidogo.
Tarehe za Mwisho na Udanganyifu wa Udhibiti
Viwango vya mwisho (deadlines) viko kila mahali. Tarehe za toleo, tarehe za onyesho (demo), na kuzuia mabadiliko ya kodi (code freezes). Katika kampuni kubwa, mara nyingi hutumika kwa madhumuni ya kisaikolojia zaidi kuliko ya kiufundi. Huleta hisia ya udhibiti juu ya utata ambao hakuna mtu anayeuelewa kikamilifu.
Athari yake inaweza kutabiriwa. Tarehe ya mwisho inapokaribia, ubora hushuka. Timu huondoa majaribio, hupuuza usimamizi wa makosa (error handling), na kutuma kodi ambayo hakuna anayetaka kuimiliki. Tarehe ya mwisho inafikiwa. Kalenda inaonekana safi. Lakini bidhaa inakuwa mbaya zaidi.
Hii hutokea kwa sababu wahandisi wanapenda kodi iliyo kamilifu na usanifu (architecture) wa kuvutia. Ni asili yetu. Lakini jibu la ukamilifu halipo kila wakati. Chaguo sahihi ni lile linaloendana na hali ya sasa ya timu yako. Kampuni changa ya watu watatu haihitaji taratibu zilezile kama jukwaa la afya lililodhibitiwa kisheria. Unajenga kulingana na ulipo, si kulingana na ulipo shirika la uhandisi la watu elfu tano miaka mitano iliyopita.
Wakati Ukuaji Unapovunja Sheria za Zamani
Hili ni jambo ambalo uongozi mara nyingi hulipuuza. Kampuni inapokua, viwango vya mwisho lazima pia vikue. Michakato huongezeka. Watu wapya huungana na wanahitaji mafunzo ya awali (onboarding). Kazi zinazidi kwa sababu kuna bidhaa nyingi zaidi. Mahitaji ya uzingatiaji (compliance) huongezeka—mapitio ya usalama ya ndani, ukaguzi wa nje, na ukaguzi wa usimamizi wa data. Eneo la kazi huongezeka, lakini mstari wa mwisho unabaki palepale.
Kutumia viwango vilevile vya mwisho huku kukiwa na kazi nyingi hakufanyi timu iwe ya haraka zaidi. Inawafanya wawe wavivu na wasio makini. Hatua hupunguzwa. Nyaraka (documentation) hutoweka. Majibu ya matukio yanakuwa ya kurekebisha tu matatizo yaliyotokea (reactive). Wahandisi wale wale ambao zamani walituma kodi safi sasa wanatuma suluhisho za muda (bandages) kwa sababu kalenda inakataa kubadilika.
Ikiwa kampuni inataka kasi katika kiwango kikubwa, lazima iongeze njia sambamba za kazi au ipanue muda. Huwezi kukandamiza orodha ya kazi (backlog) inayozidi kukua katika kipindi kifupi (sprint) ambacho kilionekana kuwa kigumu wakati wa kuajiri watu watatu waliopita.
Kujenga kwa Kuzingatia Muda wa Ziada
Tabia moja itakayokufanya uwe na utulivu: chukulia kuwa kuna kitu kitakachoharibika. Hiyo si kukata tamaa. Ni uhalisia.
Mifumo hukwama. API za upande wa tatu hupungua kasi. Mahitaji hubadilika kwa sababu meneja wa bidhaa alizungumza na mteja jana. Unapopanga kwa ajili ya vikwazo, viwango vyako vya mwisho vinabaki kuwa vya kweli. Unapata uwezo wa kuchagua kati ya kasi na ubora. Bila muda huo wa ziada (buffer), uamuzi hufanywa kwa ajili yako kila wakati. Unalazimika kuchagua kasi, jambo ambalo linamaanisha unalazimika kutoa dhabihu kwa ubora.
Nafasi hiyo ya ziada ndipo ujifunzaji unapoishi. Ikiwa kila saa imetengwa kwa kazi za vipengele (feature work), hakuna mtu aliye na nafasi ya kuboresha mfumo wa ujenzi (build pipeline), kurekebisha tabaka la hoja (query layer), au kuandika hati za mkataba wa API. Timu itabaki ikiwa imekwama katika kasi yake ya sasa milele.
Kubadilisha Kosa Moja kwa Lingine
Kwa sasa tunajikuta tukifanya mabadilishano ya ajabu. Tunabadilisha makosa ya kibinadamu na makosa ya programu yasiyotabirika (non-deterministic). Mifumo mikubwa ya lugha (Large language models) inaweza kuzalisha kodi ya msingi (boilerplate), kupendekeza majaribio, na kuandaa hati kwa haraka zaidi kuliko mhandisi mwanzo (junior engineer) yeyote. Lakini wanafanya hivyo kwa kujiamini, na wanafanya makosa kwa njia ambazo
