อะไรที่ทำให้ Elixir เหมาะกับ Startup ?


ปัญหาหลักที่ startup ส่วนใหญ่เจอคือการหาว่า product/market fit อยู่ตรงไหน ซึ่งกุญแจสำคัญคือการ iterate อย่างรวดเร็ว – สร้าง, วัดผล, และปรับปรุงตาม feedback จากลูกค้าให้เร็วที่สุด

Ruby on Rails เข้าใจเรื่องนี้ดี และช่วย bootstrapped ให้หลายบริษัทใหญ่เติบโตขึ้นมา เช่น Airbnb, Stripe, Coinbase, และ DoorDash ซึ่งล้วนเริ่มต้นจากการใช้ Rails

Rails เคยเป็น (และยังคงเป็น) framework ที่ยอดเยี่ยม แต่สิ่งที่น่าแปลกใจก็คือ framework ภาษาอื่น ๆ ยังตามไม่ทัน แม้จนถึงวันนี้

แต่มี ecosystem หนึ่งที่ไม่ต้องการอะไรแทนที่ Rails เลย นั่นคือ Elixir

Elixir เป็นตัวเลือกที่ดีสำหรับทีมที่ต้องการปล่อยของไว ๆ โดยเฉพาะเมื่อใช้ร่วมกับ web framework อย่าง Phoenix ซึ่งช่วยให้สามารถพัฒนาและ iterate ได้รวดเร็ว พร้อมกับความสามารถด้าน concurrency ที่โครตจะดี ซึ่งยกระดับแนวคิดของ Rails ไปอีกขั้น ไม่ว่าจะเป็นงาน infra, data pipeline หรือ CRUD ก็ตาม

Phoenix/Ecto

Rails ทำถูกแล้วในเรื่อง “batteries included” และ Phoenix ก็สืบทอดแนวคิดนี้มาเต็ม ๆ เพราะทีมผู้สร้างเคยเป็นอดีตทีม Rails มาก่อน โดยนำสิ่งที่ดีที่สุดจาก Rails มาใช้งาน พร้อมตัดส่วนที่ไม่ดีออกไป

Phoenix ให้ productivity สูงเหมือน Rails แต่ยังคงความโปร่งใสและควบคุมได้ง่าย โดยไม่มีคำครหาว่า “magical” เหมือนที่ Rails เคยได้รับ

Phoenix มาพร้อม ORM ชื่อ Ecto ซึ่งใช้งานดีมากกกกก ไม่ต้องติดตั้งเครื่องมือ migration เพิ่มเอง และถ้าต้องการ auth ก็แค่รันคำสั่ง mix phxgenauth ก็จะได้ authentication code ที่ดีและผ่านการตรวจสอบมาให้เลย

พื้นฐานพวกนี้ควรได้มาฟรี และไม่ควรกินเวลาของ startup เลย

Standard Library

Elixir มี standard library ที่ดีอยู่แล้ว ทำให้การพัฒนาทั้งง่ายและสนุก โดยเฉพาะ module อย่าง Enum และ Map ที่ออกแบบมาอย่างดีสำหรับงาน functional/immutable programming

Monoliths

ก่อนที่จะเจอ product/market fit startup ไม่ควรเขียน microservices เลย เพราะ distributed systems นั้นซับซ้อนมาก และยังมีปัญหาอีกเพียบรออยู่

เหตุผลหลักที่ทีมมักใช้ microservices คือ:

  • การ scale แยกแต่ละส่วน (independent scaling)
  • ความเป็นอิสระของทีม (team autonomy)
  • การแยกข้อผิดพลาด (fault isolation)
  • การ deploy ทีละส่วน (incremental deployment)

สำหรับ startup early-stage จริง ๆ เหลือแค่ 2 ข้อที่ควรใส่ใจคือ: (1) การ scale แยกได้ และ (3) fault isolation

Elixir รองรับ monolith ได้ดีมาก และสามารถ isolate runtime ได้ง่ายอีกด้วย ซึ่งช่วยให้ได้ทั้งสองอย่างโดยไม่ต้องแตกเป็น microservices ตั้งแต่แรก

Remote Shells

REPL เป็นเครื่องมือที่ทรงพลังมาก และยิ่งดีเข้าไปอีกเมื่อสามารถเชื่อมต่อกับ instance ที่รันจริงได้

ในระหว่าง dev คุณสามารถ:

  • รันฟังก์ชันแบบ interactive
  • ตรวจสอบ state และ debug แบบ real-time
  • hot reload โค้ดโดยไม่ต้อง restart

ถ้าตั้งค่าดี ๆ remote shell ยังสามารถใช้ใน production ได้อย่างปลอดภัย:

  • ลดความจำเป็นในการสร้าง admin dashboard
  • ตรวจสอบ system สด ๆ แก้ปัญหาโดยไม่ต้อง redeploy
  • hot patch ปัญหาโดยไม่ต้อง CI/CD ใหม่ทั้งหมด

Toolchain

Toolchain ของ Elixir โดยเฉพาะ mix นั้นดีมากจนแทบไม่ต้องคิดถึงเครื่องมืออื่นเลย จุดอ่อนในอดีตคือ Language Server Protocol (LSP) แต่ตอนนี้กำลังรวมหลายโปรเจกต์เป็น official LSP ตัวใหม่แล้ว

BEAM และ OTP/Concurrency

หัวใจของ Elixir คือ BEAM virtual machine และ OTP libraries ของ Erlang ที่มอบ runtime และ concurrency ที่ทรงพลังมาก

BEAM มีสถาปัตยกรรมแบบ “everything is a process” ซึ่งทำให้สร้าง abstraction ซ้อนกันได้เรื่อย ๆ โดยที่ predictable และ consistent ตลอดทาง

ถึงคุณจะเขียนแค่ CRUD app คุณก็ยังได้ประโยชน์จาก plumbing พวกนี้แบบอ้อม ๆ เช่น reliability และ fault-tolerance โดยไม่ต้องเขียน concurrent code เองเลย

ถ้าคุณทำระบบอย่าง Sequin (บริษัท start-up) ที่ต้องจัดการ distributed system และ concurrency จะยิ่งรู้สึกว่าเครื่องมือที่ Elixir มีนั้น “เกินดี” ไปมาก

Components ขนาดเล็ก

Elixir เขียนได้กระชับ expressive มาก ทำให้ components มักจะเล็ก อ่านง่าย และเข้าใจง่าย

LiveView / LiveSvelte = frontend ที่ iterate ได้เร็วที่สุด

Elixir + LiveView + LiveSvelte เป็น frontend stack ที่ iterate ได้เร็วที่สุดที่เราเคยใช้มา

ในขณะที่คนอื่นใช้ React + REST/GraphQL API เราใช้ LiveView เพื่อย้าย business logic ไปไว้ฝั่ง backend แทน ทำให้ frontend ง่ายมาก (แค่ templating engine) และ dev คนเดียวสามารถส่ง feature แบบ full-stack ได้รวดเร็วมาก

Data Plane / Control Plane

ที่ Sequin เรามี data plane (pipeline จาก Postgres → sink) และ control plane (CRUD app จัดการ pipeline)

Elixir เก่งทั้งสองด้าน:

  • Data pipeline → ใช้ GenStage / Broadway
  • CRUD → ใช้ Phoenix + Ecto ได้ดีมาก

LLMs เขียน Elixir ได้ดีมาก

Claude Sonnet, ChatGPT และ LLM รุ่นใหม่ ๆ เขียน Elixir/Phoenix ได้แบบ idiomatic แทบไม่พลาด syntax

Elixir เป็น niche แต่โค้ดที่มีอยู่กลับมีคุณภาพสูงกว่าเฉลี่ย ทำให้ผลลัพธ์จาก LLM ยิ่งดีตามไปด้วย

จุดด้อย

  • หาคนที่เขียน Elixir เป็นยาก: โดยเฉพาะถ้ารับงาน onsite เฉพาะบางพื้นที่ เช่น San Francisco
  • แต่: เป็น stack ที่เรียนรู้ได้เร็ว และ dev ส่วนมากสนใจภาษา functional อยู่แล้ว

สิ่งที่ไม่ต้องกังวล

  • ต้องเรียน Erlang ด้วยไหม? ไม่จำเป็น อ่านแค่ OTP doc ก็พอ แล้วใช้ LLM ช่วยแปลงเป็น Elixir ได้
  • Deployment ยากไหม? ไม่เลย ใช้ Dockerfile มาตรฐานจากเว็บ Elixir ได้เลย
  • Library น้อยไหม? อาจจะ แต่ส่วนใหญ่เพียงพอ และสามารถขยายเองได้ง่ายเพราะ component มันเล็ก
  • Compile time ช้าไหม? ล่าสุดปรับปรุงดีขึ้นมากแล้ว และในโปรเจกต์ขนาดกลางก็ไม่เป็นปัญหาเลย

สรุป

startup ต้องการเทคโนโลยีที่ iterate ได้ไว แต่ก็มีเส้นทางขยายระบบในอนาคต Elixir ทำได้ทั้งสองอย่าง

Phoenix ให้ productivity แบบ Rails แต่ใช้ภาษา functional ที่มี concurrency เป็นจุดแข็ง

อนาคตยังสดใส:

  • LiveView v10 มาแล้ว
  • LiveSvelte กำลังมาแรง
  • Elixir กำลังเพิ่ม gradual typing

Elixir คือความสนุกในการพัฒนาอย่างแท้จริง และ Phoenix ทำให้เริ่มต้นจากศูนย์ไปหนึ่งได้รวดเร็วสุด ๆ

References: