This checklist will provide you with a clear roadmap on what skills you should acquire throughout the course. Add to this Checklist to customize your own Personal Learning Plan.
# Skills Checklist for Students
## Distributed Systems
- [ ] Understanding the basics and principles of distributed systems.
- [ ] Grasping CAP theorem and its implications.
- [ ] Implementing fault tolerance and redundancy.
- [ ] Understanding data consistency models.
- [ ] Using Go's concurrency primitives for distributed tasks.
## UML Driven Design
- [ ] Understanding different UML diagrams (e.g., class, sequence, activity).
- [ ] Translating requirements into UML diagrams.
- [ ] Using UML as a communication tool between developers and stakeholders.
- [ ] Iterating designs based on feedback loops.
## Enterprise Modelling
- [ ] Comprehending the importance of enterprise architecture.
- [ ] Designing systems with scalability and extensibility in mind.
- [ ] Integrating various enterprise components and third-party services.
- [ ] Evaluating trade-offs in design decisions at an enterprise level.
- [ ] Creating, labeling, and prioritizing issues.
- [ ] Assigning issues to milestones or projects.
- [ ] Collaborative problem solving using issue comments.
- [ ] Referencing commits and pull requests in issues.
- [ ] Setting up continuous integration (CI) with GitHub Actions.
- [ ] Automating testing, building, and deployment processes.
- [ ] Understanding workflows and job dependencies.
- [ ] Utilizing caching and matrix builds for efficient CI.
## Project Management
- [ ] Defining project scope, objectives, and stakeholders.
- [ ] Creating and maintaining a project timeline.
- [ ] Resource allocation and management.
- [ ] Risk assessment and mitigation strategies.
- [ ] Tracking project progress and making necessary adjustments.
## Agile and Scrum Operations Management
- [ ] Understanding the Agile manifesto and principles.
- [ ] Implementing Scrum roles: Product Owner, Scrum Master, Development Team.
- [ ] Planning and conducting Sprint Planning, Daily Standup, Sprint Review, and Sprint Retrospective.
- [ ] Managing the product backlog and prioritizing user stories.
- [ ] Estimating tasks using techniques like story points.
- [ ] Adopting iterative development and delivering incremental value.
By the end of the course, students should aim to check off all the boxes, ensuring a well-rounded grasp of software design, development, and management in an enterprise context.
Given Go's strengths in building performant web servers, distributed systems, and its suitability for cloud platforms, let's devise an enterprise modeling project that harnesses these attributes.
Enterprise Project: Company Resource Management System (CRMS)
CRMS will be a system that aids enterprises in managing and allocating resources (human resources, equipment, meeting rooms, etc.) efficiently across various departments and projects.
User Authentication and Authorization: Implement JWT or OAuth-based authentication to manage user sessions and roles (Admin, Manager, Project Lead, Employee). Resource Cataloging: List down all resources, categorize them, provide descriptions, status (available, allocated, under-maintenance), etc. Booking and Allocation: Allow resources to be booked or allocated to specific projects or individuals. Search and Filter: Search for resources based on different criteria and filters. Notifications and Alerts: Send notifications when a resource is allocated, released, or requires maintenance. Reports Generation: Generate detailed reports on resource usage, downtimes, peak usage times, etc. API Integration: Design the system in a microservices architecture. Create APIs for different modules of the application to communicate.
Use the net/http package to design a RESTful API. Integrate a database. You can use PostgreSQL with the pq driver for Go. Implement middleware for logging, error handling, etc. using libraries like gorilla/mux for routing and middleware support. Utilize Go’s concurrency features to handle multiple booking or allocation requests. While Go isn’t traditionally used for frontend, for the purpose of this project and keeping things within the Go ecosystem, use a templating engine like html/template to render views. Alternatively, you could use a lightweight frontend framework or library and have it interact with your Go backend. Utilize Docker to containerize your application. Go applications can be compiled to a single binary which makes them ideal for lightweight containers. Consider deploying on cloud platforms that support Go, like Google Cloud's App Engine or Kubernetes for scalability.
Weeks 1-2: Requirements Gathering and Design Understand the problem statement. Design the system architecture and decide on the database schema, API endpoints, etc. Weeks 3-4: Setting up the Basic Backend Setup the Go environment. Design the initial routes, database connections, and basic CRUD operations. Weeks 5-6: Frontend and Integration Begin with frontend templates. Implement basic integration with the backend. Weeks 7-8: Advanced Features Implement features like search, filters, and reports. Add notification support. Weeks 9-10: Refinement and Testing Test different modules of the application. Handle potential bugs and scalability issues. Weeks 11-12: Deployment and Optimization Containerize the application. Deploy on a chosen platform and test real-time performance. Weeks 13-14: Review and Presentation Groups present their versions of the CRMS. Discussion on challenges faced, unique features implemented, and learnings.
This project will not only teach you Go programming and also provide insights into designing, developing, and deploying an enterprise-level application.