על המגבלה והעומס הקוגניטיבי בפיתוח מואץ LLM

ברשומה הקודמת כתבתי על האופן בו אני מפתח באמצעות Claude Code. הפעם אני רוצה לדבר על מה שאני חושב שהוא האתגר המרכזי בפיתוח עם LLM: העומס הקוגניטיבי.

‏Claude Opus 4.6 ביחד עם Claude Code מאפשרים לי לדחוס שבועות של עבודה לימים. אבל יש תקרה, והיא לא בכלי – היא בראש שלי.

אני לא כותב שורת קוד אחת. במקום זה אני קורא, מתקן ומאשר: מסמכי מחקר, החלטות ארכיטקטוניות, תכניות מימוש, הגדרות ממשקים, בדיקות וקוד סופי. כל אחד מהם עובר כמה סבבי תיקונים.

במילים אחרות – אני נושא את כל האחריות של מפתח, ולמעשה של צוות פיתוח שלם, בלי לכתוב את הקוד בעצמי.

מהניסיון שלי, המגבלה ברורה: לא יותר משניים־שלושה נושאים במקביל, ואם אחד מהם גדול – הוא חייב לבוא לבד.

עם הזמן אני רוכש מיומנות. קורא מהר יותר, מזהה מה קריטי, מזרז סבבי אישור. אבל המיומנות הזו לא מורידה את העומס – היא מאפשרת לי לדחוס עוד יותר לתוך אותו זמן, ובכך דווקא מגבירה אותו.

הכלי לא צוואר הבקבוק. אני צוואר הבקבוק. מאה סוכנים שרצים במקביל לא יפתרו את זה – הם רק ייצרו יותר פלט שאני צריך לקרוא ולאשר.

מה שכן יעזור הם כלים שמצמצמים את מה שאני צריך לבדוק ידנית: linters מותאמים שאוכפים את הכללים שקבעתי (למשל – אכיפת מגבלה הפניה/קריאה/יבוא של חלק אחד בתכנה לחלק אחר), בדיקות אוטומטיות, אימות של ממשקים בין שכבות. ככל שיותר דברים נבדקים אוטומטית – אני יכול למקד את הקריאה שלי במה שבאמת דורש שיקול דעת.

אבל גם עם כל הכלים האלה, המגבלה נשארת. פיתוח עם LLM הוא לא „כתיבת קוד מהר יותר” – הוא תפקיד ניהולי. אני מנהל מפתח מאוד מהיר, מאוד פרודוקטיבי, שלפעמים טועה. וכמו כל מנהל, יש גבול למספר האנשים שאתה יכול לנהל בו־זמנית.

פיתוח מונחה LLM – תובנות מבניית מערכת מורכבת באמצעות Claude Code (ולמה חשוב להבין בארכיטקטורה)

בוקר טוב.

מזה זמן רב שלא כתבתי כאן, והנה – סוף סוף חזרתי. הפעם בנושא שונה מ־GNOME. אני רוצה לשתף תובנות מתהליך פיתוח באמצעות Claude Code.

לפני חצי שנה התחלתי לפתח בזמני הפנוי מערכת ניווט מבוססת תמונות ב־Go. כיוון שהזמן הפנוי שלי מוגבל, החלטתי לפתח באופן בלעדי בסיוע AI/LLM, גם כניסוי – לראות אם זה אפשרי. כבר בתכנון הראשוני לקחתי את זה בחשבון, והחלטתי לעבוד ב־DDD עם Clean Architecture לכל דומיין. המטרה הייתה לאפשר לי למקד את ה־LLM בכל שלב במשימה קטנה עם הקשר (Context) מצומצם ככל הניתן. בדיעבד, זו הייתה החלטה נהדרת.

כמה ימים אחרי תחילת התכנון (שביצעתי ברצינות עם Claude – מסמכי ADR, תכנון ארכיטקטורה ב־C4, ישויות ולוגיקה עסקית), גיליתי את Claude Code. בתור מפתח שה־IDE שלו הוא vim עם המון הרחבות, התלהבתי מהכלי. הוא באמת מדהים. עד היום אני מפתח איתו.

שבוע של תכנון, שלושה שבועות לצד שרת, שבועיים וקצת לצד לקוח – וזהו, היה לי MVP באוויר. שם בערך עצרתי, בתחילת החגים. לפני שבועיים חזרתי לפרויקט והתחלתי לפתח שרת קטן שמבצע עיבוד תמונה (אימות, פענוח, זיהוי פנים ולוחות זיהוי, טשטוש והעלאה לשרת).
בכל הפיתוח, כמעט לא כתבתי שורת קוד אחת בעצמי. למדתי המון, עשיתי לא מעט טעויות בדרך, וכמובן למדתי גם מהן.

לפני שאמשיך, חשוב לי להתייחס לתופעת „הפיתוח האוטונומי” – להקות של סוכנים (Agents) שעובדים במקביל על משימה גדולה ובונים פרויקט לבד. אני לא מאמין בזה! מהניסיון שלי (ובאמת ניסיתי), כדי לקבל קוד איכותי, קריא וניתן לתחזוקה, כזה שלא נצטרך לשכתב כל שנה, חייבים לעבוד אחרת: בצעדים קטנים ומדודים.

לשיטתי, תפקיד המפתח הוא לתכנן, לקבל החלטות, לכוון ולאשר כל דבר. התוצאה היא קוד איכותי מאוד, במהירות מדהימה.

אני לא ממציא את הגלגל; מרבית העקרונות נמצאים בהמלצות הרשמיות של אנת׳רופיק, עם התאמות וקפדנות יתרה שלי.

לפני שנצלול לשיטה, קצת על המגבלות: ל־LLM יש מגבלת זיכרון (חלון הקשר של כ־200K טוקנים), אין לו זיכרון לטווח ארוך, הוא נוטה להזות כשמערבבים נושאים, והוא אומן על מידע לא מושלם.

כדי לקבל קוד איכותי ומדויק צריך לעבוד בצורה שיטתית:

  1. ניהול זיכרון – סטטי, דינמי וכלכלת הקשר: הבסיס לשיטה הוא ההבנה שלמודל אין זיכרון בין שיחות. הפתרון:
    • זיכרון קבוע (CLAUDE.md): קובץ שנטען תמיד ומכיל מידע בסיסי שהמודל חייב לדעת (ארכיטקטורה, פקודות, סטנדרטים).
    • זיכרון דינמי (ai-docs/‎): תיקייה עם מסמכים לפי נושא. אם עובדים על נושא X, טוענים רק את מסמך האפיון שלו. זה מונע „בלבול” מעודף מידע.
    • ניקוי רעשים: סיימנו שלב? מוחקים היסטוריה. תוכנית הסתיימה? הקובץ נמחק (git rm) כדי לא לבלבל את המודל עם הוראות ישנות.
  2. סוכנים (Agents) כ„חלון זיכרון”: אחת הבעיות הגדולות היא „זיהום הקשר” – פלט של פקודות בנייה ושגיאות שממלאים את הזיכרון. הפתרון: כמעט כל משימה מתבצעת בתוך Agent משלה. הסוכן משמש מעין חלון זיכרון מבודד. צריך לחקור ספרייה? פותחים Agent מחקר. צריך לממש פונקציה? פותחים Agent מימוש. הסוכן רץ בלולאה של ניסוי וטעייה, וחוזר לשיחה הראשית רק עם השורה התחתונה: „השלמתי, הנה השינויים”. כך השיחה הראשית נשארת נקייה וממוקדת בקבלת החלטות.
  3. תהליך הפיתוח בתמצית: SDD (פיתוח מונחה אפיון) -> IDD (פיתוח מונחה ממשקים) -> TDD (פיתוח מונחה בדיקות).

בשילוב עם ארכיטקטורה מודולרית והפרדה קשיחה, מקבלים שיטה סדורה לייצור קוד איכותי.

התהליך בפירוט:

  1. מחקר ואפיון: כתיבת מסמך מפורט בזיכרון ארוך הטווח (ai-docs/research/‎).
  2. תיעוד החלטות: כתיבת מסמך ADR במידה והתקבלה החלטה במהלך המחקר (ai-docs/adr/‎).
  3. תכנון מימוש מפורט: כתיבת מסמך תכנון על בסיס מסמך המחקר (ai-docs/planning/active/‎).
  4. מימוש:
    1. כתיבת ממשקים (Interface): הגדרה מראש של מה רוצים לממש (חתימת פונקציה, קלט/פלט, שגיאות).
    2. כתיבת בדיקות (Tests): כתיבת בדיקות כושלות מול הממשק.
    3. מימוש הממשקים: כדי שהבדיקות יעברו.
    4. שיפור: תוך שמירה שהבדיקות עוברות.

הערה: בשלב המימוש אני משלב כלי קריטי – בדיקות סטטיות (Static Analysis). כל קוד חייב לעבור בדיקות קפדניות. התוצאה היא לולאת משוב שבה ה־Agent מתקן את עצמו עד שהקוד תקין לחלוטין. בנוסף, עם כל שינוי מתבצעת הרצה של כל הבדיקות של הפרויקט כולו, לוודא שלא שוברים שום דבר בדרך.

הדבר החשוב ביותר הוא שאני כמפתח מאשר כל תוצר בכל שלב לפני התקדמות לשלב הבא: מסמך מחקר, תוכנית, ממשק, בדיקות וקוד. הניסיון לימד אותי שהשקעה בקריאת התוצרים מחזירה את עצמה; איפה שחיפפתי – שילמתי ביוקר.

למעשה, התפקיד שלי השתנה לחלוטין. אני כבר לא „כותב קוד”, אלא מתכנן, מקבל החלטות ומבקר איכות.

וכדי לעשות את זה טוב, צריך ידע וניסיון רב. להבין לעומק Clean Architecture ו־DDD, להבין טיפול בשגיאות, IDD ו־TDD – דורש הבנה מעמיקה.

לסיכום, יש לי תובנה ברורה: גם עם המודלים המתקדמים ביותר (כמו Claude Opus 4.6), אנחנו עדיין צריכים מפתחים. אבל איזה מפתחים? כאלה שמבינים ארכיטקטורה, ניהול מערכת גדולה וקבלת החלטות, וכן כאלה שיכולים להכיל ולהבין כמויות מידע גדולות מאד בזמן קצר. מפתחים עם הידע הזה והכישורים האלה יכולים היום לבנות מערכות גדולות ומורכבות באיכות גבוהה ובזמן קצר. מי שאין לו את הידע הזה ולא ישכיל ללמוד אותו בהקדם, ימצא את עצמו בבעיה בשלב כזה או אחר.

מצורף קישור למסמך טכני יותר שכולו נכתב על ידי Claude Code, באנגלית.