Step back from requirement

Chris
Taskworld Tech
Published in
1 min readJan 7, 2018

สมมติเราทำระบบบัญชีระบบนึง มีประเภทของ Transaction 3 แบบ คือ X,Y,Z

ถ้า Requirement แรกบอกว่าทุกๆ “รายการ Transaction ทุกอันต้องหักเงินในบัญชีลูกค้า”

account.debit(transaction.amount);

แล้วพอทำไปซักพักเขาบอกว่า “รายการทุกรายการนั่นแหละ ยกเว้น Transaction ประเภท X ต้องหักเงินลูกค้า”

หลายๆ ครั้ง ฟังแล้วเราอาจจะ Implement เป็น

if (transaction.type == TransactionType.X) return;
account.debit(transaction.amount);

แล้วถ้าตรงข้าม Stakeholder บอกว่า “รายการประเภท Y,Z ให้หักบัญชีลูกค้านะ ส่วนรายการประเภท X ไม่ต้องหักบัญชี”

หลายๆ ครั้งเขาบอกแบบนี้ เราก็จะ Implement กันแบบนี้

switch (transaction.type) {
case TransactionType.X: break;
case TransactionType.Y:
case TransactionType.Z:
account.debit(transaction.amount);
break;
}

สิ่งที่น่าคิดคือ Requirement 2 ตัวนี้ จริงๆ เหมือนกันทุกประการ ต่างกันแค่วิธีการบอกของลูกค้า

คำถามคือ

  • แบบแรกกับแบบหลัง อันไหนอ่านง่ายกว่ากัน และ Maintain ง่ายกว่ากัน
  • ทำไมสิ่งที่เหมือนกันเราถึง Implement เป็น 2 แบบ
  • ความง่ายของการ Maintain software ของเราขึ้นอยู่กับลำดับและวิธีเล่าเรื่องของลูกค้า หรืออยู่ในกำมือเรากันแน่

ทุกคนอาจจะตอบคำถามว่าแบบไหนดีกว่ากันไม่เหมือนกัน และผมจะไม่ขอกล่าวถึงว่าอันไหนดีกว่าอันไหนในบทความนี้

เพราะไม่ว่าคุณจะคิดว่าอันแรกดีกว่าหรืออันหลังดีกว่าก็ตามแต่

สิ่งที่ต้องระวังที่ผมอยากสื่อคือ

เราต้องมีสติรู้ว่า Implement แบบไหนทำให้ Maintain ง่าย

มิใช่ปล่อยให้ Implementation มันไหลไปตามการเล่าเรื่องของลูกค้า

ถอยหลังออกมาดูภาพรวมบ้างนะครับ

--

--

Chris
Taskworld Tech

I am a product builder who specializes in programming. Strongly believe in humanist.