العودة للدورة|مقابلات مدير الهندسة: القيادة وتصميم المؤسسات والتنفيذ الاستراتيجي
معمل

بناء محاكي تصميم تنظيمي

35 دقيقة
متوسط
3 المحاولات المجانية

التعليمات

نظرة عامة

في هذا المعمل، ستبني محاكي تصميم تنظيمي بلغة 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" إذا كانوا > 9
    • recommendation: نص بنصيحة قابلة للتنفيذ بناءً على الحالة

الجزء 4: الحمل المعرفي وتوصيات تقسيم الفرق

أنشئ دالة assess_cognitive_load(org) تقوم بـ:

  • تقييم الحمل المعرفي لكل فريق بناءً على نسبة الخدمات لكل عضو
  • إرجاع قائمة من القواميس لجميع الفرق، كل منها يحتوي على:
    • team_name: اسم الفريق
    • team_size: عدد الأعضاء
    • services_owned: عدد الخدمات
    • services_per_member: النسبة مُقرَّبة لرقمين عشريين
    • cognitive_load: "sustainable" إذا كانت النسبة <= 1.5، "elevated" إذا كانت النسبة <= 2.5، "overloaded" إذا كانت النسبة > 2.5
    • recommendation: نص — إذا كان مُحمَّلاً فوق طاقته، يوصي بالتقسيم؛ إذا كان مرتفعاً، يوصي بالمراقبة
  • إرجاع جميع الفرق مرتبة حسب 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_manager
    • conway_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.

================================================================

معايير التقييم

إدارة المؤسسة والفرق — create_org() تُرجع قاموساً منظماً بشكل صحيح؛ add_team() تتحقق من team_type مقابل أنواع تخطيطات الفرق الأربعة وترفع ValueError للأسماء المكررة أو الأنواع غير الصالحة؛ add_manager() تربط المديرين بالفرق بشكل صحيح وترفع KeyError للفرق غير الموجودة وValueError للمديرين المكررين؛ جميع هياكل البيانات متسقة ومنظمة بشكل جيد20 نقاط
أعباء التواصل ونطاق الإشراف — calculate_communication_channels() تنفذ n*(n-1)/2 بشكل صحيح وتتعامل مع الحالات الحدية (0، 1، سالب)؛ calculate_org_communication_overhead() تصنف المستويات بشكل صحيح (low/medium/high)؛ analyze_span_of_control() تعد المرؤوسين المباشرين الفريدين بدقة عبر الفرق وتصنف النطاقات بشكل صحيح وتقدم توصيات ذات معنى25 نقاط
الحمل المعرفي وتقسيم الفرق — assess_cognitive_load() تحسب نسبة الخدمات لكل عضو بشكل صحيح وتصنف مستويات الحمل (sustainable/elevated/overloaded) وتُرجع النتائج مرتبة حسب النسبة تنازلياً؛ recommend_team_split() تحدد بشكل صحيح متى يلزم التقسيم (أكثر من 8 أعضاء أو أكثر من 2 خدمة لكل عضو) وتقسم الخدمات تقريباً بالنصف وتولّد أسماء فرق مقترحة معقولة25 نقاط
محاكاة قانون كونواي وتوليد التقرير — simulate_conway_mapping() تربط الفرق بالمكونات بشكل صحيح وتحدد الترابط عبر المديرين المشتركين وتولّد تحذيرات للفرق التي تمتلك خدمات كثيرة؛ generate_org_report() تنتج تقريراً نظيفاً ومنسقاً يغطي جميع مجالات التحليل (ملخص التخطيطات، نطاق الإشراف، تفاصيل الفرق، الحمل المعرفي، تحليل كونواي) وتتعامل مع الحالات الحدية بدون أعطال30 نقاط

قائمة التحقق

0/12

حلك

3 محاولات مجانية متبقية
نشرة أسبوعية مجانية

ابقَ على مسار النيرد

بريد واحد أسبوعياً — دورات، مقالات معمّقة، أدوات، وتجارب ذكاء اصطناعي.

بدون إزعاج. إلغاء الاشتراك في أي وقت.