As a fifth-year Computer Science student at UofT, I've worked on plenty of projects, from simple command-line Python games in first year to complex full-stack web apps in my fourth. But none have been as comprehensive or challenging as CSC491, our Capstone Design Project. This course feels like the culmination of everything we’ve learned so far: pick a meaningful problem, design and build a viable solution, and (hopefully) come away with something impressive.
My team chose to develop Pera, an AI-driven language-learning platform aimed at improving users' pronunciation and conversational fluency. On paper, our idea to combine speech recognition with generative AI models seemed straightforward. However, we quickly realized the practical challenges as we moved into actual implementation.
Here are my key takeaways and learnings (so far) that I observed while building Pera with my team.
Defining the Scope Clearly
Really early on in the business development and research stage of our idea, we considered building an extensive ML pipeline, training our own speech-to-text models, customizing our own LLMs, and essentially managing the full AI stack ourselves. However, as we dove deeper into planning, the scope became pretty clear. Training robust, accurate models requires vast amounts of labelled data, significant computational resources, and considerable time, which we didn't have within the constraints of the course's timeline. (We are planning to go in the self-sustaining infrastructure direction once our startup gains a bit more traction and the logic matures in the next 6 months).
Recognizing these, we strategically pivoted and instead of building everything from scratch, we chose to leverage existing APIs such as Azure’s Pronunciation Assessment service and our partner, Cohere’s, large language models. This made sense from an implementation perspective as it allows us to validate our core functionalities quickly, avoiding unnecessary complexity and accelerating development.
Key takeaway: Clearly define project scope and constraints early. Leveraging existing technologies can drastically improve development speed and reduce complexity.
Effective Team Communication and Collaboration
Perhaps the most impactful learning from CSC491 so far has been the importance of consistent and transparent team communication. As a team, we regularly use platforms like Slack, Discord, and GitHub pull request reviews, coupled with weekly meetings to ensure alignment, discuss challenges openly, and collaboratively find solutions.
This consistent communication has allowed us to rapidly address integration challenges, refine our product, and support each other through technical hurdles. Working as a cohesive team has substantially accelerated our debugging process and improved the quality of our overall solution.
Key takeaway: Regular, transparent communication within the team accelerates development, improves problem-solving efficiency, and strengthens team dynamics
User Feedback and Iterative Development
Another major aspect we've started to recently embrace as a group is the value of iterative development driven by consistent user feedback, something I previously learned in CSC318. Even though we have not yet had a chance to fully incorporate this aspect because our product is still in the very early stages, it is still something we are planning on actively and continuously incorporating once the initial implementation of our core use cases is developed, to gauge how users perceive the features, and how we can make it more intuitive.
Key takeaway: Continuous integration of user feedback into development cycles will ensure your product remains relevant, engaging, and valuable to your target audience.
What’s Next
Working on the project has been a great learning experience, and working with other passionate people on a shared problem has been a really fun and engaging experience.
For future students enrolling in CSC491, my advice would be to select a project that genuinely excites you, clearly define and respect project scope and constraints, prioritize user experience from the outset, and invest heavily in effective team communication. CSC491 is arguably one of the most valuable learning experiences you'll encounter during your undergraduate study since it blends together the various key elements of CS that we've learned through the years.
Top comments (0)