web
จากการทำงานในหลายๆ  project พบว่าแต่ละงานนั้น
มักจะมีความซับซ้อนเกิดขึ้นมาเป็นเรื่องปกติอยู่แล้ว
เนื่องจากมีทั้งการพัฒนา การ upgrade การ refactor code
รวมไปถึงการเพิ่มความสามารถใหม่ๆ เข้าไป

ในความซับซ้อนเหล่านั้น เรามักจะพบว่า มีสิ่งแปลกๆ มากมายเกิดขึ้น
และนั่นล้วนก่อให้เกิดปัญหาทั้งสิ้น
ดังนั้น เรามาดูกันว่าสิ่งเหล่านั้นมีอะไรกันบ้าง

ผมนำข้อมูลมาจากบทความเรื่อง 18 Critical Oversight Web Development 

สิ่งแปลกๆ ที่ก่อให้เกิดปัญหานั้นมักจะมาจาก

  • การขาดความรู้ของทีมพัฒนา
  • การขาดประสบการณ์ของทีมพัฒนา

โดยปัญหาเหล่านั้นสามารถแบ่งออกได้ 3 กลุ่มคือ

  1. เรื่องการออกแบบระบบงาน
  2. เรื่องการทำงานภายในของระบบงาน
  3. เรื่องของฐานข้อมูล

มาดูว่าแต่ละกลุ่มมีปัญหาอะไรบ้าง

1. เรื่องการออกแบบระบบงาน

สิ่งที่มักพบเจอก็คือ Environment ของเครื่องต่างๆ ไม่เหมือนกัน เช่น

  • development
  • dev server
  • test server
  • staging server
  • production server

มักจะมีการ configuration ต่างๆ ที่แตกต่างกัน
มี software ต่างๆ ที่แตกต่างกัน เช่น  version ที่ติดตั้ง
ยิ่งระหว่างเครื่อง development คือ เครื่องของมักพัฒนาแต่ละคน
กับเครื่อง dev server, production server …

ปัญหาที่ตามมาก็คือ  It works for me 
มันสามารถทำงานได้บนเครื่องของนักพัฒนานะ
แต่เมื่อนำไปติดตั้งที่เครื่องอื่นๆ เช่น production server มักจะพังเสมอ

วิธีการแก้ไขง่ายมากๆ คือ ทำให้แต่ละ environement เหมือนกันมากที่สุด
โดยในปัจจุบันมีเครื่องมือหลายๆ ตัวให้ใช้ เช่น Vagrant, Docker และ VirtualBox เป็นต้น
ดังนั้น ถ้าคุณยังไม่ได้ใช้เครื่องมือ เหล่านี้ กรุณาหยุดสิ่งที่ทำอยู่ก่อน แล้วไปศึกษามันเถอะครับ

ต่อมาคือ เครื่องการ Backup ระบบ
ทีมพัฒนาหรือผู้ดูแลระบบบางทีชอบลืมเรื่องการ backup ข้อมูล ประกอบไปด้วย

  • Source code
  • Configuration
  • ข้อมูล

หรือมีระบบการ backup แต่ว่าทำงานแบบ manual
หรือมีระบบการ backup ที่ดีทั้งหมด ทำงานแบบอัตโนมัติ แต่

  • เก็บสิ่งที่ Backup ไว้ที่เดียวกับเครื่องที่ทำงานจริงๆ
  • ไม่เคยทดสอบเลยว่า สิ่งที่ Backup นั้นมันสามารถนำมา recovery ได้จริงๆ หรือไม่

ไม่มีระบบ Monitoring ของระบบงาน
ส่วนใหญ่ที่เจอมักจะมีแต่ระบบ monitoring ของเครื่อง server
แต่ไม่มี monitoring ของระบบงานเลย
สิ่งที่บอกเราว่าเราขาดระบบ monitoring ของระบบเราก็คือ
เรามักจะรู้ว่าระบบทำงานผิดพลาด มาจากการแจ้งของลูกค้าเสมอ
เราไม่เคยรู้ก่อนลูกค้าเลย …

2. เรื่องการทำงานภายในของระบบงาน

เรื่องแรกเลยก็คือ การปิด error ต่างๆ ในระดับ application และ server
ไม่เข้าใจว่าปิดไปทำไม ? บางครั้งก็บอกว่ามันเปลือง และ มี log มาเกินไป

หนักไปกว่านั้นใน application ไม่มีการเก็บ log การทำงานของระบบเลย
แต่บางระบบเก็บ log เยอะมากๆ จนอาจจะกลายเป็นระบบ log ไปแล้ว
ดังนั้น เรื่อง log จะมากหรือน้อยขึ้นอยู่กับระบบนั้นๆ ด้วย
แต่มีดีกว่าไม่มีนะครับ

ระบบส่วนมาก จะไม่มีระบบการ caching ข้อมูลในส่วนต่างๆ ไว้เลย เช่น

  • caching ในส่วนการแสดงผล
  • caching ในส่วนการทำงานภายในระบบ
  • caching ในระดับของฐานข้อมูล
  • caching ในระดับ server

ดังนั้นลองกลับไปมองระบบว่า ส่วนใดควรมีการนำ caching มาใส่ เพื่อปรับปรุงประสิทธิภาพการทำงาน
จำไว้ว่า Caching ให้ได้มากที่สุดครับ

ต่อมาเรื่องขาดความรู้ในภาษาโปรแกรมที่นำมาพัฒนา
เช่นใช้ภาษาพวก OOP มาใช้งาน แต่ขาดความรู้ด้าน OOP
ทำให้ไม่สามารถดึงศักยภาพของภาษาออกมาใช้ได้เต็มที่

บ่อยครั้งจะพบว่า เราเขียน code เป็น procedure หรือ struture
ซึ่งมันถูกจัดเรียงอยู่ใน class โดยที่เราบอกว่านี่คือการเขียนแบบ OOP นะ
มันเป็นเรื่องที่น่าเศร้าอย่างมาก

ส่วนอื่นๆ ที่เจอบ่อยๆ เช่น

  • ไม่เขียน test
  • ไม่มี Automate test
  • ไม่มีการ review code
  • ไม่มีความรู้เรื่องความปลอดภัยของ code เลย
  • เขียน code แบบเร็วๆ แล้วเอาขึ้น production เลย ไปวัดดวงข้างบนกันเลย

3. เรื่องของฐานข้อมูล

สิ่งแรกที่พบเจอก็คือ การอ่าน และ เขียนข้อมูลจากฐานข้อมูลมาจากที่เดียวกัน
ทำให้ระบบงานไม่สามารถขยายได้ เมื่อมี traffic การใช้งานถึงจุดๆ หนึ่ง
ทำไมคุณถึงไม่แยกระหว่างการอ่านและเขียนข้อมูลออกจากกันล่ะ ?

ต่อมา ไม่เคยทดสอบ SQL statement ต่างๆ ว่าปลอดภัยจากการโจมตีรูปแบบต่างๆ หรือไม่
นั่นเป็นผลมาจากไม่มีความรู้เรื่องความปลอดภัยนั่นเอง

พอลงไปในระดับตารางที่เก็บข้อมูล
พบว่าไม่มีการทำ index ไว้ สำหรับ column ที่ถูกใช้ในเงื่อนไขของ SQL Statement

ยังไม่พอนะ นักพัฒนาไม่ค่อยชอบใช้งาน transaction
สำหรับการบันทึกข้อมูลลงในฐานข้อมูล

หนักไปกว่านั้น ชอบเก็บข้อมูลพวก sensitive data เช่น password
ในรูปแบบที่ไม่ปลอดภัย เช่น plain text หรือ เข้ารหัสที่ใครๆ ก็ถอดได้

โดยสรุปแล้ว

ถ้าคุณต้องการเป็นพัฒนาที่ดีกว่า แนะนำว่าอย่าละเลยทั้ง 3 เรื่อง มันสำคัญมากๆ
ถ้ายังขาดความรู้เรื่องไหน ควรทำการศึกษาเพิ่มเตอม หรือสอบถามผู้ที่มีความรู้

การ coding นั้นมันเป็นเรื่องที่ยาก แต่ถ้าทำมันอย่างถูกต้อง คุณจะสนุกกับมันครับ