ในการพัฒนา software นั้น
เราน่าจะชอบขั้นตอนการทำงานที่ ทำซ้ำได้ง่าย (Repeatable)
มีความน่าเชื่อถือสูง (Reliable)
มีความยืดหยุ่น (Flixible)
เมื่อมีปัญหาสามารถคืนสภาพกลับมาปกติได้เร็ว (Resilient)

Software ที่แจ่มมักจะจะมาจาก คนที่แจ่ม ขั้นตอนที่เหมาะสม
แต่ทำไมการพัฒนา software มักจะไม่เป็นดังที่หวัง
จนมีคนพูดติดตลกไว้ว่า


“First we build them, Then we pray”

มันไม่น่าเป็นเรื่องจริงหรือเปล่านะ !!
เมื่อเราคิดจะสร้าง software ขึ้นมา ก็ต้องทำให้มันดีสิ
มีหรือที่ก่อนจะ deploy ขึ้น production server แล้วจะต้องมานั่งสวดมนต์
ขอให้ระบบทำงานราบรื่นทุกครั้งไป
แต่ทุกครั้งก็มีปัญหาเกิดขึ้นเสมอ !!

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

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

ดังนั้นก่อนที่จะปรับปรุงน่าจะต้องรู้และเข้าใจปัญหาก่อนหรือไม่

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

ยิ่งถ้าลงไปในขั้นตอนการพัฒนา software 

เราน่าจะมี checklist หรือแนวทางที่บอกว่า
เราน่าจะต้องทำ เพื่อลดปัญหากันบ้าง ใช่ไหม ?
ถามว่า มีแล้วต้องทำไหม ?
คำตอบคือ มีไว้ให้อ่าน และคิดว่า เราต้องทำไหม ?
ถ้าไม่ทำแต่ก่อให้เกิดปัญหาอะไร แล้วจะป้องกันอย่างไร ?
ถ้าทำจะได้ประโยชน์อะไร เท่านั้นเอง
อารมณ์เหมือนกับตรงประตูจะมีป้ายบอกว่า Push หรือ Pull นั่นแหละ
มาดูว่าควรจะมีอะไรบ้าง

พยายามทำทุกอย่างให้มันทำงานแบบอัตโนมัติ

แต่ก่อนอื่นเราต้องรู้ว่า
ส่วนไหนที่ต้องการการทำงานแบบอัตโนมัติจริง ๆ บ้าง
ดังนั้นการดูในภาพรวมสำคัญมาก ๆ
ถ้าไปทำแค่บางจุด
หรือบางทีเรียกว่า micro-optimization ก็ไม่ค่อยเกิดประโยชน์มากนัก

อีกอย่างงานอะไรที่มันทำซ้ำ ๆ ด้วยคนเรา
ก็เอามาทำงานแบบอัตโนมัติเถอะ 
เริ่มง่าย ๆ ด้วยแค่การเขียน script นั่นเอง
ลดงานของคน และ ลดความผิดพลาดที่เกิดจากคน
ที่สำคัญให้เกิดการทำงานที่ทำซ้ำ ๆ แบบไร้ข้อผิดพลาดได้อีก

แต่จะมีคำถามอีกว่า แล้วคนจะไปทำอะไร ?
อย่างแรกคือ ไปสร้าง script การทำงานแบบอัตโนมัติไงละ
แล้วจะมีเวลามากขึ้น
จะได้ไปทำงานอื่น ๆ
จะได้ไปศึกษาหาความรู้อื่น ๆ อีก

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

พยายามเก็บทุกสิ่งอย่างไว้ใน version control ซะ

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

พยายามทำงานที่ยาก ๆ ให้บ่อยขึ้น

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

เรื่องของคุณภาพต้องมาก่อนสำหรับทุกสิ่งอย่าง

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

คำว่าคุณภาพต้องอยู่ในทุก ๆ ส่วนของการทำงาน
ไม่ต้องรอให้ใครมานั่งตรวจสอบ
ดังนั้นคำว่าคุณภาพมันคือ


“Quality means doing it right when no one is looking”

ทุกคนต้องรับผิดของผลที่ออกมาเสมอ

ไม่ใช่ว่างานที่ของเธอ ฉันไม่เกี่ยว !!
และจำไว้เสมอว่า
วางแผนไว้รอรับสิ่งแย่ ๆ ให้ดี
และเตรียมรอรับที่คาดไม่ถึงและทำให้คุณประหลาดใจไว้ให้ดี
มันเกิดแน่นอน อยู่ที่ว่าเราเตรียมตัวไว้ดีหรือไม่
นั่นแหละคือ การพัฒนา software ที่ดี

งานงอกมันไม่มีอยู่จริง
มันมีแต่สิ่งที่คุณคิดและรับมือไว้หรือไม่เท่านั้นเอง