בדיקות אוטומטיות מרובות וכלי אנאליזה סטטיים *מההתחלה*
 
החשיבות של להתחיל עם זה מתחילת הפרוייקט, וברמה פשיסטית (אין אף warning, ובכל מקום שיש בעיה שלא ניתן לפתור בפרק זמן סביר, מסמנים יוצא מהכלל באותה שורת קוד, ולא מבטלים באופן גורף את הבדיקה הספציפית) היא אקוטית - אם מנסים להכניס דברים כאלו אחרי שהפרוייקט כבר צבר כמה שנים - מתחילים להתפשר על רמת ההערות שהכלי מספק, ומפסידים חלק מערכו.
 
אגב, הגישה הזו נכונה גם לדגלי קומפילציה בשפות מקומפלות - אם לא מתחילים מראש עם כל הדגלים המעניינים דלוקים - מאוד קשה להכניס אותם לאחר מכן.
 
לגבי בדיקות אוטומטיות - הן צריכות להתפרס על סוגי הקלטים השונים שכל פונקציה או תת-יחידה עשויה לקבל, כדי להבטיח טיפול נכון בכל אחד מהם. לא מספיק רק לעבור בכל שורת קוד (ושוב - זה רלוונטי גם לשפות מקומפלות). הבדיקות האוטומטיות צריכות להתחלק לשתי קבוצות - אלו שרצות תוך דקה-שתיים (בדיקות יחידה פרימיטיביות, שתופסות שגיאות בתוך הפונקציות ובתוך המחלקות), שאפשר להריץ אחרי כל שינוי בקוד, ואלו שרצות בצורה הרבה יותר מאסיבית, שתרוצנה בסביבת ה-CI (על כל commit) או בסביבת בדיקה ארוכה יותר שרצה פעם בלילה/סוף שבוע.
 
בסופו של דבר, איכות הקוד מושפעת מאוד מאיכות הבדיקה שמבצעים עליו המפתחים (אם תשאיר רק לאנשי הבדיקות למצוא את השגיאות מהסוג הזה, מצבך לא מוצלח. אם הם נתקלים בהן רק "פעם ב.." מספיק זמן - אפשר לחיות עם זה).
 
מצד שני, בשפות מקומפלות אתה נתקל בבעיות זמן ריצה מסוגים אחרים, שגם להם יש מחיר, וגם עליהן מתגברים בדרכים דומות.
 
בשורה התחתונה - חוששני שאני בעד ג'אווה כשלא צריך ביצועים יוצאי דופן או צריכת זכרון קטנה מאוד או התממשקות עדינה עם חומרה, אבל זה בגלל שכתבתי בה רק במשך חצי שנה, ולכן נחשפתי רק לחלק קטן מהצרות שלה