بناء محاكي تصميم تنظيمي
التعليمات
نظرة عامة
في هذا المعمل، ستبني محاكي تصميم تنظيمي بلغة Python ينمذج المؤسسات الهندسية باستخدام مفاهيم من الوحدة 3: قانون كونواي، وتخطيطات الفرق، ونطاق الإشراف، وعتبات الحمل المعرفي، وأعباء التواصل. ستساعد الأداة مدير الهندسة في تحليل هيكل مؤسسته وتلقي توصيات مبنية على البيانات.
المفاهيم الأساسية
يطبق هذا المعمل مبادئ التصميم التنظيمي من الوحدة 3:
- محاكاة قانون كونواي — نمذجة كيفية ارتباط هيكل الفريق بهندسة النظام
- تخطيطات الفرق — تصنيف الفرق كمتوافقة مع التدفق أو منصة أو تمكينية أو أنظمة فرعية معقدة
- نطاق الإشراف — التحقق من أن المديرين لديهم 5-9 مرؤوسين مباشرين
- أعباء التواصل — حساب القنوات باستخدام الصيغة n*(n-1)/2
- الحمل المعرفي — اكتشاف عندما تمتلك الفرق خدمات كثيرة مقارنة بحجمها
المتطلبات
الجزء 1: إدارة الفرق والمؤسسة
أنشئ دالة create_org(org_name) تقوم بـ:
- إنشاء وإرجاع قاموس مؤسسة بالاسم المعطى وقاموس فرق فارغ وقاموس مديرين فارغ
- يجب أن يتضمن قاموس المؤسسة المفاتيح:
name،teams،managers
أنشئ دالة add_team(org, team_name, team_type, members, services) تقوم بـ:
- إضافة فريق إلى قاموس فرق المؤسسة
team_typeيجب أن يكون أحد: "stream_aligned"، "platform"، "enabling"، "complicated_subsystem"membersهي قائمة نصوص بأسماء الأعضاءservicesهي قائمة نصوص بأسماء الخدمات/المكونات التي يمتلكها الفريق- رفع
ValueErrorإذا كان اسم الفريق موجوداً بالفعل أو نوع الفريق غير صالح
أنشئ دالة add_manager(org, manager_name, team_names) تقوم بـ:
- إضافة مدير إلى قاموس مديري المؤسسة
team_namesهي قائمة أسماء الفرق التي يشرف عليها هذا المدير- رفع
ValueErrorإذا كان اسم المدير موجوداً بالفعل - رفع
KeyErrorإذا كان أي اسم فريق غير موجود في المؤسسة
الجزء 2: حسابات أعباء التواصل
أنشئ دالة calculate_communication_channels(team_size) تقوم بـ:
- إرجاع عدد قنوات التواصل باستخدام الصيغة: n * (n - 1) / 2
- إرجاع عدد صحيح
- رفع
ValueErrorإذا كان team_size أقل من 0
أنشئ دالة calculate_org_communication_overhead(org) تقوم بـ:
- إرجاع قاموس حيث كل مفتاح هو اسم فريق والقيمة قاموس يحتوي على:
team_size: عدد الأعضاءinternal_channels: قنوات التواصل داخل الفريق (n*(n-1)/2)overhead_level: "low" إذا كانت القنوات <= 10، "medium" إذا كانت القنوات <= 28، "high" إذا كانت القنوات > 28
الجزء 3: تحليل نطاق الإشراف
أنشئ دالة analyze_span_of_control(org) تقوم بـ:
- إرجاع قاموس حيث كل مفتاح هو اسم مدير والقيمة قاموس يحتوي على:
direct_reports: إجمالي عدد الأعضاء الفريدين عبر جميع الفرق التي يشرف عليها المديرteams_managed: عدد الفرق المُدارةstatus: "too_narrow" إذا كان المرؤوسون < 5، "optimal" إذا كانوا 5-9، "too_wide" إذا كانوا > 9recommendation: نص بنصيحة قابلة للتنفيذ بناءً على الحالة
الجزء 4: الحمل المعرفي وتوصيات تقسيم الفرق
أنشئ دالة assess_cognitive_load(org) تقوم بـ:
- تقييم الحمل المعرفي لكل فريق بناءً على نسبة الخدمات لكل عضو
- إرجاع قائمة من القواميس لجميع الفرق، كل منها يحتوي على:
team_name: اسم الفريقteam_size: عدد الأعضاءservices_owned: عدد الخدماتservices_per_member: النسبة مُقرَّبة لرقمين عشريينcognitive_load: "sustainable" إذا كانت النسبة <= 1.5، "elevated" إذا كانت النسبة <= 2.5، "overloaded" إذا كانت النسبة > 2.5recommendation: نص — إذا كان مُحمَّلاً فوق طاقته، يوصي بالتقسيم؛ إذا كان مرتفعاً، يوصي بالمراقبة
- إرجاع جميع الفرق مرتبة حسب services_per_member تنازلياً (الأكثر تحميلاً أولاً)
أنشئ دالة recommend_team_split(org, team_name) تقوم بـ:
- أخذ اسم فريق والتوصية بكيفية تقسيمه
- إرجاع قاموس يحتوي على:
original_team: اسم الفريقcurrent_size: عدد الأعضاءcurrent_services: قائمة الخدماتshould_split: True إذا كان الفريق لديه أكثر من 8 أعضاء أو أكثر من 2 خدمة لكل عضوrecommended_teams: إذا كان should_split هو True، قائمة من قاموسين كل منهما يحتوي علىsuggested_name(نص) وsuggested_services(قائمة)، مع تقسيم الخدمات تقريباً بالنصف؛ إذا كان should_split هو False، قائمة فارغة
- رفع
KeyErrorإذا كان الفريق غير موجود
الجزء 5: محاكاة قانون كونواي
أنشئ دالة simulate_conway_mapping(org) تقوم بـ:
- ربط كل فريق بمكونات النظام التي سينتجها بشكل طبيعي (قائمة خدماته)، مما يوضح قانون كونواي
- إرجاع قاموس يحتوي على:
teams_to_components: قاموس يربط أسماء الفرق بقائمة خدماتهاcomponent_coupling: قائمة قواميس تصف الترابط المحتمل بين الفرق التي لا تتشارك خدمات لكنها تُدار من نفس المدير، كل منها يحتوي علىteam_a،team_b، وshared_managerconway_warnings: قائمة نصوص تحذيرية لمشاكل معمارية محتملة (مثلاً، فريق واحد يمتلك أكثر من 4 خدمات قد ينتج مكوناً متجانساً)
الجزء 6: توليد تقرير الهيكل التنظيمي
أنشئ دالة generate_org_report(org) تقوم بـ:
- إرجاع نص منسق يحتوي على:
- عنوان باسم المؤسسة
- ملخص تخطيطات الفرق يعرض أعداد كل نوع فريق
- قسم لكل مدير يعرض حالة نطاق إشرافه والفرق التي يديرها
- قسم لكل فريق يعرض الأعضاء والخدمات ونوع الفريق وقنوات التواصل
- ملخص الحمل المعرفي مع التوصيات
- قسم تحليل قانون كونواي
- يجب أن يكون الإخراج نظيفاً ومقروءاً ومنظماً بشكل جيد
مثال على الاستخدام
org = create_org("Acme Engineering")
# إضافة فرق بتخطيطاتها
add_team(org, "Payments", "stream_aligned",
["Alice", "Bob", "Carol", "Dave", "Eve"],
["payment-api", "billing-service", "invoice-generator"])
add_team(org, "Platform Infra", "platform",
["Frank", "Grace", "Heidi"],
["ci-cd-pipeline", "monitoring-stack", "dev-portal"])
add_team(org, "Search", "stream_aligned",
["Ivan", "Judy", "Karl", "Liam", "Mia", "Noah", "Olivia", "Pat", "Quinn", "Rosa"],
["search-api", "indexer", "ranking-engine", "autocomplete", "search-analytics"])
add_team(org, "ML Core", "complicated_subsystem",
["Sam", "Tina"],
["recommendation-engine", "fraud-detection", "nlp-pipeline"])
# إضافة مديرين
add_manager(org, "VP Alice", ["Payments", "Search"])
add_manager(org, "Director Bob", ["Platform Infra", "ML Core"])
# التحليل
channels = calculate_communication_channels(10)
print(f"القنوات لـ 10 أشخاص: {channels}") # 45
span = analyze_span_of_control(org)
print(span)
load = assess_cognitive_load(org)
print(load)
report = generate_org_report(org)
print(report)
تنسيق الإخراج المتوقع
================================================================
ORG DESIGN REPORT: Acme Engineering
================================================================
TEAM TOPOLOGIES SUMMARY
----------------------------------------------------------------
Stream-aligned teams: 2
Platform teams: 1
Enabling teams: 0
Complicated subsystem teams: 1
Total teams: 4
Total engineers: 20
================================================================
MANAGER SPAN OF CONTROL
================================================================
VP Alice
Teams: Payments, Search
Direct reports: 15
Status: TOO WIDE
Recommendation: Consider splitting into two management roles.
Director Bob
Teams: Platform Infra, ML Core
Direct reports: 5
Status: OPTIMAL
Recommendation: Span of control is within the recommended 5-9 range.
================================================================
TEAM DETAILS
================================================================
Payments [stream_aligned]
Members (5): Alice, Bob, Carol, Dave, Eve
Services (3): payment-api, billing-service, invoice-generator
Communication channels: 10 (medium)
Services per member: 0.60
Platform Infra [platform]
Members (3): Frank, Grace, Heidi
Services (3): ci-cd-pipeline, monitoring-stack, dev-portal
Communication channels: 3 (low)
Services per member: 1.00
Search [stream_aligned]
Members (10): Ivan, Judy, Karl, Liam, Mia, Noah, Olivia, Pat, Quinn, Rosa
Services (5): search-api, indexer, ranking-engine, autocomplete, search-analytics
Communication channels: 45 (high)
Services per member: 0.50
ML Core [complicated_subsystem]
Members (2): Sam, Tina
Services (3): recommendation-engine, fraud-detection, nlp-pipeline
Communication channels: 1 (low)
Services per member: 1.50
================================================================
COGNITIVE LOAD ASSESSMENT
================================================================
1. ML Core — 1.50 services/member — ELEVATED
Monitor closely; consider adding team members or reducing scope.
2. Platform Infra — 1.00 services/member — SUSTAINABLE
Cognitive load is within healthy bounds.
3. Payments — 0.60 services/member — SUSTAINABLE
Cognitive load is within healthy bounds.
4. Search — 0.50 services/member — SUSTAINABLE
Cognitive load is within healthy bounds.
================================================================
CONWAY'S LAW ANALYSIS
================================================================
Team-to-Component Mapping:
Payments -> payment-api, billing-service, invoice-generator
Platform Infra -> ci-cd-pipeline, monitoring-stack, dev-portal
Search -> search-api, indexer, ranking-engine, autocomplete, search-analytics
ML Core -> recommendation-engine, fraud-detection, nlp-pipeline
Potential Coupling (shared manager):
Payments <-> Search (via VP Alice)
Platform Infra <-> ML Core (via Director Bob)
Warnings:
- Search owns 5 services — risk of producing a monolithic component.
Consider splitting into focused sub-teams.
================================================================