મેં 6 મહિના સુધી મારી ભૂલોને અવગણી
મને લાગતું હતું કે મારી error handling સારી છે.
મેં try/catch બ્લોક્સનો ઉપયોગ કર્યો. મેં console માં લોગ કર્યા. મેં Sentry ડેશબોર્ડનો ઉપયોગ કર્યો.
તેમ છતાં મારા વપરાશકર્તાઓ (users) ને ખામીયુક્ત પ્રક્રિયાઓનો સામનો કરવો પડતો હતો. ફાઇલો ગાયબ થઈ જતી હતી. કન્ફર્મેશન વગર પેમેન્ટ થઈ જતું હતું. ફોર્મ્સમાં કોઈ જાણ કર્યા વગર ભૂલ આવતી હતી.
સમસ્યા ભૂલોને પકડવામાં (catch કરવામાં) નિષ્ફળ જવાની નહોતી. સમસ્યા એ હતી કે ભૂલોને પકડ્યા પછી કંઈ જ ન કરવું એ હતી.
મારા કોડમાં આ પ્રકારની કોમેન્ટ્સ હતી: // TODO: handle this better
તે કોમેન્ટ 6 મહિના સુધી ત્યાં જ રહી ગઈ.
જ્યારે અપલોડ નિષ્ફળ જાય, ત્યારે વપરાશકર્તાને લોડિંગ સ્પિનર દેખાતું જે ક્યારેય અટકતું નહોતું. તેમને ખબર જ નહોતી પડતી કે કંઈક ખોટું થયું છે. તેઓ વારંવાર પ્રયાસ કરતા હતા. પછી તેઓ હાર માની લેતા હતા.
એક ગ્રાહકે ફરિયાદ કરી તે પછી મેં અમારા એનાલિટિક્સ તપાસ્યા. મને આ આંકડા મળ્યા:
• 23% ફાઇલ અપલોડ્સમાં કોઈ જાણ કર્યા વગર ભૂલ આવતી હતી. • વપરાશકર્તાઓ સરેરાશ 2.7 વખત ફરી પ્રયાસ કરતા હતા. • અમારું ડેશબોર્ડ હેલ્ધી સ્ટેટસ બતાવતું હતું કારણ કે અમે બધી ભૂલો પકડી લીધી હતી.
અમે એક છૂપી આપત્તિનું સંચાલન કરી રહ્યા હતા. અમારું ડેશબોર્ડ લીલું (green) હતું, પરંતુ અમારા વપરાશકર્તાઓ હતાશ હતા.
મેં દરેક silent catch ને એક નવા પેટર્ન સાથે બદલી નાખ્યું. હવે હું ભૂલોને પ્રકાર મુજબ વર્ગીકૃત કરું છું:
• Network errors રિટ્રાય ડાયલોગ (retry dialog) શરૂ કરે છે. • Permission errors માર્ગદર્શિકા બતાવે છે. • Unknown errors સ્પષ્ટ સંદેશ બતાવે છે અને કોન્ટેક્સ્ટ લોગ કરે છે.
પરિણામોએ બધું જ બદલી નાખ્યું:
• સાયલન્ટ અપલોડ નિષ્ફળતા 23% થી ઘટીને 0.4% થઈ ગઈ. • વપરાશકર્તા દ્વારા રિપોર્ટ કરવામાં આવેલી અપલોડની સમસ્યાઓમાં 89% નો ઘટાડો થયો. • ગુમ થયેલી ફાઇલો વિશેના સપોર્ટ ટિકિટ્સ અઠવાડિયાના 15 થી ઘટીને અઠવાડિયાના 1 થઈ ગયા.
સૌથી મોટી સફળતા વિઝિબિલિટી (visibility) હતી. અમારી ટીમને નિષ્ફળતાઓ વિશે તરત જ ખબર પડી જાય છે. અમે ગુસ્સાવાળા ઈમેલની રાહ નથી જોતા.
Error handling એ ક્રેશેસ (crashes) રોકવા વિશે નથી. તે નિષ્ફળતાઓને વપરાશકર્તાઓ અને ટીમો માટે દૃશ્યમાન (visible) બનાવવા વિશે છે.
ક્રેશ (Crash) પ્રમાણિક છે. સાયલન્ટ ફેઈલ્યોર (Silent failure) એ જૂઠ છે.
જ્યારે તમે catch બ્લોક લખો, ત્યારે તમારી જાતને બે પ્રશ્નો પૂછો:
- જો આ નિષ્ફળ જાય તો કોણે જાણવાની જરૂર છે?
- તેઓએ હવે આગળ શું કરવું જોઈએ?
જો તમારો જવાબ "કોઈ નહીં" હોય, તો તમારી પાસે સમસ્યા છે.
Optional learning community: https://t.me/GyaanSetuAi
