רוב הלקוחות שמבקשים דשבורד ניהול או פורטל פנימי מבקשים בפועל מערכת תפעול: סביבה שהצוות משתמש בה מדי יום לביצוע ליבת העבודה של העסק.
אתר הוא השלכת מידע. מערכת תפעול היא סביבה שבה העבודה קורית. דרישות העיצוב שונות מהיסוד: אתרים מותאמים להבנה והמרה; מערכות תפעול — למהירות, אמינות, מניעת שגיאות והמשכיות זרימה.
האנטומיה של מערכת פנימית אמיתית
הרכיבים משתנים לפי תחום, אבל המבנה עקבי בכל כלי פנימי רציני שבנינו.
- —ניהול ישויות: האובייקטים המרכזיים שהעסק מפעיל — לקוחות, הזמנות, תיקים, נכסים, מסמכים
- —גישה לפי תפקיד: חברי צוות שונים עם נראות והרשאות שונות על כל ישות
- —מצבי זרימה: ישויות עוברות מצבים מוגדרים עם כללים מי יכול להפעיל מעברים
- —יומן ביקורת: כל שינוי מצב נרשם עם מי, מתי ולמה
- —ניהול מסמכים: קבצים מצורפים, היסטוריית גרסאות ובקרת גישה
- —שכבת תקשורת: הערות פנימיות, הודעות ללקוח והתראות
- —שכבת דיווח: סיכומים תפעוליים, ייצוא ודשבורדי ביצועים
עיצוב גישה לפי תפקיד
כשל נפוץ: בונים קודם לאדמין ואז מנסים להגביל משתמשים אחרים. התוצאה — הגבלות לא עקביות ב־API, ב־UI או בשום מקום.
אנחנו מעצבים מטריצות הרשאות לפני שורה אחת של קוד. כל ישות עם פעולות מותרות; כל תפקיד עם הרשאות מול כל סוג ישות. המטריצה ממומשת קודם ב־API ואז משתקפת ב־UI.
אבטחה דרך הסתרת UI אינה אבטחה. כל הרשאה חייבת להיאכף בשכבת הנתונים.
משתמש שלא יכול לייצא מסמך לא רואה את כפתור הייצוא — וחשוב יותר, גם לא יכול לקרוא לנקודת הקצה ישירות. ה־UI הוא נוחות; ה־API הוא הסמכות.
מכונות מצבי זרימה
זרימות עסקיות אמיתיות אינן בוליאניות. הזמנה אינה רק הוזמנה או נמסרה — יש מצבים, מעברים מותרים, משתמשים מורשים וולידציות.
אנחנו מממשים מצבי זרימה כמכונות מצבים מפורשות בשכבת הנתונים, לא כהסקה מזרימות UI. כך הכללים נאכפים באופן עקבי מכל מקור — ווב, מובייל, API או תהליך רקע.
יומן ביקורת אינו אופציונלי
כל לקוח ארגוני שואל בסוף: מי שינה את זה ומה היה לפני? בלי לוג שינויים אין תשובה. יומן ביקורת הוא תכונה של ארכיטקטורת הנתונים.
אנחנו מממשים לוגי ביקורת append-only על כל מוטציות ישות — מצב לפני/אחרי, משתמש, חותמת זמן ומקור השינוי — ברמת מסד הנתונים, כדי שלא ניתן לעקוף אותם.
מתי לבנות ומתי להגדיר
לא כל מערכת פנימית צריכה להיבנות מאפס. חלק מהזרימות מתאימות לפלטפורמות ניתנות להגדרה. בתרחישים האלה התפקיד שלנו הוא אינטגרציה והתאמה, לא פיתוח מותאם מלא.