The UP team, with family and friends, on a hike in Muir Woods
This winter I had the opportunity to be a software engineering intern on the University Product team, UP for short, here at Coursera. And if I could use one word to describe the last four months, it would have to be “incredible.”
The UP team works on the partner facing side of Coursera—a part of the site not accessible to learners. Despite that, the work we get to do is just as impactful, if not more, as we build tools that help instructors bring world class content on to Coursera. Additionally, through data, we provide instructors the ability to get a glimpse at how their course is doing and the ability to use that same data to identify and make improvements to their content. These important responsibilities make UP an exciting place to be!
When I started my internship, the first thing I noticed was that Coursera provided me with many opportunities to learn. Apart from stellar mentorship, I found myself learning a lot through our weekly in-house technical talks and, believe it or not, code reviewing others’ changes. Performing these reviews improved my ability to reason about and understand different approaches in code. Ultimately, it was just really empowering to know that even as an intern, my discretion and input on technical design was valued by others.
Since Coursera treats its interns no differently than any other employee, I had the opportunity to work on projects that were both important and impactful.
Lecture and Readings Authoring Tools
In the first half of my internship, my team was focused on delivering a new authoring experience for Coursera’s on-demand courses. These courses typically consist of many different “learning units” such as quizzes, readings, and lectures—all of which, at the time, were not editable on the platform by instructors. On our quest to help solve that problem, I had the responsibility of engineering the front end for the readings and lecture authoring tools. For the lecture tool, this entailed providing instructors with the ability to upload a video and to edit the lecture’s title. As for the readings tool, this meant providing instructors with a rich text editor to help them make seamless edits.
The lecture authoring tool
The readings authoring tool
After a team wide effort, our new suite of authoring tools were finally unveiled at the recent Coursera Partners Conference this past March and were received very well by our instructors. Having been live for just the past two months, we have already seen these tools being used quite a bit across our on-demand courses.
In the second half of my internship, I built the front end of the announcements tool—a tool that lets instructors send messages to the learners in their courses. Instructors can use this tool to target different groups of learners in their course based on when they were last active or whether or not they completed the course.
This was a highly requested feature, and it was very motivating to know that I was building something that instructors were eager to use. In fact, our very first announcement was sent just a few hours after we launched the feature. Since then, we’ve seen instructors steadily sending announcements—resulting in hundreds of thousands of emails having been sent to learners!
Make-a-Thon: Video Annotations
I also got to participate in Coursera’s Make-a-Thon. This was an event held over the span of two days where everyone in the company got the opportunity to work on whatever they liked. I decided to take this time to prototype video annotations. You can think of them as colored text boxes that can be inserted into lecture videos at specific points in time. The idea behind this was to make it easy for instructors to amend their videos should they need to add clarification or fix a typo. Without annotations, making these improvements would often mean having to re-create the video, which is usually a non-trivial process.
We’re still exploring this idea further, so you won’t be seeing annotations on the platform just yet. We want to make sure that they look great and work well for all learners, whether they are learning through the browser or through our Android or iOS apps.
React & Flux
All of these projects were built with React and Flux—a library and architecture that I had never used before my internship. With help from my mentor Ankit, I was able to get up to speed in no time. Before I knew it, I was opening new code revisions, getting them reviewed, and deploying them to production.
Choosing to build our front end interface with React meant that we would be able to leverage the reusable nature of React’s views, also known as components. Luckily for myself and others, quite a few of our front end components were written with modularity and ease of reuse in mind. This let me move fast when working on my projects and ultimately helped me pick up React quickly since I had many working component examples to look through.
Behind the user interface, we used a Flux architecture to power the data flow in our application. Because Flux is an architecture, and not a framework, writing Flux code involves implementing a lot of functionality explicitly. This sometimes means that your code can get a little bit verbose. However, as someone diving into an unfamiliar codebase, I found that our use of Flux helped me understand the application behavior quite easily. There was no functionality hidden behind a framework-specific function, meaning you could simply read your application’s code to understand exactly what it does.
Looking back at it all, I feel like I’ve learned so much over the past four months. Everyone that I’ve gotten the privilege to interact with at Coursera has been nothing short of amazing. For me, interning at Coursera has been more than just a chance to grow technically. It has been an opportunity to learn from some of the smartest people in the world and to experience how different teams with different talents can come together to execute towards the incredible mission of providing “universal access to the world’s best education.” As my internship comes to an end, I would really like to thank all of my amazing co-workers on the UP team, my mentor Ankit, my manager Roshan, and, of course, all of the other interns for going on this journey with me. This was an incredible experience—one that I definitely will not forget.