- MBOs (Management by Objectives) are a way to set clear, measurable goals that help align personal growth with team and company priorities.
- For Solutions Engineers at SnapLogic, MBOs provide structure, visibility, and accountability around learning, contributions, and impact.
- This project was created to centralize and simplify how we propose, track, and approve MBOs across the team.
- It allows engineers to easily submit their objectives, get feedback from managers, and track their progress in one place.
- Managers can quickly approve or reject MBOs, assign points, and ensure balanced contributions across different focus areas.
- The dashboard also fosters transparency by highlighting top contributors and team performance.
- We wanted a simple but effective tool tailored to our workflow. By tracking MBOs quarterly, we ensure continuous improvement and celebrate meaningful achievements.
- Ultimately, this tool supports a stronger, more engaged SE community. :)
- Environment-based configuration
- No hardcoded credentials
- Password hashing
- Role-based access control
- CSRF protection
- Secure headers
- Audit logging
- Python 3.9+
- PostgreSQL
- Clone the repository
- Create a virtual environment:
The SnapLogic MBO Tracker is a web-based application designed to streamline the process of creating, tracking, and approving Management by Objectives (MBOs) for Solutions Engineers. This platform enables engineers to document their achievements, managers to review and approve MBOs, and leadership to gain insights into team performance across different regions.
Management by Objectives (MBOs) are a performance management approach where employees and managers work together to set, track, and evaluate goals. In the context of this application, MBOs fall into three main categories:
- Learning and Certification: Professional development activities
- Demo & Assets: Creation of demos, tools, or assets for customer engagements
- Impact Outside of Pod: Contributions that extend beyond the immediate team
- Create and submit MBOs for approval
- Track progress on personal objectives
- View historical performance data
- Filter and sort MBOs by various criteria
- Download reports of personal achievements
- Review and approve team members' MBOs
- Assign points based on impact and quality
- Track team performance metrics
- Generate reports for quarterly reviews
- View team progress dashboards
- Manage user accounts and permissions
- Configure system settings
- Access comprehensive reporting across regions
- Monitor overall platform usage
- Role-based access control (Admin, Manager, Employee)
- Secure password management with reset functionality
- User profile customization with profile pictures
- Region-based team organization (EMEA, AMER, APAC)
- Structured MBO creation with type categorization
- Progress tracking (Not Started, In Progress, MVP, Finished)
- Approval workflow (Pending Approval, Approved, Rejected)
- Point allocation system for performance measurement
- Interactive dashboards with filtering capabilities
- Team progress visualization
- Sortable data tables for all MBO types
- Excel and CSV export functionality
- Quarter-based performance tracking
- Environment-based configuration
- No hardcoded credentials
- Password hashing with Werkzeug
- Role-based access control
- CSRF protection
- Secure headers with Flask-Talisman
- Comprehensive audit logging
- Adaptive design for all screen sizes
- Optimized table views for mobile devices
- Touch-friendly interface elements
- Horizontal scroll indicators for data tables
graph TD
A[Frontend] --> B[HTML/CSS/JavaScript]
A --> C[Flask Templates]
D[Backend] --> E[Python]
D --> F[Flask Framework]
G[Database] --> H[PostgreSQL]
I[Security] --> J[Flask-Login]
I --> K[Flask-WTF for CSRF]
I --> L[Werkzeug Security]
M[Deployment] --> N[Docker]
M --> O[Gunicorn]
- Frontend: HTML, CSS, JavaScript
- Backend: Python, Flask
- Database: PostgreSQL
- Authentication: Flask-Login
- Form Handling: Flask-WTF
- Security: Werkzeug, Flask-Talisman
- Deployment: Docker, Gunicorn
erDiagram
USER {
int id PK
string email
string username
string first_name
string last_name
string position
string role
string password_hash
string profile_picture
datetime created_at
string region
int manager_id FK
}
MBO {
int id PK
string title
string description
string mbo_type
string progress_status
string approval_status
int points
string optional_link
datetime created_at
int user_id FK
}
USER_SETTINGS {
int id PK
int user_id FK
string key
string value
datetime created_at
datetime updated_at
}
USER ||--o{ MBO : creates
USER ||--o{ USER : manages
USER ||--o{ USER_SETTINGS : has
- Python 3.9+
- PostgreSQL
- Docker (optional)
-
Clone the repository
git clone https://github.com/yourusername/snaplogic-mbo-tracker.git cd snaplogic-mbo-tracker
-
Create a virtual environment
python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate
-
Install dependencies:
pip install -r requirements.txt
-
Create a
.env
file based on.env.example
:cp .env.example .env
-
Edit the
.env
file and set your own values for all environment variables
-
Create a PostgreSQL database
-
Update the
DATABASE_URL
in your.env
file -
Initialize the database:
-
Install dependencies
pip install -r requirements.txt
-
Configure environment variables
cp .env.sample .env # Edit .env file with your configuration
-
Initialize the database
flask db upgrade
flask init-admin
flask run
gunicorn -w 4 "run:app"
app/
βββ __init__.py # Application factory
βββ models.py # Database models
βββ auth/ # Authentication blueprint
β βββ __init__.py
β βββ routes.py
βββ main/ # Main blueprint
β βββ __init__.py
β βββ routes.py
βββ mbo/ # MBO blueprint
β βββ __init__.py
β βββ routes.py
βββ static/ # Static files
β βββ css/
β βββ style.css
βββ templates/ # HTML templates
β βββ auth/
β βββ main/
β βββ mbo/
β βββ layout.html
β βββ auth_layout.html
βββ utils/ # Utility functions
βββ __init__.py
βββ date_utils.py
βββ security_utils.py
-
Create admin user
flask init-admin
-
Run the application
flask run
-
Clone the repository
git clone https://github.com/yourusername/snaplogic-mbo-tracker.git cd snaplogic-mbo-tracker
-
Configure environment variables
cp .env.sample .env # Edit .env file with your configuration
-
Build and run with Docker Compose
docker-compose up -d
-
Create admin user
docker-compose exec web flask init-admin
sequenceDiagram
participant Engineer
participant Manager
participant System
Engineer->>System: Create MBO
System->>Manager: Notification of pending MBO
Manager->>System: Review MBO
alt Approved
Manager->>System: Approve & assign points
System->>Engineer: Notification of approval
else Rejected
Manager->>System: Reject with feedback
System->>Engineer: Notification of rejection
Engineer->>System: Revise and resubmit
end
Engineer->>System: Update progress status
System->>Manager: Notification of status change
Manager->>System: Generate quarterly report
app/
βββ __init__.py # Application factory
βββ models.py # Database models
βββ config.py # Configuration settings
βββ helpers.py # Helper functions
βββ routes.py # Main routes
βββ static/ # Static files
β βββ css/
β β βββ style.css
β βββ img/
β βββ snaplogic_logo.png
βββ templates/ # HTML templates
β βββ dashboard.html
β βββ layout.html
β βββ login.html
β βββ mbo_form.html
β βββ ...
βββ utils/ # Utility functions
βββ __init__.py
βββ date_utils.py
βββ email_utils.py
βββ file_utils.py
βββ report_utils.py
βββ security_utils.py
- Environment Variables: All sensitive information is stored in environment variables, not in the code.
- Password Security: Passwords are hashed using Werkzeug's security functions.
- CSRF Protection: All forms are protected against Cross-Site Request Forgery.
- Secure Headers: HTTP security headers are set using Flask-Talisman.
- Audit Logging: Security events are logged for auditing purposes.
- Database Security: Parameterized queries prevent SQL injection.
- Input Validation: All user inputs are validated before processing.
- Session Management: Secure session handling with Flask-Login.
Contributions are not welcome, sorry...! This is an internal project :)
- SnapLogic for supporting the development of this tool
- The ROO AI tool for its excellent job as an AI assistent!
- My manager for letting me do this project
- Me as a contributor who have helped create this application