אחרי שהחלטנו על דרישות לפרויקט, נגדיר איך הוא יראה בצורה כללית, איזה רכיבים יהיו בפרויקט, איזה סוגי משתמשים יהיה לפרויקט.
דוגמה: נניח ואנחנו רוצים לפתח אתר של מכירת קורסים דיגיטלים, על פי הדרישות שהגדרנו אנחנו רוצים לפתח אתר שבו לקוחות יוכלו לרכוש קורסים, להתחבר למשתמש שלהם, לגשת לקורסים, ולבעל החנות תהיה גישה נוחה להוסיף קורסים.
בהגדרת הפרויקט נשאל את עצמנו, איזה מרכיבים יש לפרויקט? יהיה אתר לקורס שדרכו לקוחות יוכלו לקנות קורסים, ולהיכנס לקורסים, יהיה database שיכיל מידע על הלקוחות, הקורסים והרכישות, הDB הזה ישרת את האתר, יהיה fileserver שיכיל את הקבצים/תכנים של הקורס שישרת את האתר בשביל לאפשר גישה לתכני הקורס דרך האתר, יהיה אתר נפרד שדרכו בעל החנות יוכל להוסיף קורסים, גם האתר הזה יתממשק עם הDB והfileserver. כאן החלטנו על 4 רכיבים שונים לפרויקט שלנו, db, fileserver, אתר, ואתר לבעל החנות. יכולים להיות עוד המון דרכים להגדיר את הפרויקט הזה, נסו לחשוב על כמה שיותר ויתרונות וחסרונות שיש לכל דרך, למשל נסו לחשוב על השאלה הבאה, למה שלא נשמור את הסרטונים של הקורס בתוך הdb? מה עוזר לנו להחזיק fileserver? מה היתרונות ומה החסרונות של פתרון כזה?
נחשוב על סוגי משתמשים שיהיה לפרויקט כזה, יש משתמש שניגש לאתר שלא קנה קורס, יש משתמש שניגש לאתר שקנה קורס, יש משתמש admin (בעל החנות), שיש לו גישה להוסיף תכנים לקורסים.
אחרי שחילקנו את הפרויקט שלנו לחלקים, נעצב אותם יותר לעומק. נשאל את עצמנו, באיזה DB נרצה להשתמש? באיזה fileserver נרצה להשתמש? איזה סוג מידע השרתים האלו צריכים להחזיק? אם הקורס יגדל, יהיה לנו קל להגדיל את הגודל של השרתים האלה? האם הם יעמדו בעומס? נסו לשאול את השאלות הנכונות, חקרו באינטרנט, ומצאו מה יותר יתאים לפרויקט שלכם.
בכל הקשור לקוד, איך נבחר עם איזה שפה/טכנולוגיה נפתח את האתר? במקרה כזה תוכלו לעשות את "קורס fullstack" כדי ללמוד עוד על פיתוח אתרים, אבל לשם ההבנה, בוא נניח ואנחנו רוצים לפתח משחק בפייתון, בשלב הזה אנחנו נאפיין בדיוק איזה מחלקות יהיה בפרויקט, איך הם יתקשרו ואיך בפרויקט יהיה בנוי. הכינו תרשים של כל המחלקות בפרויקט, ואיך הם מתקשרים, בקורס "ארכטיקטורת תוכנה" אנחנו לומדים איך להכין תרשים כזה (uml) ואסרטגיות לעיצוב מחלקות (design patterns). גם בלי השיטות המרוכבות האלו, אני חושב שצברתם מספיק ניסיון בקורס כדי להצליח לחשוב בעצמכם על עיצוב פרויקט, ולבנות תרשים מחלקות בעצמכם. הסתכלו על הפרויקט בפרק OOP.
אחרי שתכננתם איזה db תשתמשו, איזה fileserver, ותארתם בדיוק את המחלקות שיהיו בפרויקט, התחילו לכתוב את הקוד, בזכות התכנון המקדים שעשינו השלב הזה יהיה קל יותר, ונכון יותר, עם כמה שפחות refactor-ים.
אחרי שתכנתנו חלקים בפרויקט, הגיע השלב שבו נכתוב טסטים לכל החלקים בפרויקט, שימו לב - אתם יכולים לכתוב טסטים גם בזמן הפיתוח של הפרויקט וגם לפני, לבחירתכם.
מזכיר שיש שני סוגי טסטים שנרצה לעשות, unittest לכל החלקים הנפרדים של הפרויקט, וטסטים שנועדים לבדוק את החיבור של כל החלקים בפרויקט, המטרה היא לוודא שהפרויקט שלנו כמה שיותר סולידי ובלי באגים כדי להימנע מטעויות שיעלו לנו ביוקר
שימו לב שיש לכם את הדברים הבאים לפני שאתם מתחילים פרודקשן של הפרויקט
לוגים: שימו לב שאתם מפוצצים את כל הקוד שלכם וכל הרכיבים בכמה שיותר לוגים, כדי שתהיה לכם בקרה על הפרויקט, ויהיה לכם קל יותר לדבג, זה יכול לבוא לידי ביטוי בDB, fileserver וגם בקוד של האתר.
עומס: מה אם יהיה לנו מחר 10,000 משתמשים, האתר יעמוד בזה? אם אתם מצפים לכמות כזו של משתמשים שימו לב שאתם משתמשים קונטיינרים, ומערכת לניהול קונטיינרים כמו קוברנטיס.
סביבת פרודקשן וסביבת אינטגרציה: נרצה להקים סביבת פרודקשן, שבה ירוץ הפרויקט ולקוחות יוכלו לגשת לאתר, וסביבת אינטגרציה נפרדת שבה נוכל להוסיף פיצ'רים לפרויקט, לבדוק דברים, לדבג, להריץ טסטים ועוד. אף פעם לא נרצה לאחד בין הסביבות האלה, וחשוב לשמור את ההבדל בניהם.
אנליטיקות: דחפנו לפרודקשן, יש לנו מיליוני משתמשים לאתר, איך נדע איזה פיצ'רים הם יותר אוהבים ואיזה פחות? איך נדע איזה פונט יותר ימשוך אותם? אחת הדרכים לענות על השאלות האלו הן אנליטיקות, אנליטיקות הן מידע שאנו אוספים על המשתמשים באתר, ומנתחים אותו כדי להסיק מסקנות. יש המון שיטות לאסוף אנאליטיקות והמון ספריות שמאפשרות לנו לנתח ולאסוף אנאליטיקיות על המשתמשים, שימו לב שזה גם משהו שאולי נרצה להוסיף בהמשך לאתר שלנו.
לעצב פרויקט מאפס זה קשה במיוחד, וזה דורש המון מחשבה, תכנון, זמן. אבל משתפרים בזה עם הזמן, ולא חייב לעשות את זה לבד, מומלץ לעשות את התהליך המחשבתי הזה עם עוד מפתחים.
בנוסף יש המון תפקידים בתעשייה שאמורים לעשות חלק מהעבודה בפיתוח פרויקט מ0, ארכטיקט תוכנה אחראי לעצב את הפרויקט, מפתח qa אחראי לעשות בדיקות על התוכנה, מפתח devops אחראי להקים סביבות, ולתחזק אותם, אנשי uiux אחראים לעצב את האתר, מתכנתים מתכנתים, ומתכנת טוב יודע לעשות את רוב התפקידים, כדאי שתכירו איך לבצע אותם אבל גם לא חובה להיות מקצוענים בהם.