วิศวกรซอฟต์แวร์ถกเถียงความหมายที่แท้จริงของ "ความเรียบง่าย" ในการออกแบบระบบ

ทีมชุมชน BigGo
วิศวกรซอฟต์แวร์ถกเถียงความหมายที่แท้จริงของ "ความเรียบง่าย" ในการออกแบบระบบ

ชุมชนวิศวกรรมซอฟต์แวร์กำลังมีส่วนร่วมในการอภิปรายอย่างร้อนแรงเกี่ยวกับความหมายที่แท้จริงของการสร้างระบบที่เรียบง่าย การถกเถียงนี้มีจุดศูนย์กลางอยู่ที่หลักการยอดนิยมในการทำสิ่งที่เรียบง่ายที่สุดที่อาจจะใช้งานได้ แต่วิศวกรพบว่าการนิยามความเรียบง่ายนั้นซับซ้อนกว่าที่ปรากฏมาก

ความขัดแย้งของประสบการณ์

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

ปัญหาจะชัดเจนขึ้นเมื่อวิศวกรต้องเผชิญกับการตัดสินใจในโลกแห่งความเป็นจริง ลองพิจารณาการเลือกระหว่างการจำกัดอัตราในหน่วยความจำกับการใช้บริการเฉพาะเช่น Redis วิธีการในหน่วยความจำดูเรียบง่ายกว่าเพราะหลีกเลี่ยงการพึ่งพาภายนอก แต่มันจะพังทลายลงเมื่อมีอินสแตนซ์เซิร์ฟเวอร์หลายตัว ในขณะเดียวกัน Redis เพิ่มความซับซ้อนของโครงสร้างพื้นฐาน แต่ให้พฤติกรรมที่สม่เสมอในระบบแบบกระจาย

ขนาดเปลี่ยนทุกอย่าง

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

อย่างน้อยครึ่งหนึ่งของเวลา ความซับซ้อนมาจากระบบเอง เสียงสะท้อนของโครงสร้างองค์กร โครงสร้างพื้นฐาน และไม่ใช่ข้อกำหนดหรือโดเมนปัญหา

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

แหล่งที่มาของความซับซ้อนทั่วไปในระบบซอฟต์แวร์:

  • โครงสร้างองค์กร: ผลกระทบของกฎของ Conway ต่อสถาปัตยกรรมระบบ
  • ข้อกำหนดด้านโครงสร้างพื้นฐาน: ระบบที่มีอยู่ของบริษัทและข้อจำกัดในการติดตั้งใช้งาน
  • กรณีพิเศษ: รูปแบบการใช้งานในโลกจริงที่เผยให้เห็นสถานการณ์ที่ไม่คาดคิด
  • การเตรียมพร้อมสำหรับขนาด: การออกแบบที่ซับซ้อนเกินไปสำหรับการเติบโตที่คาดการณ์ไว้แต่ยังไม่เกิดขึ้น
  • หนี้ทางเทคนิค: การสะสมของทางลัดและความพยายามในการปรับปรุงโครงสร้างที่ไม่สมบูรณ์

ปัญหาการนิยาม

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

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

ปัจจัยสำคัญในการกำหนดความเรียบง่ายของระบบ:

  • ส่วนประกอบที่เคลื่อนไหวน้อยลง: ระบบที่มีองค์ประกอบน้อยลงให้คิดและจัดการ
  • การเชื่อมโยงแบบหลวม: องค์ประกอบที่มีอินเทอร์เฟซที่ชัดเจนและตรงไปตรงมา
  • ความเสถียร: ระบบที่ต้องการงานบำรุงรักษาอย่างต่อเนื่องน้อยลง
  • ค่าใช้จ่ายในการดำเนินงาน: การพิจารณาเรื่องการปรับใช้ การตรวจสอบ และการจัดการเหตุการณ์
  • การจัดการสถานะ: วิธีที่ระบบจัดการสถานะแบบกระจายและความสอดคล้อง

การตรวจสอบความเป็นจริงของอุตสาหกรรม

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

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

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

อ้างอิง: Do the simplest thing that could possibly work