𝗦𝗽𝗲𝗰 𝗗𝗲𝗯𝘁 നിങ്ങൾ അത് പരിഹരിക്കുമ്പോൾ ഇല്ലാതാകുന്നില്ല. അത് മറ്റൊരിടത്തേക്ക് മാറുകയാണ് ചെയ്യുന്നത്.

ഒരു പ്രശ്നം പരിഹരിക്കുന്നത് എപ്പോഴും അത് ഇല്ലാതാക്കണമെന്നില്ല. ചിലപ്പോൾ, നിങ്ങൾ അത് മറ്റൊരിടത്തേക്ക് മാറ്റുക മാത്രമാണ് ചെയ്യുന്നത്.

അടുത്തിടെ, spec debt കണ്ടെത്താനായി ഞാൻ ഒരു പ്രോജക്റ്റ് ഓഡിറ്റ് ചെയ്തു. നിർദ്ദേശങ്ങളിലെ വിടവുകളാണ് (gaps) ഇവ; ഇവ ബഗുകൾക്കോ അല്ലെങ്കിൽ മോശം AI പെരുമാറ്റത്തിനോ കാരണമാകുന്നു. ഞാൻ ഏഴ് പ്രത്യേക കാര്യങ്ങൾ പരിഹരിച്ചു. പരിഹരിച്ചതിന് ശേഷം, ടെസ്റ്റുകൾ പാസായി. എല്ലാം പച്ചപ്പായി (green) കാണപ്പെട്ടു.

എന്നാൽ ആ കടം (debt) അപ്രത്യക്ഷമായില്ല. അത് ഫീച്ചർ ഫയലുകളിൽ നിന്ന് സ്റ്റെപ്പ് ഡെഫനിഷനുകളിലേക്ക് (step definitions) മാറി.

ഈ കാര്യങ്ങൾ പരിഹരിച്ചതിൽ നിന്ന് ഞാൻ പഠിച്ച കാര്യങ്ങൾ ഇതാ:

  • കൃത്യത പ്രധാനമാണ്. "the response is fast" എന്ന് പറയുന്നതിന് പകരം, "the response returns within 12 seconds of the order submission" എന്ന് പറയുക. ഇത് സമയക്രമത്തെ കൃത്യമായി നിശ്ചയിക്കുന്നു.
  • അവ്യക്തത ഒഴിവാക്കുക. "Retried 2 times" എന്നത് വ്യക്തമല്ല. അതിനർത്ഥം ആകെ 2 ശ്രമങ്ങളാണോ അതോ 3 ആണോ? ഉറപ്പാക്കാൻ "no more than 2 charge requests total" എന്ന് ഉപയോഗിക്കുക.
  • പ്രക്രിയയുടെ പേര് വ്യക്തമാക്കുക. "the inventory is released" എന്ന് പറയുന്നത് അവ്യക്തമാണ്. "the inventory service receives a release request for item X" എന്ന് കൃത്യമായി പറയുക.
  • വ്യാജ ഉറപ്പുകൾ ഒഴിവാക്കുക. ഒരു ഫീച്ചർ നിലവിലില്ലാത്തതുകൊണ്ട് ഒരു സ്റ്റെപ്പ് പാസാവുകയാണെങ്കിൽ, ആ സ്റ്റെപ്പ് ഒഴിവാക്കുക. നിലവിലില്ലാത്ത ഒരു പ്രക്രിയയ്ക്ക് (flow) പാസായ ടെസ്റ്റ് എന്നത് ഒരു കള്ളമാണ്.
  • "ശരി" (correct) എന്നത് നിർവചിക്കുക. കൃത്യമായ മൂല്യങ്ങൾ (hard values) ഇല്ലാതെ "correct" അല്ലെങ്കിൽ "proper" തുടങ്ങിയ വാക്കുകൾ ഒരിക്കലും ഉപയോഗിക്കരുത്. "contains the right id" എന്നതിന് പകരം "contains order_id 123" എന്ന് ഉപയോഗിക്കുക.

ഈ പ്രശ്നങ്ങൾ കണ്ടെത്താനായി ഞാൻ ഒരു ഫ്രെയിംവർക്ക് നിർമ്മിച്ചു. ഓരോ സാഹചര്യത്തിലും (scenario) ഈ അഞ്ച് ചോദ്യങ്ങൾ ചോദിക്കുക:

  • ഈ സാഹചര്യത്തിന്റെ ഉത്തരവാദിത്തം ആർക്കാണ്?
  • ഇത് ഏതൊക്കെ തീരുമാനങ്ങൾ മാറ്റിവെക്കുന്നു?
  • ഇവിടെ എല്ലാ പദങ്ങളും നിർവചിച്ചിട്ടുണ്ടോ?
  • ഇത് പെരുമാറ്റമാണോ (behavior) അതോ നടപ്പിലാക്കലാണോ (implementation) വിവരിക്കുന്നത്?
  • ഈ വിവരണത്തിൽ എന്താണ് വിട്ടുപോയിരിക്കുന്നത്?

ടെക്സ്റ്റും കോഡും തമ്മിലുള്ള വിടവാണ് ഏറ്റവും വലിയ കെണി. നിങ്ങളുടെ സ്പെക്കിൽ (spec) നിങ്ങൾക്ക് തികഞ്ഞതും കൃത്യവുമായ നിർദ്ദേശങ്ങൾ എഴുതാൻ കഴിയും. എന്നാൽ ആ ടെസ്റ്റ് പാസാക്കാൻ നിങ്ങളുടെ കോഡ് ഒരു ഷോർട്ട്കട്ട് ഉപയോഗിക്കുന്നുണ്ടെങ്കിൽ, നിങ്ങൾ ഇപ്പോഴും കടബാധ്യതയിൽ (debt) ആണ്.

സ്പെക് പറയുന്നത് "create an order via API" എന്നാണ്. എന്നാൽ സമയം ലാഭിക്കാൻ കോഡ് യഥാർത്ഥത്തിൽ ഒരു ഓർഡർ നേരിട്ട് ഒരു ഡാറ്റാബേസിലേക്ക് ഇൻജക്ട് ചെയ്യുന്നു. ടെസ്റ്റ് പാസായി, പക്ഷേ ആ കടം ആവശ്യകതയിൽ (requirement) നിന്ന് നടപ്പിലാക്കലിലേക്ക് (implementation) മാറി.

ആദ്യ തവണ തന്നെ തികഞ്ഞ സ്പെക്കുകൾ എഴുതാൻ ശ്രമിക്കരുത്. അവ എഴുതുക, ഓഡിറ്റ് ചെയ്യുക, പരിഹരിക്കുക.

Source: https://dev.to/diyaburman/spec-debt-doesnt-disappear-when-you-fix-it-it-migrates-d25

Optional learning community: https://t.me/GyaanSetuAi