Below is the chart depicting estimated vs actual time for the development of this application
What took the most time? The least? Any surprises?
Throughout the project, the most time-consuming task proved to be setting up the database, followed closely by refactoring the codebase and addressing existing technical debt. Surprisingly, the implementation of the favorite book feature took the least amount of time. However, a notable surprise emerged during development when an error was discovered in the database reading script provided in the sample project. Specifically, a fixed character array of size 1024 caused unexpected issues, leading to additional troubleshooting and debugging efforts.
What did you learn about team or large project development? What will you start doing, keep doing, or stop doing next time?
Team or large project development often involves the time-consuming process of analyzing the strengths of team members, which can sometimes lead to delays in the development process. Moving forward, we recognize the importance of assigning tasks with realistic time expectations and deadlines to ensure the project stays on track. Additionally, we have begun implementing backup plans, recognizing their crucial role in managing unexpected delays and ensuring adequate time for team meetings to discuss project progress. To streamline our development process, we plan to stop allocating entire features to individual team members, as this often results in numerous merge conflicts and consumes significant time to resolve. Instead, we will focus on breaking down tasks into smaller, more manageable components, facilitating smoother collaboration and reducing the likelihood of conflicts arising.
What went right in the development process?
Several aspects of the development process went smoothly and contributed to the success of the project. Firstly, the creation of an architecture diagram proved to be highly beneficial, as it provided a clear overview of the system's structure and facilitated the seamless addition of additional functionality. Additionally, leveraging appropriate design patterns at specific instances significantly aided the development process across all three iterations, ensuring code maintainability and scalability. The utilization of design patterns learned in class, particularly those promoting low coupling, enabled the easy incorporation of system tests during the third iteration, enhancing the overall robustness and quality of the application.