Screen Shot 2558-03-24 at 12.29.34 PM
จากหนังสือ The nature of software development นั้น
ได้สรุป ขั้นตอนของการพัฒนา software ไว้ง่ายๆ ดังนี้

1. ทำการส่งมอบ feature ที่มีคุณค่า (value) อยู่อย่างบ่อยๆ

โดยคำว่าคุณค่า นั่นคือ
สิ่งที่ลูกค้าต้องการ ซึ่งมันดีต้อลูกค้า
สิ่งที่ business ต้องการ ซึ่งมันดีต่อ business
สิ่งที่คุณต้องการ

ดังนั้น สิ่งที่คุณต้องการ ก็แล้วแต่คุณนะ !!

เช่น
ถ้าคุณต้องการอยากได้ข้อมูลต่างๆ จากผู้ใช้งาน
เพื่อค้นหาว่า product ที่ผู้ใช้งานต้องการคืออะไรกันแน่
ดังนั้น คุณจึงตัดสินใจสร้าง prototype ขึ้นมา
และให้ผู้ใช้งานทดลองใช้งาน

ถ้าคุณต้องการสร้าง product เพื่อช่วยชีวิตเพื่อนมนุษย์
คุณจะเลือก feature ที่น่าจะช่วยเหลือเพื่อนมนุษย์ไ้ดมากที่สุดมาทำ

ถ้า product คุณพัฒนาช้า แล้วทำให้ผู้ใช้งานไปใช้ product ของเจ้าอื่นแทน
ดังนั้น เราจึงต้องตัดสินใจ เพื่อสร้าง feature ของ product ให้เร็วขึ้น
แสดงว่า คุณค่าของคุณคือ ความเร็วในการสร้าง

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

ดังนั้น คุณค่า จะอยู่ที่ความต้องการของคุณ

2. ให้สนใจไปที่คุณค่าของสิ่งที่ทำ มากกว่าจัดการให้เป็นไปตามวันเวลาที่กำหนดไว้

สิ่งที่คุณต้องสนใจคือ ส่งมอบ feature ที่มีคุณค่าสูงสุดนะครับ
ไม่ใช่ทำแบบส่งๆ ให้มันเสร็จๆ ไป

3. การวางแผนทำแบบ feature-by-feature มันง่ายกว่าเยอะ

ให้ทำการ estimate ถ้าคุณต้องการ
ซึ่งให้ใช้ข้อมูลจริงๆ ของทีมพัฒนา เช่น

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

4. สร้าง และ พัฒนา product แบบ feature-by-feature

โดยแต่ละ feature นั้น จะต้องสามารถทำงานได้จริง
แต่ละ feature นั้นสามารถสร้างได้ภายในช่วงเวลาสั้นๆ
ดังนั้น ขนาดของ feature ต้องไม่ใหญ่จนทำไม่เสร็จ หรือ เล็กจนไร้ค่า

โดยที่
product จะต้องทำงานได้อย่างถูกต้องอยู่อย่างเสมอ
product จะต้องโตอยู่อย่างเสมอ
product จะต้องมีการ design ที่ดีขึ้นอยู่เสมอ

5. ในการพัฒนา product นั้น จะต้องส่งมอบ Real working feature/product อยู่อย่างเสมอ

ดังนั้น ทุกๆ feature จะต้องถูกทดสอบอยู่อย่างเสมอ
โดยการทดสอบ จะต้องประกอบไปด้วย

  • Business test เช่น Acceptance Test-Driven Development (ATDD)
  • Programmer test เช่น Test-Driven Development(TDD)

เพื่อทำให้แน่ใจว่า product ทำงานได้อย่างถูกต้อง
เพื่อทำให้แน่ใจว่า product พร้อมใช้งาน
เพื่อทำให้แน่ใจว่า product มีการออกแบบที่ดี

จากทั้ง 5 ข้อนี้ คือ ขั้นตอนการพัฒนา Software ที่เรียบง่ายมากๆ

สุดท้าย product ที่ส่งมอบต้องพร้อมใช้งานจริงๆ อยู่เสมอ

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

Show me the software !!