Tech Stack แบบไหนดี

Teerayut Hiruntaraporn
1 min readFeb 19, 2021

--

พอดีนั่งฟัง Group Programming ใน Clubhouse เมื่อสักครู่มีเรื่องที่น่าสนใจเรื่องนึง

คำถามมันก็จะเกี่ยวข้องกับ Technology Stack ที่จะใช้ใน Web Application นั่นแหละ ว่าเราจะเลือก Tech Stack แบบไหนถึงจะเหมาะสม

ส่วนตัวชอบคำตอบของคุณโกวิท ที่บอกว่า

Tech Stack ที่ดีต้องอยู่มือ

ทีนี้ก็คงต้องกลับมานั่งคิดต่อว่าคำว่าอยู่มือคืออะไรกัน ตอนนี้ก็คิดมาได้สัก 3 เรื่อง

  • มีความเชี่ยวชาญเพียงพอ
  • มีประสิทธิภาพเพียงพอ
  • ดูแลรักษาได้ยาวนานเพียงพอ

เชี่ยวชาญเพียงพอ

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

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

เว้นห่างไปอีกหลายปี ในช่วงที่ AJAX เข้ามาแรกๆ ก็เคยมีความตั้งใจอยากใช้เพื่อที่จะทำให้ Application มีความ interactive มากขึ้น อย่างไรก็ตาม AJAX นั้นมาพร้อมกับการจัดการ flow และ state ที่ไม่เหมือนกับวิธีการดังเดิม เมื่อน้องที่พัฒนาไม่สามารถควบคุมการทำงานของ AJAX ได้ ก็เกิดปัญหา Invalid State มากมาย ประกอบกับ ช่วงเวลาต้องส่งงานที่จำกัดมาก ไม่เกิน 2 สัปดาห์ ท้ายที่สุดผู้เขียนจึงหักดิบด้วยการเข้าไปเอา AJAX ออกทั้งหมด แล้วใช้ Server Render แทน ทำให้ระบบกลับสู่สภาวะที่ดี และสามารถส่งงานได้ในเวลาที่กำหนด

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

มีประสิทธิภาพเพียงพอ

ส่วนตัวก็เป็นคนที่ชื่นชอบภาษาที่ดูมี Performance สูง ช่วงหนึ่งก็มีความรู้สึกอยากจะเอา Golang มาแทนระบบที่ใช้ภาษา Ruby ซึ่งก็ใช้งานมาสักพักแล้วก็ให้บริการลูกค้าได้ดี

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

หลายครั้งที่เรามักจะขายวิญญาณให้กับภาษาหรือเฟรมเวิร์คที่เราไม่ถนัด เพียงเพราะดู Benchmark ว่ามันทำงานได้เร็วกว่า ภาษาที่เราถนัดอยู่ในตอนนั้น แต่อยากให้หยุดคิดก่อนว่า Context ที่เราดูแลมันใหญ่ขนาดนั้นจริงๆ แล้วการเปลี่ยนภาษาเพื่อให้ได้ Performance ตามที่คุย (ในความจริงมีปัจจัยหลายๆอย่างที่ อาจจะไม่ได้เห็นผลแบบใน Benchmark) Trade-off มันคุ้มค่าพอหรือไม่

ดูแลรักษาได้ยาวนานพอ

ในเรื่องของการดูแลรักษานั้น จะมีอยู่ 2 ปัจจัย อย่างแรกคือตัวภาษาหรือเฟรมเวิร์ค อย่างที่สองคือทีมงาน ถ้าภาษามีความ Dynamic สูง ก็จำเป็นที่จะต้องมีทีมงานที่ Dynamic สูงเช่นเดียวกัน

เคยเจอเคสตอนที่ มาใช้ javascript แบบหนักๆ ในช่วงแรกๆ โดยด้วยความเร่งของงาน ก็มีคนปั่น Javascript ด้วยการ copy & paste code รัวๆ และบอกว่าจะแก้ไข (Refactor) ตรวจนี้ในภายหลัง อย่างไรก็ตามคนนั้นก็ได้ลาออกก่อนที่จะไปแก้โค้ดส่วนนั้น ทำให้โค้ดส่วนนั้นเป็นปัญหาในการ Maintain ไปพักใหญ่

คำถามที่ควรจะต้องถามสำหรับเรื่องนี้คือ ถ้าใช้วิธีนี้แล้ว ทีมในอนาคตจะดูแลได้หรือไม่ ถ้าไม่ได้จะต้องทำอย่างไรให้ดูแลได้

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

ทั้งหมดเป็นความเห็นส่วนตัวนะครับ ก็หวังว่าจะเป็นประโยชน์บ้างไม่มากก็น้อยครับ

--

--

Teerayut Hiruntaraporn
Teerayut Hiruntaraporn

No responses yet