เมื่อพูดถึงการพัฒนาระบบสารสนเทศ หลายคนมักนึกถึงการเขียนโปรแกรม การเลือกภาษา Programming การเลือก Framework หรือการออกแบบ Database เป็นอันดับแรก
คำถามที่เรามักได้ยินจึงเป็น
“จะใช้ภาษาอะไรเขียน?”
“ใช้ Framework อะไรดี?”
“จะใช้ MySQL หรือ PostgreSQL?”
“Frontend ใช้ React, Vue หรือ Next.js?”
แต่จากประสบการณ์ในการพัฒนาระบบสารสนเทศ ผมกลับมองว่า คำถามเหล่านี้ยังไม่ใช่คำถามแรกที่เราควรถาม
คำถามแรกควรเป็นว่า
“เรากำลังแก้ปัญหาอะไรให้ผู้ใช้งานและองค์กร?”
ระบบสารสนเทศส่วนใหญ่เกิดขึ้นเพราะกระบวนการทำงานเดิมมีบางอย่างที่สามารถปรับปรุงได้
ตัวอย่างเช่น
สิ่งเหล่านี้คือ Problem ไม่ใช่ Requirement
Developer จึงไม่ควรรีบเปลี่ยนทุกปัญหาให้กลายเป็น Feature ทันที
สิ่งที่ควรทำก่อนคือเข้าไปทำความเข้าใจว่า
ปัญหาเกิดขึ้นที่ไหน → ใครได้รับผลกระทบ → ทำไมถึงเกิดขึ้น → ปัจจุบันแก้ไขอย่างไร → และผลลัพธ์ที่องค์กรต้องการจริง ๆ คืออะไร
ประโยคหนึ่งที่ผมคิดว่าสำคัญในการทำ System Analysis คือ
ตัวอย่างเช่น ผู้ใช้งานบอกว่า
ถ้าเรามองในฐานะ Developer เราสามารถสร้างปุ่ม Export Excel ได้ทันที
แต่ถ้ามองในฐานะ System Analyst เราควรถามต่อว่า
คำตอบอาจเป็น
เมื่อเข้าใจตรงนี้ Requirement ที่แท้จริงอาจไม่ใช่ Export Excel
แต่อาจเป็น
Dashboard + Monthly Report + Automated Data Processing
นี่คือความแตกต่างระหว่าง Feature Request กับ Business Requirement
ก่อนจะออกแบบ Database หรือเขียน API เราควรเห็นภาพกระบวนการทำงานทั้งหมดก่อน
ผมมักมองระบบในลักษณะ
Who → Input → Process → Decision → Output → Data
ตัวอย่างง่าย ๆ ของระบบอนุมัติเอกสาร
ผู้ใช้งาน → สร้างคำขอ → กรอกข้อมูล → แนบเอกสาร → ส่งคำขอ → ผู้ตรวจสอบ → อนุมัติ / ส่งกลับแก้ไข → บันทึกผล → แจ้งเตือน → รายงาน / Dashboard
เมื่อเห็น Process ทั้งหมดแล้ว เราจึงค่อยตัดสินใจว่า
ระบบต้องมี Module อะไร, ต้องมี User Role อะไร, ต้องเก็บข้อมูลอะไร, ต้องมี API อะไร และต้องเชื่อมโยงกับระบบใดบ้าง
เมื่อ Problem และ Requirement ชัดเจน ขั้นตอนต่อไปคือการออกแบบ Architecture
ภาพที่ผมมักใช้ในการคิดระบบคือ
Users → Frontend / User Interface → Business Process → Application / Business Logic → API / Integration → Database / Data Layer → Reporting / Dashboard
โดยมี
Authentication + Authorization + Security + Logging + Monitoring
ครอบคลุมอยู่ทุก Layer
Architecture ที่ดีจึงไม่ใช่ Architecture ที่ใช้ Technology ใหม่ที่สุด
แต่เป็น Architecture ที่
เหมาะสมกับปัญหา รองรับการใช้งานจริง ดูแลรักษาได้ และสามารถพัฒนาต่อได้ในอนาคต
เมื่อมาถึงขั้นนี้ Code จะกลายเป็นเครื่องมือในการสร้าง Solution ที่เราออกแบบไว้
กระบวนการพัฒนาจึงควรเป็น
Problem → Requirement → Business Process → System Analysis → System Design → Architecture → Database & API Design → Development → Testing → Deployment → Monitoring & Maintenance → Continuous Improvement
สิ่งที่น่าสนใจคือ
Coding อยู่เพียงส่วนหนึ่งของ Software Development Lifecycle เท่านั้น
อีกหนึ่งความเข้าใจที่พบได้บ่อยคือ
แต่ในความเป็นจริง หลังจากระบบถูกนำไปใช้งาน เราจะเริ่มพบสิ่งที่ไม่สามารถเห็นได้ทั้งหมดในช่วง Development
เช่น
พฤติกรรมการใช้งานจริงของ User ข้อมูลที่เพิ่มขึ้น
Performance ของระบบ Security Issue Requirement ใหม่ Integration กับระบบอื่น
หรือ Business Process ที่เปลี่ยนแปลงไป ดังนั้นวงจรของระบบจึงไม่ได้จบที่ Deployment แต่ควรเป็น
Build → Measure → Learn → Improve และวนกลับไปอย่างต่อเนื่อง
ผมมองว่าบทบาทของ Software Developer กำลังเปลี่ยนไป
Developer ไม่ควรเป็นเพียง
แต่ควรสามารถตั้งคำถามว่า
ทำไมต้องทำ Feature นี้?
ปัญหาที่แท้จริงคืออะไร?
มีวิธีที่ง่ายกว่านี้หรือไม่?
ข้อมูลนี้มีอยู่ในระบบอื่นแล้วหรือยัง?
จำเป็นต้องให้ User กรอกข้อมูลซ้ำหรือไม่?
ระบบนี้จะเชื่อมโยงกับระบบอื่นในอนาคตอย่างไร?
ถ้ามีผู้ใช้งานเพิ่มขึ้น ระบบจะรองรับได้หรือไม่?
ถ้า Developer คนเดิมไม่ได้ดูแลต่อ คนอื่นสามารถ Maintain ได้หรือไม่?
คำถามเหล่านี้บางครั้งมีคุณค่ามากกว่าการเขียน Code เพิ่มอีกหลายพันบรรทัด
ท้ายที่สุด ผมคิดว่าเป้าหมายของการพัฒนาระบบสารสนเทศไม่ใช่การสร้าง Software ให้ได้มากที่สุด
แต่คือ
การสร้าง Solution ที่ช่วยแก้ปัญหาให้ผู้ใช้งานและองค์กรได้จริง
Technology, Programming Language, Framework, Database หรือแม้แต่ AI เป็นเพียงเครื่องมือ
สิ่งสำคัญที่สุดยังคงเป็น
Understand the Problem → Understand the People → Understand the Process → Design the Solution → Then Write the Code →
เพราะสุดท้ายแล้ว
Don't start with Code. Start with Why.
จากนั้นจึงค่อยเดินทางจาก
Problem → Requirement → Process → Architecture → Code → Value
เมื่อเรามองการพัฒนาระบบด้วยแนวคิดนี้ บทบาทของ Developer จะเปลี่ยนจาก คนเขียนโปรแกรม ไปเป็น คนที่ใช้เทคโนโลยีเพื่อออกแบบและแก้ปัญหาให้กับองค์กร
และนั่นอาจเป็นหนึ่งในทักษะที่สำคัญที่สุดของ Software Developer ในยุคปัจจุบัน