แรงบันดาลใจ (Motivation)
ไอเดียหลักของ Feature-Sliced Design คือการอำนวยความสะดวกและลดต้นทุนในการพัฒนาโปรเจกต์ที่ซับซ้อน โดยอิงจาก การรวบรวมผลการวิจัยและการหารือประสบการณ์จากนักพัฒนาที่หลากหลาย
ชัดเจนว่านี่ไม่ใช่ "กระสุนเงิน" (Silver Bullet) และแน่นอนว่าระเบียบวิธีนี้ก็มี ขอบเขตการใช้งาน ของมันเอง
อย่างไรก็ตาม ก็ยังมีคำถามที่สมเหตุสมผลเกี่ยวกับ ความเป็นไปได้ของระเบียบวิธีนี้โดยรวม
มีรายละเอียดเพิ่มเติมที่ พูดคุยกันในการอภิปราย
ทำไมโซลูชันที่มีอยู่ถึงยังไม่พอ?
ปกติมักจะมีข้อโต้แย้งเหล่านี้:
- "ทำไมต้องมี Methodology ใหม่ด้วย ในเมื่อเรามีแนวทางและหลักการออกแบบที่มีมานานแล้วอย่าง
SOLID,KISS,YAGNI,DDD,GRASP,DRYฯลฯ"- "ปัญหาทุกอย่างแก้ได้ด้วยเอกสารโปรเจกต์ที่ดี การทดสอบ และกระบวนการที่เป็นระบบ"
- "ปัญหาคงไม่เกิดถ้านักพัฒนาทุกคนทำตามข้อข้างบนทั้งหมด"
- "ทุกอย่างถูกคิดค้นมาก่อนคุณแล้ว คุณแค่ใช้มันไม่เป็น"
- "ใช้ {ชื่อเฟรมเวิร์ก} สิ - ทุกอย่างถูกกำหนดมาให้คุณแล้ว"
แค่หลักการอย่างเดียวไม่พอ
การมีแค่หลักการ (Principles) ไม่เพียงพอที่จะออกแบบสถาปัตยกรรมที่ดี
ไม่ใช่ทุกคนที่จะรู้หลักการทั้งหมด และมีคนน้อยลงไปอีกที่เข้าใจและนำไปประยุกต์ใช้ได้อย่างถูกต้อง
หลักการออกแบบมักจะกว้างเกินไป และไม่ได้ให้คำตอบที่เจาะจงสำหรับคำถามที่ว่า: "จะออกแบบโครงสร้างและสถาปัตยกรรมของแอปพลิเคชันที่ยืดหยุ่นและสเกลได้ยังไง?"
กระบวนการไม่ได้ได้ผลเสมอไป
เอกสาร/การทดสอบ/กระบวนการ แน่นอนว่าเป็นสิ่งที่ดี แต่น่าเสียดาย ที่ถึงแม้จะลงทุนลงแรงไปเยอะ - มันก็ไม่ได้แก้ปัญหาที่เกิดจากสถาปัตยกรรมและการพาคนใหม่เข้าโปรเจกต์ได้เสมอไป
- เวลาในการเริ่มงานของนักพัฒนาแต่ละคนไม่ได้ลดลงมากนัก เพราะเอกสารมักจะเยอะมาก หรือไม่ก็ไม่อัปเดต
- การต้องคอยเช็คตลอดเวลาว่าทุกคนเข้าใจสถาปัตยกรรมตรงกันหรือไม่ ก็ต้องใช้ทรัพยากรเยอะมาก
- อย่าลืมเรื่อง Bus-factor ด้วย (ความเสี่ยงเมื่อคนรู้ข้อมูลสำคัญหายไป)
เฟรมเวิร์กที่มีอยู่นำไปใช้ไม่ได้ทุกที่
- โซลูชันที่มีอยู่มักมีกำแพงการเรียนรู้ที่สูง (High Entry Threshold) ซึ่งทำให้หาคนมาทำงานด้วยยาก
- บ่อยครั้งที่การเลือกเทคโนโลยีถูกกำหนดไปแล้วก่อนที่จะเจอปัญหาหนักๆ ในโปรเจกต์ ดังนั้นคุณต้องสามารถ "ทำงานกับสิ่งที่มีอยู่" ได้ - โดยไม่ยึดติดกับเทคโนโลยี
Q: "ในโปรเจกต์
React/Vue/Redux/Effector/Mobx/{YOUR_TECH}ของเรา - ฉันจะสร้างโครงสร้างของ Entities และความสัมพันธ์ระหว่างพวกมันให้ดีขึ้นได้ยังไง?"
ผลลัพธ์ที่ได้
เราจะได้โปรเจกต์ที่ "มีความเฉพาะตัวสูงเหมือนเกล็ดหิมะ" ซึ่งแต่ละโปรเจกต์ต้องใช้เวลาเรียนรู้นาน และความรู้ที่ได้ก็ยากที่จะเอาไปใช้กับโปรเจกต์อื่น
@sergeysova: "นี่คือสถานการณ์ที่เป็นอยู่ในวงการ Frontend Development ตอนนี้: Lead แต่ละคนจะคิดค้นสถาปัตยกรรมและโครงสร้างโปรเจกต์ที่แตกต่างกัน โดยที่ยังไม่ชัวร์ว่าโครงสร้างพวกนี้จะผ่านบททดสอบของกาลเวลาหรือไม่ ผลที่ได้คือ มีแค่ 2 คนนอกจากเขาที่พัฒนาโปรเจกต์ต่อได้ และนักพัฒนาใหม่ทุกคนต้องมานั่งเรียนรู้ใหม่หมด"
ทำไมนักพัฒนาถึงต้องการ Methodology?
โฟกัสที่ Business Features ไม่ใช่ปัญหา Architecture
ระเบียบวิธีนี้ช่วยให้คุณประหยัดทรัพยากรในการออกแบบสถาปัตยกรรมที่สเกลได้และยืดหยุ่น แล้วเอาเวลาไปทุ่มให้กับการพัฒนาฟังก์ชันหลักแทน ในขณะเดียวกัน โซลูชันทางสถาปัตยกรรมก็มีมาตรฐานที่ใช้ได้ข้ามโปรเจกต์
อีกประเด็นคือ ระเบียบวิธีควรได้รับความไว้วางใจจากคอมมูนิตี้ เพื่อให้นักพัฒนาคนอื่นสามารถทำความคุ้นเคยและพึ่งพามันในการแก้ปัญหาโปรเจกต์ของเขาได้ภายในเวลาที่มี
โซลูชันที่พิสูจน์แล้วด้วยประสบการณ์
ระเบียบวิธีนี้ออกแบบมาเพื่อนักพัฒนาที่มองหา โซลูชันที่ผ่านการพิสูจน์แล้วสำหรับการออกแบบ Business Logic ที่ซับซ้อน
อย่างไรก็ตาม ระเบียบวิธีนี้โดยรวมคือชุดของ Best-practices และบทความที่พูดถึงปัญหาและเคสต่างๆ ระหว่างการพัฒนา ดังนั้น มันจึงมีประโยชน์สำหรับนักพัฒนาคนอื่นๆ ด้วย ที่ต้องเจอกับปัญหาระหว่างการพัฒนาและการออกแบบ
สุขภาพของโปรเจกต์ (Project Health)
ระเบียบวิธีจะช่วยให้ แก้ปัญหาและติดตามปัญหาของโปรเจกต์ได้ล่วงหน้า โดยไม่ต้องใช้ทรัพยากรจำนวนมหาศาล
บ่อยครั้งที่ Technical Debt สะสมพอกพูนตามกาลเวลา และความรับผิดชอบในการแก้ไขก็ตกอยู่ที่ทั้ง Lead และทีม
ระเบียบวิธีจะช่วย เตือน ถึงปัญหาที่เป็นไปได้ในการสเกลและการพัฒนาโปรเจกต์ล่วงหน้า
ทำไมธุรกิจถึงต้องการ Methodology?
Onboarding ที่รวดเร็ว
ด้วยระเบียบวิธีนี้ คุณสามารถจ้างคนที่ คุ้นเคยกับแนวทางนี้อยู่แล้ว และไม่ต้องมาเทรนใหม่
ผู้คนเริ่มเข้าใจและสร้างประโยชน์ให้โปรเจกต์ได้เร็วขึ้น และมีความมั่นใจเพิ่มขึ้นในการหาคนสำหรับ Iteration ต่อไปของโปรเจกต์
โซลูชันที่พิสูจน์แล้วด้วยประสบการณ์
ด้วยระเบียบวิธีนี้ ธุรกิจจะได้รับ โซลูชันสำหรับปัญหาส่วนใหญ่ที่เกิดขึ้นระหว่างการพัฒนาระบบ
เนื่องจากส่วนใหญ่ธุรกิจต้องการเฟรมเวิร์กหรือโซลูชันที่ช่วยแก้ปัญหาส่วนใหญ่ระหว่างการพัฒนาโปรเจกต์ได้
การนำไปใช้ในระยะต่างๆ ของโปรเจกต์
ระเบียบวิธีสามารถสร้างประโยชน์ให้โปรเจกต์ ทั้งในระยะ Support และ Development และรวมถึงระยะ MVP ด้วย
ใช่ สิ่งสำคัญที่สุดสำหรับ MVP คือ "ฟีเจอร์ ไม่ใช่สถาปัตยกรรมที่วางเผื่ออนาคต" แต่ถึงแม้จะมีเดดไลน์ที่จำกัด การรู้ Best-practices จากระเบียบวิธี จะช่วยให้คุณ "เจ็บตัวน้อยที่สุด" เมื่อออกแบบระบบเวอร์ชัน MVP โดยหาจุดกึ่งกลางที่สมเหตุสมผลได้ (แทนที่จะปั้นฟีเจอร์แบบ "มั่วๆ")
เรื่องการทดสอบก็พูดได้แบบเดียวกัน
เมื่อไหร่ที่เราไม่ต้องการ Methodology นี้?
- ถ้าโปรเจกต์จะมีชีวิตอยู่แค่ช่วงสั้นๆ
- ถ้าโปรเจกต์ไม่ต้องการสถาปัตยกรรมที่รองรับการดูแลรักษา (Support)
- ถ้าธุรกิจมองไม่เห็นความเชื่อมโยงระหว่าง Codebase และความเร็วในการส่งมอบฟีเจอร์
- ถ้าสิ่งที่สำคัญกว่าสำหรับธุรกิจคือการปิดงานให้เร็วที่สุด โดยไม่มีการซัพพอร์ตต่อ
ขนาดของธุรกิจ
- ธุรกิจขนาดเล็ก - มักต้องการโซลูชันสำเร็จรูปที่เร็วมากๆ เฉพาะเมื่อธุรกิจโตขึ้น (อย่างน้อยก็เกือบขนาดกลาง) เขาถึงจะเข้าใจว่าเพื่อให้ลูกค้าใช้งานต่อเนื่อง จำเป็นต้องใส่ใจเรื่องคุณภาพและความเสถียรของโซลูชันที่พัฒนาด้วย
- ธุรกิจขนาดกลาง - ปกติจะเข้าใจปัญหาส่วนใหญ่ของการพัฒนา และถึงแม้จะต้อง "เร่งปั่นฟีเจอร์" เขาก็ยังจัดสรรเวลาสำหรับการปรับปรุงคุณภาพ การ Refactor และการทดสอบ (และแน่นอน - สถาปัตยกรรมที่ขยายได้)
- ธุรกิจขนาดใหญ่ - ปกติจะมีผู้ใช้งานเยอะ มีพนักงานเยอะ และมีชุดแนวปฏิบัติของตัวเองที่กว้างขวาง และอาจจะมีแนวทางสถาปัตยกรรมของตัวเองด้วย ดังนั้นไอเดียที่จะเอาของคนอื่นมาใช้จึงอาจจะไม่เกิดขึ้นบ่อยนัก
แผนงาน (Plans)
เป้าหมายหลัก ระบุไว้ที่นี่ แต่นอกจากนั้น ยังคุ้มค่าที่จะพูดถึงความคาดหวังของเราที่มีต่อระเบียบวิธีนี้ในอนาคต
การรวมประสบการณ์
ตอนนี้เรากำลังพยายามรวมประสบการณ์ที่หลากหลายของ core-team และผลลัพธ์คือระเบียบวิธีที่แข็งแกร่งจากการปฏิบัติจริง
แน่นอนว่าเราอาจจะได้ Angular 3.0 เป็นผลลัพธ์ แต่มันสำคัญกว่ามากที่จะ สืบสวนปัญหาที่แท้จริงของการออกแบบสถาปัตยกรรมของระบบที่ซับซ้อน
และใช่ - เรามีข้อติชมเกี่ยวกับระเบียบวิธีเวอร์ชันปัจจุบัน แต่เราต้องการทำงานร่วมกันเพื่อไปถึงโซลูชันเดียวที่เหมาะสมที่สุด (โดยคำนึงถึงประสบการณ์ของคอมมูนิตี้ด้วย)
ชีวิตนอกเหนือจาก Specification
ถ้าทุกอย่างไปได้สวย ระเบียบวิธีจะไม่จำกัดอยู่แค่ Specification และ Toolkit
- อาจจะมีรายงาน (Reports) และบทความ (Articles)
- อาจจะมี
CODE_MODEsสำหรับการย้าย (Migration) ไปยังเทคโนโลยีอื่นๆ ของโปรเจกต์ที่เขียนตามระเบียบวิธี - เป็นไปได้ว่าในท้ายที่สุด เราจะสามารถเข้าถึงผู้ดูแล (Maintainers) ของโซลูชันเทคโนโลยีใหญ่ๆ ได้
- โดยเฉพาะ React เมื่อเทียบกับเฟรมเวิร์กอื่น - นี่คือปัญหาหลัก เพราะมันไม่ได้บอกวิธีแก้ปัญหาบางอย่าง