1. ความไม่โปร่งใสของระบบเทคขนาดใหญ่
  • แม้แต่บริษัทเทคขนาดใหญ่เองก็ยังดำเนินระบบของตัวเองท่ามกลาง "หมอกแห่งสงคราม (fog of war)"
  • แม้แต่คำถามพื้นฐานอย่าง "ผู้ใช้ประเภท Y ใช้ฟีเจอร์ X ได้ไหม?", "เกิดอะไรขึ้นอย่างแน่ชัดเมื่อทำแอ็กชัน Z?", "ตอนนี้มีแพ็กเกจกี่แบบ?" ก็มีคนในองค์กรเพียงไม่กี่คนที่ตอบได้
  • ในกรณีหนัก ๆ ถึงขั้นต้องมอบหมายคนให้สืบค้นโดยเฉพาะ ทั้งที่ควรจะตอบได้จากการดูเอกสารสาธารณะเพียงอย่างเดียว แต่ความจริงกลับไม่เป็นเช่นนั้น
  1. รากของความซับซ้อน: Wicked Features
  • ซอฟต์แวร์ขนาดใหญ่มีความซับซ้อนอย่างยิ่งจาก self-hosting, การทดลองใช้ฟรี, การควบคุมระดับองค์กร/นโยบาย, การทำโลคัลไลซ์หลายภาษา, ฟีเจอร์เพื่อให้สอดคล้องกับข้อกำกับดูแล ฯลฯ และฟีเจอร์เหล่านี้ ส่งผลต่อทุกฟีเจอร์ใหม่
  • ตัวอย่างเช่น เมื่อเพิ่มการควบคุมนโยบาย ก็ต้องนำไปใช้กับทุกฟีเจอร์ใหม่เสมอ และเมื่อทำโลคัลไลซ์ก็ต้องแปลตามไปด้วย
  • คำถามอย่าง "ลูกค้าองค์กรแบบ self-hosting ในรีเจียน EU เข้าถึงฟีเจอร์บางอย่างได้หรือไม่" ตรวจสอบได้ด้วยการสำรวจโค้ดโดยตรงหรือการทดลองเท่านั้น หากละฟีเจอร์เหล่านี้ออกไปจะเท่ากับ ยอมทิ้งรายได้มหาศาล ซึ่งเป็นความแตกต่างระหว่างบริษัทใหญ่กับบริษัทเล็ก
  1. ข้อจำกัดของการทำเอกสาร
  • ในทางทฤษฎี เราอาจทำเอกสารอธิบายปฏิสัมพันธ์ต่าง ๆ ของฟีเจอร์ใหม่ได้ แต่ ระบบเปลี่ยนแปลงเร็วกว่าที่เอกสารจะตามทัน
  • ในสภาพแวดล้อมแบบไดนามิกที่ไม่ใช่ระบบนิ่ง ผู้เขียนเอกสารต้องนำหน้าการเปลี่ยนแปลง ซึ่งแทบเป็นไปไม่ได้
  • ปัญหาที่ใหญ่กว่านั้นคือ พฤติกรรมจำนวนมากเกิดจาก ปฏิสัมพันธ์ของค่าตั้งต้น ไม่ใช่จากเจตนาที่ระบุไว้อย่างชัดเจน — การทำเอกสารจึงแทบไม่ต่างจากการสำรวจระบบจริง
  1. หัวใจของคำตอบ: codebase และวิศวกร
  • คำตอบที่แม่นยำจะได้มาก็ต่อเมื่อ ลงไปดู codebase โดยตรง เท่านั้น และนี่คือฐานอำนาจของวิศวกร
  • หน้าที่หลักของทีมวิศวกรรมคือ ความสามารถในการตอบคำถามเกี่ยวกับซอฟต์แวร์
  • อาศัยความรู้โดยนัย (tacit knowledge) ที่อยู่ในหัวของคนซึ่งคุ้นเคยกับโค้ดส่วนนั้น
  • เมื่อมีการปรับโครงสร้างทีม ความรู้เหล่านี้อาจสูญหาย จนต้องทำ "การผ่าตัดเชิงสำรวจ" (เช่น แก้โค้ดหรือบังคับเช็กบางอย่าง)
  • การเขียนโค้ดนั้นง่ายกว่า แต่การ ตอบอย่างน่าเชื่อถือ ยากเพราะเป็นเรื่องของความมั่นใจ (เสี่ยงตอบผิด และต้องสรุปย่อให้กระชับ)
  1. สรุป: ทักษะที่มีคุณค่าสูง
  • คนที่ไม่ใช่สายเทคนิคมักเชื่อว่าซอฟต์แวร์เป็นสิ่งที่วิศวกรเข้าใจได้อย่างสมบูรณ์ แต่ ไม่มีใครเข้าใจระบบขนาดใหญ่ได้ทั้งหมดจริง ๆ
  • แม้แต่คำถามพื้นฐานก็ยังต้องอาศัยการสืบค้นซ้ำ ๆ และเมื่อระบบเปลี่ยนก็จะมีความต่างเชิงรายละเอียดและข้อยกเว้นเกิดขึ้น ความสามารถในการ ให้คำตอบที่ถูกต้องแม่นยำ จึงมีคุณค่าอย่างยิ่ง

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น