นักพัฒนาได้รับการจ้างงานเพื่อแก้ไขบั๊กการค้นหาที่รำคาญเขามานานกว่าหนึ่งปี

ทีมชุมชน BigGo
นักพัฒนาได้รับการจ้างงานเพื่อแก้ไขบั๊กการค้นหาที่รำคาญเขามานานกว่าหนึ่งปี

ความหงุดหงิดของวิศวกรซอฟต์แวร์ที่ต้องเผชิญกับปัญหา race condition ในฟีเจอร์การค้นหามานานหนึ่งปี ได้นำไปสู่วิธีแก้ปัญหาที่แปลกใหม่: เข้าร่วมบริษัทเพื่อแก้ไขปัญหานั้นด้วยตัวเอง นักพัฒนาคนนี้ซึ่งเป็นผู้ก่อตั้ง Trieve (บริษัทเทคโนโลยีการค้นหา) ได้เผชิญกับปัญหาผลการค้นหาที่ทำงานผิดปกติบนแพลตฟอร์มเอกสาร Mintlify ที่บริษัทของเขาเองให้บริการเทคโนโลยีพื้นฐาน

ปัญหาที่ไม่ยอมหายไป

ปัญหานี้เป็น race condition แบบคลาสสิกในฟังก์ชันการค้นหา เมื่อผู้ใช้พิมพ์อย่างรวดเร็ว ระบบบางครั้งจะแสดงผลการค้นหาสำหรับคำค้นหาก่อนหน้านี้แทนที่จะเป็นคำค้นหาปัจจุบัน สิ่งนี้เกิดขึ้นเพราะคำค้นหาที่ใช้ debounce ไม่ได้ถูกยกเลิกอย่างเหมาะสมเมื่อคำค้นหาใหม่เริ่มต้นขึ้น สำหรับคนที่บริษัทของเขาให้เทคโนโลยีการค้นหาพื้นฐาน การเห็นผู้ใช้ประสบกับผลการค้นหาที่แย่รู้สึกเหมือนเป็นการเตือนใจอย่างต่อเนื่องเกี่ยวกับงานที่ยังไม่เสร็จ

นักพัฒนาได้แจ้งปัญหานี้ผ่านช่องทางผู้ขายปกติ แต่มันไม่เคยกลายเป็นความสำคัญอันดับแรกสำหรับทีมที่ยุ่งอยู่กับการจัดการเว็บไซต์เอกสารมากกว่า 30,000 เว็บไซต์

รายละเอียดของโซลูชันทางเทคนิค:

  • ปัญหา: Race conditions ในการค้นหาแบบ debounced search queries
  • สาเหตุหลัก: การค้นหาครั้งก่อนหน้าไม่ได้ถูกยกเลิกเมื่อมีการค้นหาใหม่เริ่มต้นขึ้น
  • โซลูชัน: เพิ่ม AbortController เพื่อยกเลิกการค้นหาครั้งก่อนหน้า
  • ผลลัพธ์: ผลการค้นหาตรงกับข้อมูลที่ผู้ใช้ป้อนในปัจจุบันเสมอ
  • แพลตฟอร์มที่ได้รับผลกระทบ: เว็บไซต์เอกสาร Mintlify (มากกว่า 30,000 เว็บไซต์)

ชุมชนแบ่งปันความหงุดหงิดที่คล้ายกัน

เรื่องราวนี้สะเทือนใจนักพัฒนาคนอื่นๆ อย่างมากที่เผชิญกับความรำคาญในชีวิตประจำวันที่คล้ายกัน หลายคนแบ่งปันเรื่องราวของตัวเองเกี่ยวกับบั๊กที่เกิดขึ้นอย่างต่อเนื่องในบริการยอดนิยม คนหนึ่งกล่าวถึงการต้องรับมือกับ Google Maps ที่เปลี่ยนกลับไปใช้หน่วยไมล์แทนกิโลเมตรอยู่เสมอ - การตั้งค่าที่เขาต้องเปลี่ยนประมาณ 500 ครั้งในช่วง 20 ปี คนอื่นๆ ชี้ไปที่ปัญหาเช่น Google Flights ที่เปลี่ยนสกุลเงินระหว่างการเดินทาง หรือฟีเจอร์พื้นฐานที่หายไปเช่นการทำเครื่องหมายอ่านทั้งหมดสำหรับข้อความเสียงในอุปกรณ์ Apple

นี่คือระดับความยิ่งใหญ่ที่ฉันปรารถนาในชีวิต

การสนทนาเผยให้เห็นว่าปัญหาเล็กๆ แต่เกิดขึ้นอย่างต่อเนื่องเหล่านี้สามารถผลักดันให้ผู้คนใช้มาตรการที่รุนแรง โดยบางคนล้อเล่นเกี่ยวกับการสมัครงานที่บริษัทเทคโนโลยีใหญ่เพียงเพื่อแก้ไขสิ่งที่รำคาญใจของตัวเอง

ปัญหาที่คล้ายกันที่ชุมชนรายงาน:

  • Google Maps : การตั้งค่าหน่วยกิโลเมตร/ไมล์รีเซ็ตประมาณ 500 ครั้งในช่วง 20 ปี
  • Google Flights : การเปลี่ยนสกุลเงินระหว่างเซสชันการท่องเที่ยว
  • Apple Wallet : บัตรผ่านที่หมดอายุไม่ได้ถูกลบออกอัตโนมัติ (ได้รับการแก้ไขแล้วโดยพนักงานที่ลาออกหลังจากใช้งาน)
  • Apple Voicemail : ขาดฟังก์ชัน "ทำเครื่องหมายทั้งหมดว่าอ่านแล้ว"
  • เว็บไซต์จอง: ปัญหาการเลื่อนและการโหลดของแถบตัวกรองด้านข้าง

การแก้ไขทางเทคนิค

เมื่อเข้าไปอยู่ในบริษัทแล้ว (ผ่านสิ่งที่ดูเหมือนจะเป็นการซื้อกิจการ) วิธีแก้ปัญหากลับตรงไปตรงมาอย่างน่าประหลาด การเพิ่ม AbortController ไปยังฟังก์ชันการค้นหาที่ใช้ debounce ทำให้ระบบสามารถยกเลิกคำค้นหาก่อนหน้าเมื่อคำค้นหาใหม่เริ่มต้นขึ้น การเปลี่ยนแปลงง่ายๆ นี้ทำให้มั่นใจได้ว่าผลการค้นหาจะตรงกับสิ่งที่ผู้ใช้กำลังพิมพ์อยู่เสมอ

การแก้ไขนี้เน้นย้ำถึงความหงุดหงิดที่พบบ่อยในการพัฒนาซอฟต์แวร์: บางครั้งปัญหาที่น่ารำคาญที่สุดมีวิธีแก้ไขที่ค่อนข้างง่าย แต่ลำดับความสำคัญขององค์กรและอุปสรรคในการเข้าถึงทำให้ไม่สามารถแก้ไขได้

ข้อได้เปรียบของโอเพนซอร์ส

ประสบการณ์นี้เสริมความชอบของนักพัฒนาต่อซอฟต์แวร์โอเพนซอร์ส ที่ทุกคนสามารถส่งการแก้ไขสำหรับปัญหาที่พบได้ ในระบบปิด แม้แต่การปรับปรุงง่ายๆ ก็สามารถยังไม่ได้รับการแก้ไขเป็นระยะเวลานาน ทำให้เกิดความหงุดหงิดอย่างต่อเนื่องสำหรับผู้ใช้ที่อาจสามารถแก้ไขปัญหาเหล่านั้นได้ด้วยตัวเอง

เรื่องราวนี้ได้สร้างแรงบันดาลใจให้คนอื่นๆ พิจารณาแนวทางที่คล้ายกัน แม้ว่าบางคนจะตั้งคำถามเกี่ยวกับจริยธรรมและความถูกต้องตามกฎหมายของการเข้าร่วมบริษัทเพื่อทำการเปลี่ยนแปลงที่เป็นประโยชน์ต่อนายจ้างอื่นโดยเฉพาะ ส่วนใหญ่เห็นด้วยว่าความโปร่งใสและการเปิดเผยข้อมูลที่เหมาะสมจะเป็นสิ่งจำเป็นในสถานการณ์เช่นนี้

Race condition: บั๊กซอฟต์แวร์ที่เกิดขึ้นเมื่อจังหวะเวลาของเหตุการณ์ส่งผลต่อพฤติกรรมของโปรแกรม มักทำให้เกิดผลลัพธ์ที่คาดเดาไม่ได้

Debounced search: เทคนิคที่หน่วงเวลาการทำงานของการค้นหาจนกว่าผู้ใช้จะหยุดพิมพ์ เพื่อลดคำขอเซิร์ฟเวอร์ที่ไม่จำเป็น

อ้างอิง: I couldn't submit a PR, so I got hired and fixed it myself