סקיל Domain Modeling
domain-modeling הוא סקיל לקלוד קוד שבונה ומחדד את מודל הדומיין של הפרויקט: השפה האחידה שבה כולם מדברים על המערכת. במקום שכל מפתח יקרא לאותו דבר בשם אחר, הסקיל מנהל מילון מונחים חי, מאתגר הגדרות מעורפלות, ומתעד החלטות ארכיטקטוניות ברגע שהן מתגבשות. הוא כותב את כל זה לקבצים מקומיים, כך שהידע נשמר ומשותף לכל מי שנכנס לפרויקט. בפרויקטי הפיתוח שאני מוביל, שפה אחידה היא ההבדל בין צוות מסונכרן לבין אי הבנות חוזרות. במדריך תקבלו את שיטת העבודה המלאה, ארבעה תרחישי שימוש, וצ'קליסט לעבודה נכונה.
פקודת התקנה
npx skills add mattpocock/skills@domain-modeling -g -y
ההתקנה מתבצעת דרך מנהל החבילות הרשמי של הסקילים בפקודה אחת. הסקיל הוא קובץ Markdown פתוח מהמאגר של מאט פוקוק, ומשמש גם סקילים אחרים לתחזוקת מודל הדומיין. אפשר להוריד ולבדוק את הקוד דרך הכפתורים שבראש העמוד.
מה הסקיל כולל?
הסקיל מתעד דיסציפלינה אקטיבית של בניית מודל דומיין: אתגור מונחים, המצאת תרחישי קצה, וכתיבת המילון וההחלטות הארכיטקטוניות לקבצים מקומיים ברגע שהם מתגבשים.
קוד הסקיל המלא
---
name: domain-modeling
description: Build and sharpen a project's domain model. Use when the user wants to pin down domain terminology or a ubiquitous language, record an architectural decision, or when another skill needs to maintain the domain model.
---
# Domain Modeling
Actively build and sharpen the project's domain model as you design. This is the *active* discipline — challenging terms, inventing edge-case scenarios, and writing the glossary and decisions down the moment they crystallise. (Merely *reading* `CONTEXT.md` for vocabulary is not this skill — that's a one-line habit any skill can do. This skill is for when you're changing the model, not just consuming it.)
## File structure
Most repos have a single context:
```
/
├── CONTEXT.md
├── docs/
│ └── adr/
│ ├── 0001-event-sourced-orders.md
│ └── 0002-postgres-for-write-model.md
└── src/
```
If a `CONTEXT-MAP.md` exists at the root, the repo has multiple contexts. The map points to where each one lives:
```
/
├── CONTEXT-MAP.md
├── docs/
│ └── adr/ ← system-wide decisions
├── src/
│ ├── ordering/
│ │ ├── CONTEXT.md
│ │ └── docs/adr/ ← context-specific decisions
│ └── billing/
│ ├── CONTEXT.md
│ └── docs/adr/
```
Create files lazily — only when you have something to write. If no `CONTEXT.md` exists, create one when the first term is resolved. If no `docs/adr/` exists, create it when the first ADR is needed.
## During the session
### Challenge against the glossary
When the user uses a term that conflicts with the existing language in `CONTEXT.md`, call it out immediately. "Your glossary defines 'cancellation' as X, but you seem to mean Y — which is it?"
### Sharpen fuzzy language
When the user uses vague or overloaded terms, propose a precise canonical term. "You're saying 'account' — do you mean the Customer or the User? Those are different things."
### Discuss concrete scenarios
When domain relationships are being discussed, stress-test them with specific scenarios. Invent scenarios that probe edge cases and force the user to be precise about the boundaries between concepts.
### Cross-reference with code
When the user states how something works, check whether the code agrees. If you find a contradiction, surface it: "Your code cancels entire Orders, but you just said partial cancellation is possible — which is right?"
### Update CONTEXT.md inline
When a term is resolved, update `CONTEXT.md` right there. Don't batch these up — capture them as they happen. Use the format in [CONTEXT-FORMAT.md](./CONTEXT-FORMAT.md).
`CONTEXT.md` should be totally devoid of implementation details. Do not treat `CONTEXT.md` as a spec, a scratch pad, or a repository for implementation decisions. It is a glossary and nothing else.
### Offer ADRs sparingly
Only offer to create an ADR when all three are true:
1. **Hard to reverse** — the cost of changing your mind later is meaningful
2. **Surprising without context** — a future reader will wonder "why did they do it this way?"
3. **The result of a real trade-off** — there were genuine alternatives and you picked one for specific reasons
If any of the three is missing, skip the ADR. Use the format in [ADR-FORMAT.md](./ADR-FORMAT.md).
מה זה domain-modeling ולמה הסקיל הזה שונה?
domain-modeling פותר בעיה שקטה אך הרסנית: כשאין שפה אחידה, כל אחד מבין את המערכת קצת אחרת. אחד קורא ל"לקוח" משהו, השני מתכוון למשהו אחר, והפער הזה מחלחל לקוד, לבאגים ולתקשורת. הסקיל בונה שפה אחידה, מה שמכונה שפה כוללת, שמיישרת את כולם על אותה משמעות.
מה שמייחד אותו הוא שזו דיסציפלינה אקטיבית, לא רק קריאה של מילון קיים. הסקיל מאתגר מונחים, ממציא תרחישי קצה כדי לבחון אם הגדרה מחזיקה, וכותב את המילון ואת ההחלטות הארכיטקטוניות לקבצים מקומיים ברגע שהם מתגבשים. הוא מתעד החלטות כ-ADR כך שהן לא ייפתחו מחדש בעתיד, ויודע לעבוד גם בפרויקטים עם כמה הקשרים נפרדים. כל הידע נשמר בקוד, נגיש לכל מי שמצטרף.
ההבדל מורגש בבהירות ובהמשכיות. במקום ידע שיושב בראש של מפתח אחד, יש מודל כתוב שכל הצוות וגם קלוד נשענים עליו. בשילוב עם סקיל grill-with-docs שמחדד דרישות מול תיעוד, מקבלים בסיס ידע חי ומדויק שמלווה את הפרויקט לאורך כל חייו.
מה domain-modeling נותן לקלוד קוד?
הסקיל מוסיף לקלוד את התפקיד של שומר השפה: לבנות, לחדד ולתעד את מודל הדומיין, כך שהקוד והתקשורת נשענים על אותה משמעות מדויקת.
מילון מונחים חי
הסקיל מנהל מילון מונחים מרכזי של הפרויקט ומעדכן אותו ברגע שמונח חדש מתגבש. כך כל הצוות, וגם קלוד עצמו, משתמשים באותם שמות לאותם דברים, והשפה נשארת עקבית לאורך כל הפיתוח.
אתגור וחידוד מונחים
זו דיסציפלינה אקטיבית: הסקיל לא מקבל הגדרות כמובנות מאליהן, אלא מאתגר אותן וממציא תרחישי קצה כדי לבחון אם הן מחזיקות. מונח מעורפל מתחדד עד שהוא מדויק, וזה מונע בלבול שמחלחל לקוד.
תיעוד החלטות (ADR)
כשמתקבלת החלטה ארכיטקטונית, הסקיל מתעד אותה כרשומת החלטה ברגע שהיא מתגבשת. כך ההחלטה לא נשכחת ולא נפתחת מחדש בכל פעם, והנימוק מאחוריה זמין לכל מי שיתהה עליה בעתיד.
תמיכה בכמה הקשרים
בפרויקטים גדולים שיש בהם כמה תחומים נפרדים, הסקיל יודע לנהל מודל דומיין לכל הקשר בנפרד, עם מפה שמקשרת ביניהם. כך כל תחום שומר על השפה שלו בלי להתנגש עם האחרים.
ארבע היכולות הופכות את קלוד לשומר העקביות של הפרויקט. בעבודות שלי, מודל דומיין כתוב מנע אי הבנות חוזרות וקיצר משמעותית את הזמן שלוקח למפתח חדש להבין את המערכת.
למי הסקיל הזה מתאים?
מובילי פיתוח ואדריכלי תוכנה: זה הקהל המובהק. הסקיל בונה שפה אחידה שמיישרת את כל הצוות ומונעת אי הבנות שמחלחלות לקוד. השילוב עם סקיל writing-plans מחבר בין שפת הדומיין לבין תכנון העבודה בפועל.
צוותים שגדלים: ככל שמצטרפים אנשים, חשוב שכולם ידברו באותה שפה. מילון מונחים כתוב הוא הדרך לשמר את הידע ולמנוע פיצול של המשמעויות עם הזמן.
מפתחים שיורשים פרויקט: מודל דומיין מתועד הוא מפת דרכים מהירה להבנת המערכת. במקום לפענח את הכוונות מהקוד, אפשר לקרוא את המילון ואת ההחלטות ולהתמצא מהר.
מנהלי מוצר ואנשי עסקים: שפה אחידה מגשרת בין הצד העסקי לטכני. כשכולם מתכוונים לאותו דבר במונח אחד, התקשורת מדויקת יותר. גם בעבודות אוטומציה שלי, הגדרה מדויקת של מושגי הדומיין היא הבסיס לכל תהליך אמין.
צוותים שעובדים עם AI: כשמודל הדומיין כתוב, קלוד יכול להישען עליו ולדבר בשפת הפרויקט במקום להמציא מונחים. זה משפר את איכות העבודה של הסוכן באופן ישיר.
מי שפחות יתאים: סקריפט קטן או פרויקט חד-פעמי בלי מורכבות דומיין לא צריך מודל פורמלי. הסקיל מבריק דווקא במערכות עם תחום עסקי עשיר שחי לאורך זמן.
איך domain-modeling עזר לי בפרויקטים אמיתיים
שפה אחידה שמנעה אי הבנות
בפרויקט, אותו מושג נקרא בשלושה שמות שונים בקוד, מה שגרם לבאגים. הסקיל אתגר את המונחים, חידד הגדרה אחת, וכתב אותה למילון. מאותו רגע כולם, כולל קלוד, השתמשו באותו שם, והבלבול נעלם.
החלטה ארכיטקטונית שלא נפתחה מחדש
החלטנו על גישה טכנולוגית מסוימת, אבל היא חזרה לדיון שוב ושוב. הסקיל תיעד אותה כרשומת החלטה עם הנימוק. בכל פעם שמישהו תהה, ההחלטה והסיבה היו זמינות, וזה חסך דיונים חוזרים ומיותרים.
קליטה מהירה של מפתח חדש
מפתח הצטרף לפרויקט מורכב. במקום שבוע של שאלות, הוא קרא את מילון הדומיין ואת ההחלטות המתועדות. הוא הבין את שפת המערכת תוך יום, והתחיל לתרום מהר הרבה יותר מהרגיל.
ניהול כמה תחומים בפרויקט גדול
מערכת גדולה כללה כמה תחומים נפרדים שהתנגשו במונחים. הסקיל ניהל מודל דומיין לכל הקשר בנפרד, עם מפה שמקשרת ביניהם. כל תחום שמר על השפה שלו, וההתנגשויות נעלמו.
ארבעת המקרים מראים שהסקיל לא רק מסדר מונחים, הוא בונה זיכרון משותף לפרויקט. כששפת הדומיין וההחלטות כתובות, הצוות מסונכרן, הקליטה מהירה, ואי הבנות יקרות פשוט לא קורות.
סיכום
סקיל domain-modeling הוא בסיס לכל פרויקט עם תחום עסקי עשיר. הוא בונה ומחדד שפה אחידה, מתעד החלטות ארכיטקטוניות, ושומר את הכול בקבצים מקומיים, כך שהידע משותף, עקבי, ונשמר לאורך זמן.
אם אתם מתחילים, בקשו מקלוד לבנות מילון מונחים ראשוני לפרויקט שלכם עם הסקיל. תראו איך אתגור המונחים מחדד את ההבנה של כולם, כולל שלכם. משם, השפה האחידה הופכת לנכס.
בפוסטים הבאים אמשיך לסקור סקילים שמשדרגים את איכות הפיתוח. האתר של דביר נעמן מרכז את כל הכלים, השיטות והליווי שאני מציע לעסקים שרוצים לבנות תוכנה איכותית עם בינה מלאכותית.
שיתוף הסקיל
שאלות ותשובות
מה זה בעצם הסקיל domain-modeling?
זה סקיל לקלוד קוד שבונה ומחדד את מודל הדומיין של הפרויקט, כלומר השפה האחידה שבה מתארים את המערכת. הוא מנהל מילון מונחים חי, מאתגר הגדרות, ומתעד החלטות ארכיטקטוניות בקבצים מקומיים. המטרה היא שכל הצוות, וגם קלוד, ידברו באותה שפה מדויקת.
מה זאת שפה אחידה ולמה היא חשובה?
שפה אחידה, או שפה כוללת, היא מערכת מונחים מוסכמת שבה כולם מתכוונים לאותו דבר באותו שם. היא חשובה כי בלעדיה כל אחד מבין את המערכת אחרת, והפער מחלחל לקוד, לבאגים ולתקשורת. הסקיל בונה אותה ומתחזק אותה, וכך מיישר את כל המעורבים.
איך מתקינים את הסקיל בקלוד קוד?
בפקודה אחת דרך מנהל החבילות הרשמי של הסקילים, כפי שמופיע בקופסת ההתקנה למעלה. הסקיל הוא קובץ Markdown פתוח מהמאגר של מאט פוקוק. הוא משמש גם סקילים אחרים בתחום הארכיטקטורה כדי לתחזק את מודל הדומיין תוך כדי עבודה.
מה זה ADR שהסקיל מתעד?
ADR הוא רשומת החלטה ארכיטקטונית: מסמך קצר שמתעד החלטה טכנית חשובה ואת הנימוק מאחוריה. הסקיל כותב ADR ברגע שההחלטה מתגבשת, כך שהיא לא נשכחת ולא נפתחת מחדש. בעתיד, כל מי שתוהה למה נבחרה גישה מסוימת מוצא את התשובה מתועדת.
האם הסקיל שולח מידע החוצה?
לא. הסקיל כותב את מודל הדומיין ואת ההחלטות לקבצים מקומיים בתוך הפרויקט שלכם, כמו מילון מונחים ורשומות החלטה. אין שליחת קוד או נתונים לשרת חיצוני, אין מפתחות API ואין טלמטריה. כל הידע נשאר אצלכם, בקוד.
מה ההבדל בין הסקיל לבין סתם כתיבת מילון?
כתיבת מילון היא פעולה חד-פעמית שמתיישנת. הסקיל הוא דיסציפלינה אקטיבית: הוא מאתגר מונחים, ממציא תרחישי קצה, ומעדכן את המודל ברגע שמשהו משתנה. הוא לא רק מתעד, אלא מחדד את החשיבה על הדומיין, וזה מה שהופך את המודל לחי ושימושי.
האם הסקיל מתאים לפרויקטים גדולים עם כמה תחומים?
כן, יש לו תמיכה מובנית בכך. בפרויקט עם כמה הקשרים נפרדים, הסקיל מנהל מודל דומיין לכל הקשר בנפרד, עם מפה שמקשרת ביניהם. כך כל תחום שומר על השפה שלו בלי להתנגש עם האחרים, וזה חיוני במערכות מורכבות.
האם הסקיל מתאים גם למי שאינו מתכנת?
כן, ואף מועיל מאוד. מנהלי מוצר ואנשי עסקים מרוויחים משפה אחידה שמגשרת בין הצד העסקי לטכני. הסקיל עוזר לנסח מונחים מדויקים שכולם מסכימים עליהם, וזה משפר את התקשורת בכל הפרויקט, לא רק בקוד.