การทำงานในโลกของซอฟต์แวร์มันจะมีเรื่องมาให้เราคิดและตัดสินใจทุกวัน หลายครั้งการตัดสินใจนี้ไม่ได้มีตัวเลือกแค่ซ้ายกับขวา หลายครั้งเราตัดสินใจไม่เพียงเพื่อปัจจุบันแต่เพื่ออนาคตด้วย และหลายครั้งเราคิดถึงอนาคตมากจนลืมความเป็นจริงในปัจจุบันไปและนี่อาจจะเป็นปัญหา
ในโลกของซอฟต์แวร์มันเป็นเรื่องง่ายที่จะคิดถึงอนาคตอันสวยหรู คิดถึงโรดแมปในอีกสามเดือน หกเดือน สามปี สิบปี เราอยากให้ซอฟต์แวร์เราเป็นอย่างไร เราอยากให้โปรดักส์เราทำอะไรได้บ้าง เราอยากแก้ไขอะไรภายในระบบเก่าของเรา … บนกระดาษ บนกระดาน ในคำพูด ทุกอย่างดูดีและเป็นไปได้ทั้งหมด … นั่นทำให้หลายครั้งเรามองการสร้างหรือแก้ไขซอฟต์แวร์แบบเฉพาะหน้าเพื่อผลระยะสั้นเป็นเรื่องสิ้นเปลือง เสียเปล่า (Waste) — มันไม่จริงเสมอไป
คุ้นๆกับประโยคแบบนี้ใช่มั้ยครับ?
- บั๊กตัวนี้หรอ? เอาไว้ก่อน เดี๋ยวทำฟีเจอร์นี้เสร็จบั๊กนี้ก็จะหายไปแล้ว — เมื่อไรที่ฟีเจอร์นี้จะเสร็จ?
- โซลูชั่นแบบนี้จะทำไปทำไม เสียเปล่า เดี๋ยวเราก็จะไปดึงข้อมูลจากระบบของลูกค้ามาโดยตรงอยู่แล้ว — เมื่อไรจะทำระบบดึงข้อมูลอัตโนมัติที่ว่านี้เสร็จ?
หลายครั้งที่งานไม่คืบหน้าเพราะเราคิดถึงอนาคตมากเกินไป อนาคตที่ไม่มีใครรับประกันได้ว่ามันจะมาถึงเมื่อไร อนาคตที่อาจจะไม่มีวันมาถึงเลยด้วยซ้ำ ถ้าปัญหามันยิ่งใหญ่และร้ายแรง ถ้าความต้องการนี้มันเร่งด่วนและจำเป็น การรออนาคตอาจจะเป็นเรื่องสิ้นเปลือง เสียเปล่าด้วยซ้ำไป ลองคิดง่ายๆแบบนี้ดู
เรามีโครงการทุบบ้านเก่าเพื่อสร้างบ้านใหม่บนที่ดินเดิม กำลังทำเรื่องกู้เงินธนาคาร ติดต่อสถาปนิกให้ออกแบบบ้านอยู่ … ถึงคราวเคราะห์หนัก เกิดไฟฟ้าลัดวงจร บ้านไฟไหม้ เราจะทำยังไง?
1. ดีเลยๆ กะจะทุบอยู่แล้ว มอดๆไปให้หมดนะ จะได้ไม่เปลืองค่าจ้างทุบบ้าน — อนาคต หรือ
2. รีบระดมคนมาช่วยกันดับไฟที่กำลังไหม้บ้านอยู่ — ปัจจุบัน
เราจะเลือกอะไร? อนาคตหรือปัจจุบัน? … บางครั้งการแก้ปัญหาเฉพาะหน้าอาจจะเป็นการเสียเปล่าจริง แต่อย่าสร้างกฎเกณฑ์ที่ว่าถ้าเรามี “แผน” ในอนาคตแล้วจะคิดว่าทุกอย่างระหว่างทางเป็นเรื่องเสียเปล่าทั้งหมด ทำแบบนั้นไม่ได้