Kwa nini Niliacha Kuandika Kodo na Kuanza Kufanya Usanifu
Nilikuwa nikifikiri kuwa uundaji wa programu (software development) unamaanisha kuandika vipengele (features). Nilidhani kazi yangu ilikuwa kuunda 'entities', kujenga 'controllers', na kuunganisha kanzi data (databases).
Mradi wa hivi karibuni ulibadilisha mtazamo wangu. Nilijifunza kuwa uandishi wa kodo ni sehemu tu ya suluhisho. Kazi halisi hutokea kabla ya kuandika mstari mmoja wa kodo.
Lazima uamue kuhusu usanifu (architecture). Lazima uulize kwa nini unafaa, gharama yake ni kiasi gani, na ni hatari zipi unazozitatua.
Hapa kuna mafunzo yangu makuu:
• Usanifu lazima uendane na hatua ya bidhaa. Ni rahisi kushawishika kutumia microservices, Kubernetes, na mifumo tata ya foleni za matukio (event queues) mara moja. Kwa mradi wetu, tulichagua usanifu wa tabaka (layered architecture) katika mchakato mmoja (single process). Hii ilituruhusu kutenganisha majukumu bila usumbufu wa mfumo uliosambazwa (distributed system). Unapoanza, mara nyingi kitu rahisi ni bora zaidi.
• Baadhi ya maamuzi ni rahisi sasa lakini ni ghali baadaye. Tuliongeza TenantId kwenye mfumo wetu wa data tangu siku ya kwanza. Ingawa tulikuwa na mteja mmoja tu, hii ilifanya uhamiaji wa baadaye kwenda kwenye mfumo wa SaaS kuwa rahisi. Ukisubiri kwa muda mrefu kuongeza multi-tenancy, uhamisho (migration) unakuwa jinamizi.
• Usanifu huzuia vikwazo vya baadaye. Programu (Programming) hutatua tatizo la papo hapo. Usanifu (Designing) hutatua tatizo bila kufunga milango ya siku zijazo. Tulitumia 'containers' mapema ili kurahisisha uhamisho kwenda kwenye miundombinu tofauti. Tulitumia 'interfaces' ili kurahisisha kubadilisha watoa huduma (providers).
• Mabadiliko ya biashara huendesha mabadiliko ya kiufundi. Mfumo unahamia kwenye microservices kwa sababu biashara inakua. Programu ya kliniki moja inakuwa jukwaa la SaaS kwa mamia ya kliniki. Mabadiliko haya yanabadilisha jinsi unavyoshughulikia malipo (billing), usajili (subscriptions), na upanuzi (scaling).
• Uaminifu unahitaji mifumo (patterns) yenye akili. Tulihamia kutoka kwenye simu za papo hapo (synchronous calls) kwenda kwenye usanifu unaoendeshwa na matukio (event-driven architecture). Katika mfumo wa matibabu, huduma ya arifa inayochelewa haipaswi kusababisha mfumo wa kuweka miadi kusimama. Tulitumia Outbox pattern kuhakikisha data inabaki salama hata kama message broker itafeli.
• Mifumo (patterns) lazima iendane na eneo la kazi (domain). Usitumie mifumo bila kufikiria. Utambuzi wa kitabibu unahitaji uthabiti mkubwa (strong consistency). Huwezi kutegemea eventual consistency kwa ajili ya usalama wa mgonjwa. Usitumie cache kwa data nyeti za kitabibu ikiwa itaharibu kumbukumbu zako za ukaguzi (audit trail).
• DevOps si kitu cha
Tofauti kati ya programmer na mbunifu ni "kwa nini."
Programmer huuliza: "Nitafanyaje hili lifanye kazi?" Mbunifu huuliza: "Kwa nini hii ndiyo suluhisho sahihi kwa tatizo hili mahususi?"