SiamCafe.net Blog
Technology

risk in project management

risk in project management
risk in project management | SiamCafe Blog
2026-03-17· อ. บอม — SiamCafe.net· 1,845 คำ

Risk in Project Management คืออะไร

Risk (ความเสี่ยง) ในการบริหารโครงการ คือเหตุการณ์ที่ไม่แน่นอนซึ่งอาจเกิดขึ้นและส่งผลกระทบต่อวัตถุประสงค์ของโครงการ ทั้งด้านขอบเขต (scope), เวลา (schedule), ต้นทุน (cost) และคุณภาพ (quality) การบริหารความเสี่ยง (Risk Management) เป็นกระบวนการที่เป็นระบบในการระบุ วิเคราะห์ วางแผนตอบสนอง และติดตามความเสี่ยงตลอดวงจรชีวิตโครงการ ตามมาตรฐาน PMI (PMBOK) และ ISO 31000 การจัดการความเสี่ยงเป็นหนึ่งใน knowledge areas ที่สำคัญที่สุดของ project management

กระบวนการบริหารความเสี่ยง

# risk_process.py — Risk management process
import json

class RiskManagementProcess:
    STEPS = {
        "plan": {
            "name": "1. Plan Risk Management",
            "description": "วางแผนว่าจะจัดการความเสี่ยงอย่างไร กำหนด methodology, roles, budget",
            "output": "Risk Management Plan",
        },
        "identify": {
            "name": "2. Identify Risks",
            "description": "ระบุความเสี่ยงทั้งหมดที่อาจเกิดขึ้น ใช้ brainstorming, checklists, expert judgment",
            "output": "Risk Register (ทะเบียนความเสี่ยง)",
            "techniques": ["Brainstorming", "SWOT Analysis", "Delphi Technique", "Checklists", "Interviews"],
        },
        "qualitative": {
            "name": "3. Qualitative Risk Analysis",
            "description": "ประเมินความเสี่ยงเชิงคุณภาพ — จัดลำดับตาม probability × impact",
            "output": "Risk Priority Matrix",
            "scale": "Probability (1-5) × Impact (1-5) = Risk Score (1-25)",
        },
        "quantitative": {
            "name": "4. Quantitative Risk Analysis",
            "description": "ประเมินเชิงปริมาณ — คำนวณมูลค่าความเสี่ยง (EMV), simulation",
            "output": "Expected Monetary Value, Monte Carlo results",
            "techniques": ["EMV (Expected Monetary Value)", "Monte Carlo Simulation", "Decision Tree", "Sensitivity Analysis"],
        },
        "response": {
            "name": "5. Plan Risk Responses",
            "description": "วางแผนตอบสนองความเสี่ยง: หลีกเลี่ยง, ลด, โอน, หรือยอมรับ",
            "output": "Risk Response Plan",
        },
        "monitor": {
            "name": "6. Monitor Risks",
            "description": "ติดตามความเสี่ยงตลอดโครงการ ตรวจสอบ triggers และ residual risks",
            "output": "Risk Reports, Updated Risk Register",
        },
    }

    def show_process(self):
        print("=== Risk Management Process (PMBOK) ===\n")
        for key, step in self.STEPS.items():
            print(f"[{step['name']}]")
            print(f"  {step['description']}")
            print(f"  Output: {step['output']}")
            print()

process = RiskManagementProcess()
process.show_process()

Risk Register & Analysis

# risk_register.py — Risk register and analysis tools
import json
import random

class RiskRegister:
    RISK_CATEGORIES = {
        "technical": {
            "name": "Technical Risks",
            "examples": ["Technology ใหม่ที่ยังไม่เสถียร", "Integration complexity", "Performance issues", "Security vulnerabilities"],
        },
        "schedule": {
            "name": "Schedule Risks",
            "examples": ["Scope creep", "Resource ไม่พอ", "Dependencies ล่าช้า", "Estimation ผิดพลาด"],
        },
        "cost": {
            "name": "Cost Risks",
            "examples": ["Budget overrun", "แรงงานแพงกว่าคาด", "Infrastructure costs", "License fees"],
        },
        "external": {
            "name": "External Risks",
            "examples": ["กฎหมายเปลี่ยน", "Vendor ปิดกิจการ", "Market changes", "Natural disasters"],
        },
        "organizational": {
            "name": "Organizational Risks",
            "examples": ["Stakeholder conflict", "Team turnover", "Lack of executive support", "Change resistance"],
        },
    }

    REGISTER = """
# risk_register.py — Python risk register
import json
from datetime import datetime

class RiskItem:
    def __init__(self, risk_id, title, category, probability, impact, owner):
        self.risk_id = risk_id
        self.title = title
        self.category = category
        self.probability = probability  # 1-5
        self.impact = impact            # 1-5
        self.score = probability * impact
        self.owner = owner
        self.status = "Open"
        self.response = ""
        self.created = datetime.now().isoformat()
    
    def set_response(self, strategy, action):
        self.response = {"strategy": strategy, "action": action}
    
    def priority(self):
        if self.score >= 15:
            return "Critical"
        elif self.score >= 10:
            return "High"
        elif self.score >= 5:
            return "Medium"
        return "Low"
    
    def to_dict(self):
        return {
            "id": self.risk_id,
            "title": self.title,
            "category": self.category,
            "probability": self.probability,
            "impact": self.impact,
            "score": self.score,
            "priority": self.priority(),
            "owner": self.owner,
            "status": self.status,
            "response": self.response,
        }

class RiskRegister:
    def __init__(self):
        self.risks = []
    
    def add_risk(self, **kwargs):
        risk = RiskItem(**kwargs)
        self.risks.append(risk)
        return risk
    
    def get_by_priority(self, priority):
        return [r for r in self.risks if r.priority() == priority]
    
    def summary(self):
        total = len(self.risks)
        critical = len(self.get_by_priority("Critical"))
        high = len(self.get_by_priority("High"))
        medium = len(self.get_by_priority("Medium"))
        low = len(self.get_by_priority("Low"))
        return {"total": total, "critical": critical, "high": high, "medium": medium, "low": low}

# Usage
register = RiskRegister()
register.add_risk(
    risk_id="R001", title="API vendor ยกเลิกบริการ",
    category="External", probability=2, impact=5, owner="Tech Lead"
)
register.add_risk(
    risk_id="R002", title="Developer ลาออกกลางโปรเจค",
    category="Organizational", probability=3, impact=4, owner="PM"
)
print(json.dumps(register.summary(), indent=2))
"""

    def show_categories(self):
        print("=== Risk Categories ===\n")
        for key, cat in self.RISK_CATEGORIES.items():
            print(f"[{cat['name']}]")
            for ex in cat["examples"][:3]:
                print(f"  • {ex}")
            print()

    def show_register(self):
        print("=== Risk Register Code ===")
        print(self.REGISTER[:500])

    def risk_matrix(self):
        print(f"\n=== Risk Matrix (Probability × Impact) ===")
        print(f"  Impact →     1(Low)  2(Med)  3(High) 4(VHigh) 5(Critical)")
        for p in range(5, 0, -1):
            row = f"  Prob {p}:  "
            for i in range(1, 6):
                score = p * i
                if score >= 15:
                    row += f"  [{score:>2}]C"
                elif score >= 10:
                    row += f"  [{score:>2}]H"
                elif score >= 5:
                    row += f"  [{score:>2}]M"
                else:
                    row += f"  [{score:>2}]L"
            print(row)

reg = RiskRegister()
reg.show_categories()
reg.risk_matrix()

Risk Response Strategies

# response.py — Risk response strategies
import json

class RiskResponse:
    NEGATIVE_RISKS = {
        "avoid": {
            "name": "Avoid (หลีกเลี่ยง)",
            "description": "เปลี่ยนแผนเพื่อกำจัดความเสี่ยงทั้งหมด",
            "example": "เปลี่ยนจาก technology ใหม่ที่ไม่เสถียร ไปใช้ technology ที่พิสูจน์แล้ว",
            "when": "High probability + High impact",
        },
        "mitigate": {
            "name": "Mitigate (ลดผลกระทบ)",
            "description": "ลด probability หรือ impact ให้อยู่ในระดับที่ยอมรับได้",
            "example": "เพิ่ม testing coverage เพื่อลดโอกาส bugs ใน production",
            "when": "Medium-High risks ที่หลีกเลี่ยงไม่ได้",
        },
        "transfer": {
            "name": "Transfer (โอนย้าย)",
            "description": "โอนความรับผิดชอบไปให้ third party",
            "example": "ซื้อประกัน, outsource งานที่เสี่ยง, fixed-price contract",
            "when": "Financial risks, specialized risks",
        },
        "accept": {
            "name": "Accept (ยอมรับ)",
            "description": "ยอมรับความเสี่ยงโดยไม่ดำเนินการ (passive) หรือเตรียม contingency (active)",
            "example": "ตั้ง contingency budget 10% สำหรับ unexpected costs",
            "when": "Low probability/impact, ไม่คุ้มที่จะจัดการ",
        },
    }

    POSITIVE_RISKS = {
        "exploit": {
            "name": "Exploit (ใช้ประโยชน์)",
            "description": "ทำให้โอกาสเกิดขึ้นแน่นอน",
            "example": "Deploy early ถ้า development เร็วกว่ากำหนด",
        },
        "enhance": {
            "name": "Enhance (เพิ่ม)",
            "description": "เพิ่ม probability หรือ impact ของโอกาส",
            "example": "เพิ่ม resources ให้ feature ที่ users ต้องการมาก",
        },
        "share": {
            "name": "Share (แบ่งปัน)",
            "description": "แบ่งปันโอกาสกับ partner ที่มีความสามารถ",
            "example": "Joint venture สำหรับ market opportunity ใหม่",
        },
    }

    def show_negative(self):
        print("=== Negative Risk Responses (Threats) ===\n")
        for key, resp in self.NEGATIVE_RISKS.items():
            print(f"[{resp['name']}]")
            print(f"  {resp['description']}")
            print(f"  Example: {resp['example']}")
            print(f"  When: {resp['when']}")
            print()

    def show_positive(self):
        print("=== Positive Risk Responses (Opportunities) ===")
        for key, resp in self.POSITIVE_RISKS.items():
            print(f"  [{resp['name']}] {resp['description']}")

response = RiskResponse()
response.show_negative()
response.show_positive()

IT Project Risk Examples

# it_risks.py — Common IT project risks
import json
import random

class ITProjectRisks:
    RISKS = [
        {"id": "R001", "title": "Scope creep — ขอบเขตบานปลาย", "prob": 4, "impact": 4, "response": "Mitigate: Change control process เข้มงวด"},
        {"id": "R002", "title": "Key developer ลาออก", "prob": 3, "impact": 5, "response": "Mitigate: Knowledge sharing, documentation, backup resources"},
        {"id": "R003", "title": "Third-party API เปลี่ยน/ยกเลิก", "prob": 2, "impact": 4, "response": "Mitigate: Abstraction layer, backup provider"},
        {"id": "R004", "title": "Security breach ใน production", "prob": 2, "impact": 5, "response": "Mitigate: SAST/DAST, penetration testing, incident response plan"},
        {"id": "R005", "title": "Cloud costs เกิน budget", "prob": 3, "impact": 3, "response": "Mitigate: Cost alerts, reserved instances, auto-scaling limits"},
        {"id": "R006", "title": "Performance ไม่ผ่าน load test", "prob": 3, "impact": 4, "response": "Mitigate: Early performance testing, capacity planning"},
        {"id": "R007", "title": "Data migration ผิดพลาด", "prob": 2, "impact": 5, "response": "Mitigate: Dry run, validation scripts, rollback plan"},
        {"id": "R008", "title": "Regulatory compliance ใหม่ (PDPA)", "prob": 3, "impact": 4, "response": "Mitigate: Legal review, privacy by design, DPO appointment"},
    ]

    def show_risks(self):
        print("=== Common IT Project Risks ===\n")
        for r in self.RISKS:
            score = r["prob"] * r["impact"]
            priority = "CRIT" if score >= 15 else "HIGH" if score >= 10 else "MED"
            print(f"  [{r['id']}] [{priority:>4}] Score:{score:>2} | {r['title']}")
            print(f"         Response: {r['response']}")
            print()

    def emv_calculation(self):
        print("=== EMV (Expected Monetary Value) ===")
        risks = [
            {"name": "Server downtime", "prob": 0.2, "cost": -500000},
            {"name": "Scope creep (+20%)", "prob": 0.4, "cost": -300000},
            {"name": "Early delivery bonus", "prob": 0.3, "cost": 200000},
            {"name": "Data breach fine", "prob": 0.05, "cost": -5000000},
        ]
        total_emv = 0
        for r in risks:
            emv = r["prob"] * r["cost"]
            total_emv += emv
            print(f"  {r['name']}: P={r['prob']} × Cost={r['cost']:>10,} = EMV {emv:>10,.0f} บาท")
        print(f"\n  Total EMV: {total_emv:>10,.0f} บาท")
        print(f"  → ต้องตั้ง contingency reserve อย่างน้อย {abs(total_emv):,.0f} บาท")

it = ITProjectRisks()
it.show_risks()
it.emv_calculation()

Risk Management Tools

# tools.py — Risk management tools and frameworks
import json

class RiskTools:
    TOOLS = {
        "jira": {
            "name": "Jira (Risk as Issues)",
            "description": "ใช้ issue type 'Risk' + custom fields สำหรับ probability/impact",
            "price": "Free-$8.15/user/month",
        },
        "riskwatch": {
            "name": "RiskWatch",
            "description": "Dedicated risk management platform",
            "price": "Enterprise pricing",
        },
        "excel": {
            "name": "Excel/Google Sheets (Risk Register)",
            "description": "Template ง่ายๆ สำหรับ small-medium projects",
            "price": "Free",
        },
        "monte_carlo": {
            "name": "Monte Carlo Simulation Tools",
            "description": "@Risk, Crystal Ball, Python (numpy/scipy)",
            "price": "Free (Python) - $1,500+ (commercial)",
        },
    }

    FRAMEWORKS = {
        "pmbok": {"name": "PMBOK (PMI)", "focus": "Project risk management process"},
        "iso31000": {"name": "ISO 31000", "focus": "Enterprise risk management standard"},
        "prince2": {"name": "PRINCE2", "focus": "Risk management as theme"},
        "fair": {"name": "FAIR", "focus": "Quantitative information risk analysis"},
    }

    def show_tools(self):
        print("=== Risk Management Tools ===\n")
        for key, tool in self.TOOLS.items():
            print(f"  [{tool['name']}] {tool['description']} | {tool['price']}")

    def show_frameworks(self):
        print(f"\n=== Frameworks ===")
        for key, fw in self.FRAMEWORKS.items():
            print(f"  [{fw['name']}] {fw['focus']}")

tools = RiskTools()
tools.show_tools()
tools.show_frameworks()

FAQ - คำถามที่พบบ่อย

Q: Risk กับ Issue ต่างกันอย่างไร?

A: Risk: เหตุการณ์ที่ยังไม่เกิดขึ้น (อาจจะเกิดหรือไม่เกิดก็ได้) — จัดการเชิงรุก Issue: ปัญหาที่เกิดขึ้นแล้ว — ต้องแก้ไขทันที Risk ที่เกิดขึ้นจริง → กลายเป็น Issue ดังนั้น Risk Management ดี = ลด Issues ที่เกิดขึ้น

Q: Contingency Reserve กับ Management Reserve ต่างกัน?

A: Contingency Reserve: งบสำรองสำหรับ known risks (identified risks) — PM ใช้ได้เอง Management Reserve: งบสำรองสำหรับ unknown risks (unknown-unknowns) — ต้องขออนุมัติ management ทั่วไป: Contingency 5-15% + Management Reserve 5-10% ของ budget

Q: ใช้ Risk Matrix อย่างไร?

A: 1. ประเมิน Probability (1-5) และ Impact (1-5) ของแต่ละ risk 2. คำนวณ Score = P × I 3. จัดลำดับ: Critical (15-25), High (10-14), Medium (5-9), Low (1-4) 4. Focus ที่ Critical และ High ก่อน 5. Review ทุก sprint/milestone — risk อาจเปลี่ยนแปลง

Q: IT Project มีความเสี่ยงอะไรบ่อยที่สุด?

A: อันดับ 1: Scope creep (ขอบเขตบานปลาย) — ป้องกันด้วย change control อันดับ 2: Resource/skill shortage — ป้องกันด้วย cross-training, documentation อันดับ 3: Technology complexity — ป้องกันด้วย POC, prototyping อันดับ 4: Unrealistic timeline — ป้องกันด้วย bottom-up estimation, buffer อันดับ 5: Stakeholder misalignment — ป้องกันด้วย regular communication

📖 บทความที่เกี่ยวข้อง

risk of project managementอ่านบทความ → risk management framework nistอ่านบทความ → CSS Nesting Incident Managementอ่านบทความ → Cloudflare D1 Technical Debt Managementอ่านบทความ → Docker Multi-stage Build Identity Access Managementอ่านบทความ →

📚 ดูบทความทั้งหมด →