The AIEP is an Industrial Experience Program organized by ACM PESUECC. Students are allowed to pitch project ideas, and work with other students in a collaborative and guided environment to build the project proposed, and in the process, learn industry-level skillsets.
This post is an attempt to chronicle my experiences as a project team leader, where I was responsible for leading a team of student developers to plan, design and implement a full-stack web application. Due to circumstances out of our control, we were forced to stop work on the project midway, but it was still and invaluable learning experience for myself, and I hope, for the rest of the team.
What was the initial/planned scope of the project?
The project aimed to build Luncher, a canteen management system that aimed to solve the problems faced by college canteens during the initial phases of COVID-19 recovery in India. It aimed to use online ordering to help prevent crowding at the canteen itself, and to empower canteen owners and stakeholders with detailed analytics and predictive capabiltites.
Planned Tech Stack
- Django (+ REST Framework)
- Docker, Docker-Compose
We also used Jira and Confluence to plan the work, and assign it to team members.
This project did not move past the planning and design phase, save for initial "hello-world"-style setup commits. To the credit of our lead designed and Front-End developer, we did have a full design template and guideline to work with, which was excellently executed.
However, tangible learning outcomes included the entire team being familiar with the basics of React and Django REST Framework, as well as knowing how to use Git and Github in a collaborative setting, as well as being more comfortable with being able to brainstorm to decide on features that need to be built.
The largest hurdle was finishing the planning phase - our app was arguably the most involved, on both a technical and a product front, so the majority of our time went into planning, wireframing, and designing both the product and the process we'd be following.
Getting Docker setup on windows systems was an extremely difficult task, with the only alternative being to setup WSL2, and then setting up Docker on that, which turned out to (ironically) be a much more involved undertaking.
It was extremely difficult to prevent scope creep during (and with regard to) the planning phase.
Due to issues out of our control, the timeline for the project was abruptly shortened, which did manage to destroy whatever remaining momentum the team had in terms of both patience and motivation.
The AIEP has been, by far, the most involved project i've worked on.
Finding the critical path - which, in this case, was getting everyone familiar with the technologies required, and most importantly, getting developer environments setup with minimal friction - and optimizing to minimize how much the rest of the project gets impacted by this is critical to ensuring large projects get finished on time.
Ensuring everyone on the team is on the same footing, especially in a technical sense, is essential to easy collaboration. Sure, you can definitely take on the AIEP while you're still learning, but unless the team and the timelines make room for you to comfortably learn, it's going to either be extremely hectic, or will kill the progress of the team.
Letting team members take charge of smaller divisions / features of the project helps immensely in building a sense of ownership and a sense of responsibility toward project completion. Future AIEP leads would be wise to accept and embrace that they won't be able to do everything on the project, save for set goals and implement, at max, one major feature or stack (frontend, backend, cloud, etc) for the project, and let team members take ownership of as much of the project as possible.
Getting developer environments and version control routines setup as early as possible is the best bet to preventing setup fatigue and increasing developer velocity. This means agreeing on the tech stack as early as possible, and building around it to encourage as much learning as possible. This would require the AIEP Lead to manage both technical and product expectations with the stack in mind, and quickly eliminating difficult-to-deliver features to ensure that as much time as possible gets spent in feature development, as opposed to fighting with the framework.