จากซับซ้อนสู่เรียบง่าย: ศิลปะของการออกแบบแบบวนซ้ำ

ระบบที่ดีที่สุดเกิดจากการเริ่มต้นง่ายๆ แล้ววนซ้ำจนกลายเป็นสมบูรณ์แบบ ไม่ใช่การออกแบบซับซ้อนตั้งแต่แรก

จากซับซ้อนสู่เรียบง่าย: ศิลปะของการออกแบบแบบวนซ้ำ

จากซับซ้อนสู่เรียบง่าย: ศิลปะของการออกแบบแบบวนซ้ำ

TL;DR

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

แนวคิดหลัก

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

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

ทำไมถึงเป็นเช่นนั้น

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

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

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

ตัวอย่างในชีวิตจริง

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

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

เมื่อเปรียบเทียบ iOS กับ macOS เราจะเห็นว่า iOS ที่เป็นระบบเรียบง่ายกว่า กลับใช้งานง่ายกว่าและมีปัญหาน้อยกว่า นี่เป็นเพราะ iOS ถูกออกแบบมาให้ทำงานเฉพาะกับ hardware ที่จำกัด จึงไม่ต้องรองรับความซับซ้อนมากมายเหมือน macOS

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

บริบทไทย

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

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

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

ข้อควรระวัง

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

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

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

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

สุดท้าย การตั้งคำถามกับทุกอย่างจนเกินไปก็อาจจะทำให้งานไม่เสร็จ บางครั้งเราต้องยอมรับว่าบางสิ่งจำเป็นจริงๆ แม้ว่าจะดูไม่จำเป็นในตอนแรก และต้องหาจุดสมดุลระหว่างการตั้งคำถามกับการลงมือทำ

แหล่งที่มา

คำศัพท์วันนี้

iterate/IT-er-ate/

ทำซ้ำเพื่อปรับปรุง, พัฒนาแบบค่อยเป็นค่อยไป

perform repeatedly to refine and improve something

Successful companies iterate on their products based on user feedback.