เข้าใจเหตุและผลด้วย Causal Loop Diagram (CLD)

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

แต่ในปัญหาเดียวกัน หากเรามองปัญหาใน scale ระดับใหญ่ขึ้นมาอีกหน่อย เราเริ่มเพิ่มตัวแปรที่เกี่ยวข้องลงไปในปัญหาให้มากขึ้น เช่น จำนวน feature, เวลา, จำนวน developer เราจะเริ่มเห็นผลกระทบที่ซับซ้อนมากขึ้น จนลำบากที่จะอธิบายด้วยคำพูดสั้น ๆ ให้เข้าใจได้ ทำให้การนำไปสื่อสารเพื่อให้คนอื่นเข้าใจเป็นไปได้ยากมากขึ้น หรืออาจจะเข้าใจผิด หรือตีความผิดได้ง่ายขึ้น

วิธีหนึ่งที่สามารถนำมาใช้อธิบายผลกระทบของตัวแปรที่เป็นเหตุและผลกันได้คือ Causal Loop Diagram (CLD) ซึ่งเป็น model หนึ่งใน System Thinking

เริ่มต้น

ใน CLD จะมีลักษณะเป็น Directed Graph ที่ประกอบด้วย Vertex หรือ Node กับ Edge หรือ Link เราเรียก CLD ที่ได้รวม ๆ ว่า โมเดล

ในแต่ละ Node จะเป็นตัวแปรของ domain ที่เราสนใจ วิธีการเลือกตัวแปร ให้นึกถึงตัวแปรที่เวลาพูดถึงแล้วสามารถเข้าใจได้ตรงกันว่า ถ้าบอกว่าค่าของตัวแปรนั้นเพิ่มหมายถึงอะไร ค่าของตัวแปรนั้นลดลงหมายถึงอะไร เช่น จำนวน defect, quality ของ software, จำนวนชั่วโมงในการทำงาน หรือ รายได้ของพนักงานต่อเดือนไม่รวม OT

ในแต่ละ Link จะบ่งบอกถึงผลกระทบและทิศทางของผลกระทบระหว่าง Node 2 nodes เช่น ผลกระทบระหว่าง จำนวน feature กับจำนวน defect

causal loop diagram

จากโมเดลด้านบนจะเห็นผลกระทบสองแบบคือ ผลกระทบระหว่างจำนวน feature กับจำนวน defect และผลกระทบระหว่างจำนวน defect กับความพึงพอใจของลูกค้า Link ระหว่างจำนวน feature กับจำนวน defect จะเป็นลูกศรธรรมดา ส่วนระหว่างจำนวน defect กับความพึงพอใจของลูกค้า จะเป็นลูกศรที่มีตัวอักษร O (โอ) กำกับไว้ที่เส้น

เส้นแบบแรกว่า effect มีความหมายว่า เมื่อจำนวน feature เพิ่มขึ้นจำนวน defect ก็จะเพิ่มขึ้นตามไปด้วย เมื่อ feature ลดลง จำนวน defect ก็จะลดลง

เส้นที่มี O กำกับ เราเรียกว่า opposite effect หมายความว่า เมื่อจำนวน defect เพิ่มขึ้น ความพึงพอใจของลูกค้าจะลดลง และเมื่อจำนวน defect ลดลง ความพึงพอใจของลูกค้าจะเพิ่มขึ้น

ความเชื่อ (Believes)

ผลกระทบบางอย่างอาจจะดูไม่ชัดเจน ลองดูโมเดลต่อไปนี้

causal loop with belief diagram

จะเห็นได้ว่า จากโมเดลเราอ่านได้ว่า การเพิ่มจำนวน programmer เข้ามา จะทำให้งานเสร็จเร็วขึ้น ในความเป็นจริงมันไม่ใช่แบบนั้น Brook’s Law บอกไว้ว่า การเพิ่มคนเข้าไปการพัฒนาช้าไป จะทำให้งานเสร็จช้าลง เพราะว่าคนที่เพิ่มเข้ามา ไม่สามารถทำงานได้ทันที จำเป็นต้องใช้เวลา (ramp up) เพื่อจะเรียนรู้สิ่งที่ทีมกำลังทำ รวมถึงเพื่อให้จังหวะในการทำงานเข้ากัน หรือการเขียน test ที่ไม่เป็นประโยชน์ก็อาจจะไม่ได้ทำให้ defect น้อยลงก็เป็นไปได้ ดังนั้น บางสถานการณ์ เราอาจจะต้องมีการระบุความเชื่อ หรือกรอบบางอย่างเพื่อให้ตีความไปในทิศทางเดียวกัน เราใช้เส้นประเป็นตัวขยายความผลกระทบนั้น

ตัวแปรควบคุม (Constraints)

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

เราใช้ลูกศรที่มีตัวอักษร C (ซี) กำกับไว้ที่เส้นเพื่อบ่งบอกว่าเป็นตัวแปรที่ควบคุม

causal loop with contraint diagram

ผลกระทบที่มากกว่า (Extreme Effects)

ผลกระทบบางอย่าง มีผลที่มากกว่าผลกระทบที่คล้ายกันอีกอัน เราสามารถเน้นว่าผลกระทบนี้มากกว่าอีกอันได้ด้วยการใช้เส้นหนา เช่น การจ้างพนักงานในเรทถูก มีแนวโน้มที่จะได้ programmer ที่มีความสามารถน้อย มากกว่าที่จะจ้างพนักงานในเรทปกติ

extreme effects

Delays

ผลกระทบบางอย่างไม่ได้เกิดขึ้นทันที แต่อาจจะเกิดขึ้นเมื่อเวลาผ่านไประยะหนึ่ง เช่น การปรับอุณหภูมิห้อง เมื่อเราไปกดปุ่มปรับอุณหภูมิ จากเดิม 28 องศา ไปเป็น 25 องศา อุณภูมิของห้องจะไม่ได้เป็น 25 องศาทันที จำเป็นต้องรอช่วงระยะเวลาหนึ่งอุณหภูมิจะเปลี่ยนไปเป็น 25 องศาตามที่ตั้งไว้

เรื่องนี้เป็นสิ่งที่ต้องคอยสังเกตอย่างมาก ผลกระทบที่ไม่เกิดผลทันที อาจจะทำให้เรามองข้ามต้นเหตุของเรื่องที่เกิดขึ้นได้โดยไม่รู้ตัว

สัญญลักษณ์ที่ใช้สำหรับแสดงผลกระทบแบบ delay จะใช้ตามรูปนี้

delay

เป้าหมาย และการตอบสนอง (Goals and Reactions)

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

เช่น การที่เราหวังว่าทีมจะส่งมอบงานได้มากขึ้น เราเลยเพิ่มระบบรางวัล (reward system) เข้าไปในโมเดล (เช่น โบนัส) แต่ระบบรางวัลนี้ไม่สามารถใช้ได้กับทุกคน สำหรับงานบางประเภท หรือคนบางกลุ่ม การเพิ่มระบบรางวัล จะส่งผลในทางลบกับโมเดลโดยรวมแทน

QuickFix Reactions

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

QuickFix บางอย่างอาจจะใช้ได้ดีได้ทั้งในระยะสั้น และระยะยาว เราเขียนผลกระทบที่เป็น QuickFix ด้วยกาใส่ QF ไว้ที่เส้น effect

Interaction Reactions

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

Positive Feedback Loops

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

Positive Feedback Loop รวมถึง Negative Feedback Loop (เหมือน Positive Feedback Loop แต่เป็นไปในทิศทางตรงกันข้าม) เป็นสิ่งสำคัญที่เราควรจะต้องเห็น เพราะมันส่งผลกระทบถึงตัว Node เองด้วย เช่น โปรแกรมเมอร์ที่ไม่เก่ง จะเก่ง และเขียนโค้ดที่มีคุณภาพดีขึ้นได้ด้วยคำแนะนำจากโปรแกรมเมอร์ที่เก่ง รวมถึงการอ่านโค้ดที่ดี มีคุณภาพ แต่ถ้ามีโปรแกรมเมอร์ที่เก่งอยู่น้อย ทำให้โค้ดที่ดี มีคุณภาพ ก็น้อยตามไปด้วย และอาจจะทำให้โปรแกรมเมอร์ที่เก่งเลือกที่จะไปทำงานที่อื่น เพื่อหลีกเลี่ยงสถานการณ์ที่ทำให้ตัวเองไม่พัฒนา และแน่นอน มันจะส่งผลทำให้โค้ดที่ไม่ดี หรือมีคุณภาพต่ำเพิ่มมากขึ้นเรื่อย ๆ และส่งผลทำให้โปรแกรมเมอร์ที่ไม่เก่ง ยังไม่เก่งอยู่แบบนั้นไปเรื่อย ๆ ส่งผลทำให้ความสามารถในการส่งมอบงานต่ำลงเรื่อย ๆ ทั้งด้านคุณภาพ และปริมาณ

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

สิ่งที่ต้องระวัง

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

อ้างอิง

  • https://less.works/less/principles/systems-thinking.html
  • https://thesystemsthinker.com/system-dynamics-loop-generator/
  • https://en.wikipedia.org/wiki/Causal_loop_diagram
  • https://en.wikipedia.org/wiki/Brooks%27s_law

Leave a Reply