Building a LMS to remove hurdles for new coders in university courses

Company

My Contributions

User Research
Interaction Design
UI Prototype (Invision)
Visual Design (Figma)
User Testing

Role

Product Designer

Team

3 Team Members

Duration

10 Weeks

Background

Instructure is an educational technology company whose primary products are Learning Management System used by universities and schools across the country. They are in development of a LMS platform for coders and enrolled our team to work on this space.
We partnered with Instructure to deliver a LMS to support code learning.

What was my role?

As a Product Designer (MS HCI Student), my job was to work with teammates from the phase of defining a problem to the evaluation of a prototype with the users. For this project, I did the entire visual design, prototyping and conducted user testing.

The Challenge

Existing LMS platform does not integrate effectively for coding or Programing related courses as platform does not support coding workflows.
Build a platform for university setting to assist students goals to learn coding as well as to track the students progress in coding related courses.

The Solution

A coding platform called Codedu., that is designed for students to replicate classroom setting. This Platform includes an inbuilt code editor with compiler built in. This platform also encourages collaboration between students learning to code and also integrates easy error checking for the instructors.

The Challenge

A coding platform called Codedu., that is designed for students to replicate classroom setting. This Platform encourages collaboration between students learning to code and also integrates easy error checking for the instructors.

The Solution

A coding platform called Codedu., that is designed for students to replicate classroom setting. This Platform encourages collaboration between students learning to code and also integrates easy error checking for the instructors.

Key Screens

Design Process

Project Background

As a group of Research assistants and teaching assistants for the university, we heard from multiple students and noticed students facing difficulties learning to write codes.
We began our research by studying the existing teaching methodologies of learning a programming language or a skill. As a result, we explored various research papers, articles, and journals regarding programming education.
9.8%
Of undergraduate students in computer science or programming majors drop-out before finishing their course.

What was my role?

As a Product Designer (MS HCI Student), my job was to work with teammates from the phase of defining a problem to the evaluation of a prototype with the users. For this project, I did the entire visual design, prototyping and conducted user testing.

Understanding the problem

We began our research by studying the existing teaching methodologies of learning a programming language or a skill. As a result, we explored various research papers, articles, and journals regarding programming education. Considering the project's time and scope, we decided to focus only on undergraduate students in a classroom setting.

We learned that:
 - Our research found that about 9.8%of undergraduate students in computer science or programming majors drop-out before finishing their course.
- We learned that many online tutorials help understand the basics but do not provide the practical knowledge required to code a solution.
- Resources such as Stack overflow, Github, etc. are not beginner-friendly. As a result, we conducted user research that helps newcomers learn a programming language effectively.

Insights from Interviews and observations

To understand more about the teaching techniques, areas of improvement in undergraduate programming education, we interviewed 12 students, two professors, and a Teaching Assistant. We tried to understand the fundamental problems of a programming class and why some students do not score high enough in the assignments to pass the course.

Some of the insights and comments from the interviewees are listed below.

Peer-to-peerprogramming
"I have trouble translating the theory and class exercises we learn to actual code. I can do better if I have some help."
"My friend helps me with the assignments all the time. He usually points me into the direction I should be going."
Overall performance report
"I want to see the students’ performance to the rubric level. This can help me create a proper plan of action."
"Having a higher level view of the grades of overall class can help me understand where they need my help the most."
Sharing code with other students
"If I am not with my friend, I send him my entire code and he runs it in his system to see what’s wrong. This takes time."
"I usually wait until TA hours to get are view. That is the only time I can get someone to take a look at my assignment."
Code history
"If I can see the all the steps the student has taken in writing that piece of code, I can understand where they had trouble."
"Many students don’t understand the rubric. Every time I release grades, they come and ask me where they lost points."
Alternatecode
"In the beginning, students usually do not write efficient code. They need practice and help to get better at coding."
"I always provide solution code after every assignment. Using that, students understand an alternate way of solving the problem."

Analysis and Insights

Using the Affinity Diagramming technique, we organized all the information collected from interviews and literature review to create patterns and insights as below

  • Peer-to-peer collaboration among students can significantly smoothen the learning curve of a programming language.
  • Usually, students like to help each other in finishing assignments, rather than going to professor or Teaching Assistant.
  • Students have difficulty in transforming their theoretical knowledge to practical solution.
  • Each student is unique and the problems they face are also unique.
  • Professors sometimes have difficulty in understanding the exact problem faced by a student to offer relevant help.
  • Professors sometimes have difficulty in understanding the exact problem faced by a student to offer relevant help. Feedback on the assignments are usually generic to the whole assignment, rather than specific to a piece of code.
  • In order to become proficient in a programming concept or language, the student need to know different ways of solving a particular problem.
  • Instructors need to know the performance of students to the rubric level to provide proper support to the students.

Along with the analysis, we also performed a secondary research on our problem statement. We tried to understand what solutions are present in the market, which solve programming students' problems. We went through some research papers and articles to gather data that we felt would be relevant to our project. One of the research articles which played a crucial role in our project is here.

User Personas

Based on the user research we conducted, we created three personas we thought would represent our target users as shown below.

Based on insights to arrive at our problem statement we created the following:

Problem Statement

How might we mitigate programing learning difficulties among students with the help of computing technologies?

Ideation

Using the personas and the insights we derived, we brainstormed numerous ideas that we thought would address our problem space. We then started filtering them based on technical, economic, and social feasibility. We combined the best part of some ideas so that they serve the purpose of helping students and instructors in a programming class. We tested and analyzed many ideas to decide on the final design solution.

Final Design Direction

Our final design solution was to build a code editor for students and instructors of an undergraduate programming class. This editor allow students to write and share their code with other students who are the reviewers. The reviewers then comment on the student's code with the help of their code history. When students share their coding assignments with instructors, they receive grades and comments in the editor.

This code editor was incorporated as an extension of Canvas, which is a Learning Management System (LMS) that most of the universities in the United States use. Since Canvas provides APIs to build third-party extensions, we were sure about our design solution's feasibility.

Feasibility Testing

After brainstorming and deciding on the final idea, we were skeptical of whether implementing code history can help reviewers understand where a student has difficulty coding. So, we put our JavaScript coding skills into use and created a small mockup. I tested it with six students and found that code history can help reviewers provide proper guidance and comments. Below is the code we wrote for the mock up.

function debounce(cb, interval, immediate) {
   var timeout;
   return function() {
       var context = this, args = arguments;
       var later = function() {
       timeout = null;
       if (!immediate) cb.apply(context, args);
       };          
       var callNow = immediate && !timeout;
       clearTimeout(timeout);
       timeout = setTimeout(later, interval);
       if (callNow) cb.apply(context, args);
   };
};

function keyPressCallback() {
   var target = document.getElementById('target');
   var input = document.getElementById('input');
   var para = document.createElement("P");              
   para.innerHTML = input.value;
   target.appendChild(para);    
}

document.getElementById('input').onkeypress = debounce(keyPressCallback, 500);

Storyboarding

After the feasibility testing, we created storyboards to get a better idea of the solution and to fill any gaps we find. They are as below

Paper Prototypes

After storyboarding, we started sketching our design solution on paper. After multiple iterations the prototypes are as below.

Paper prototypePaper prototypePaper prototypePaper prototypePaper prototypePaper prototypePaper prototypePaper prototypePaper prototypePaper prototypePaper prototype

Initial Usability Evaluation

After creating paper prototypes, we began evaluation right away. We used techniques such as Cognitive Walkthrough and Heuristic Analysis to evaluate the usability of our paper prototype. Based on the results of the evaluation, we made changes and iterated them. Most of the changes we made are of changing the layout of the editor and not the functionality of them.

High-Fidelity Prototype

We used Figma for designing high-fidelity screens and also for prototyping. In this stage, there were several iterations of the screens based on the aesthetics and usability. Below are final screens we designed.

Usability Testing & Evaluation

After creating high-fidelity prototypes, we began working on usability testing. Six users and three user experience designers participated in our usability testing and evaluation sessions. We created three tasks with the editor and performed think-aloud usability evaluations with the users. Later, we asked the participants to fill a post-task questionnaire to understand their experience.

From Usability testing we learned the followingthe following:

  1. Student participants who have used the product felt that the editor can definitely help them in learning programming skills easily.
  2. Teaching Assistants liked the idea of selecting a code block and grading it using the rubric. They felt that it would help students learn about their difficulties.
  3. Some students expressed concern about using code history. They think it is difficult to understand and analyze the code as they are also beginners.
  4. UX experts felt that the design can address the problem we are trying to solve to some extent. However, they expressed concern that it takes a lot of training to use the editor.

Challenges and Key Takeaways

Working on this project has helped me grow as a UX Researcher and Designer. I learned a lot of things working on this project. I learned that being a student myself having past programming experience, I should not let my experience influence the design. Especially, during the ideation phase during our 1st round of brainstorming, I noticed a similar pattern in my ideas. With the support of my team I was able to realize the similarities and continue to arrive at our solution. I learned that testing the design throughout the process can significantly cut down on unforeseen issues, especially cutting costs and time.

Prototype

Check out the interactive prototype of our design below
Click on the image below to open Figma and explore our design
Codedu. screen