Mitjy's Story
Do Did and Done
ทำไม Software ถึงมีราคาแพง
Oct 30, 2015 - 10:10 AM

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

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

"ทำไม Software ถึงมีราคาแพง"

 

สาเหตุที่ทำให้ซอร์ฟแวร์จะต้องมีราคาแพงเนื่องจาก

1. ลูกค้าไม่รู้ว่าอยากได้อะไร

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

 

2. การพัฒนาซอร์ฟแวร์ ไม่ใช่งานง่าย มันมีหลายส่วนที่ต้องทำ

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

  1. คนติดต่อลูกค้า หรือ Project Manager (ผุ้ควบคุมงาน) แต่จะเรียกอะไรก็ได้ หน้าที่หลัก ๆ ก็คือ การคุยกับลูกค้าเพื่อรับความต้องการ จากนั้นเอามาถ่ายทอดให้คนในทีมเพื่อจะสร้างผลงานจริง ๆ ออกมา
  2. คนทำตัวอย่าง หรือ Prototyper เวลาเราคุยงานกันต้องมีการทำตัวอย่างออกมาให้เป็นรูปธรรม จะได้คุยกันรู้เรื่อง
  3. คนออกแบบ หรือ Designer เป็นคนที่เอาข้อมูลจาก ข้อ 1 และ 2 มาทำให้จับต้องได้ เทียบกับการสร้างบ้านก็คือสถาปนิกนั่นเอง
  4. คนสร้าง หรือ Programmer เป็นคนที่เอาข้อมูลจาก ข้อ 1 - 3 มาสร้างให้เป็นรูปธรรม จับต้องได้ ใช้งานได้
  5. คนตรวจสอบ หรือ Tester คนนี้คือคนที่มาตรวจดูข้อผิดพลาดที่เกิดขึ้น เพื่อให้ Programmer กลับไปแก้ไข
  6. คนติดตั้งงาน คนนี้คือคนที่นำงานที่ได้จากข้อ 4 และ 5 เอาไปให้ลูกค้า ของผู้ว่าจ้างใช้งาน
  7. ผุ้ดูแลระบบ คนนี้มีหน้าทีทำให้งานในข้อ 6 สามารถทำงานได้ ซึ่งถ้ามีปัญหาก็ต้องส่งไปให้คนสร้าง แก้ไข ในช่วยอายุของซอร์ฟแวร์นั้น

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

 

3 ประสบการณ์ของผู้พัฒนา

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

ในแต่ละประเภทมีองค์ประกอบย่อยที่ต้องศึกษา เช่นการทำแอพพลิเคชั่น

คน 1 คนถ้าจะทำ Mobile App ได้นั้น จะต้องเริ่มจาก 

  1. เขียนโปรแกรมเป็น ในที่นี้คือเขียนภาษาที่ใช้พัฒนาได้ ถ้าจะให้คล่อง ๆ หน่อยใช้เวลา 1 ปีครับ (ยิ่งนานยิ่งชำนาญ)
  2. ต้องใช้งานระบบที่จะพัฒนามาอย่างน้อย 3 เดือน เพื่อศึกษาธรรมชาติของระบบนั้น ๆ
  3. ต้องศึกษาเครื่องมือที่ต้องใช้พัฒนา ซึ่งแต่ละค่าย (iOS, Android, Window Phone) มีเครื่องมือไม่เหมือนกัน แต่บอกได้อย่างเดียวว่าใช้เวลาในการศึกษา 6 เดือน - 1 ปี แต่ถ้าจะให้คล่องหน่อยก็ 1 ปีขึ้นไป และถ้าจะให้ชำนาญก็ต้อง 2 ปีขึ้นไป

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

 

4. ซอร์ฟแวร์ต้องปรับเปลี่ยนอยู่เสมอ

ในการพัฒนาซอร์ฟแวร์นั้น คือการทำโปรแกรมให้คนใช้ ดังนั้นมันมักจะมีการเปลียนแปลงอยู่เสมอ ซึ่งในการเปลี่ยนแปลงก็มีตั้งแต่ การเปลี่ยนแปลงเล็ก ๆ แค่เปลี่ยนสีสันเล็กน้อย ไปจนถึงการรื้อโครงสร้างบางส่วนเพื่อทำให้ตรงความต้องการ ซึ่งซอร์ฟแวร์เหมือนการสร้างบ้านครับ ถ้าถูกออกแบบมาดีในตอนแรก ก็สามารถปรับเปลี่ยนได้คล้าย ๆ กับเฟอร์นิเจอร์แบบถอดประกอบ แต่ก็มีมากกว่า 50 เปอร์เซ็นครับ ที่ต้องใช้วิธีการทุบทิ้งแล้วทำใหม่ นั่นหมายความว่า ยิ่งมีการปรับเปลี่ยนมากเท่าไหร่ ก็จะยิ่งใช้เวลามากยิ่งขึ้น (ส่วนมากมักจะเป็นแบบหลังครับในการทำงานจริงๆ ทั้งนี้ขึ้นอยู่กับประสบการ์ณตามข้อ 3 ครับ)

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

 

5. Bug is a feature.

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

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

 

"ซอร์ฟแวร์ยิ่งนานวัน ยิ่งแข็งแกร่ง ผิดกับระบบอื่น ๆ ซึ่งยิ่งนานวัน ยิ่งเสื่อมสภาพ" อาจารย์ผมได้กล่าวไว้

 

สุดท้ายแล้ว เรื่องราคาก็เป็นเรื่องที่ต้องตกลงกันครับ ผู้พัฒนาก็อยากให้ราคาสมน้ำสมเนื้อเหมาะสมกับความยาก และประสบการณ์ที่ได้ทำมา ส่วนผู้ว่าจ้างก็อยากได้งานที่ราคาโอเค (ถูกได้ก็ดี) ถ้าตกลงกันได้ก็ปิดดีล เริ่มทำงาน แต่ถ้าตกลงกันไม่ได้ ก็อย่าพยายามฝืนครับ

 

ปล. ขอบคุณ Cover จาก http://www.mattosdesign.com/wallpapers/

Smith Krengkrud
Hi, I am a developer.