The Programming Foundation

Assist The programming Foundation in discovering the behavior and preferences of their students and design the website.


Product Design Lead, User Research Lead


Notion, Mural


Desktop, Tablet, mobile


Jan – Apr 2021

The Programming Foundation's Purpose

The Programming Foundation commits to spreading awareness and education on computer programming and operating systems so that everyone is involved, and no one is left behind while the world advances. The goal is for the widespread adoption of a new and enhanced curriculum on computer programming and operating systems and for this knowledge to become mainstream in the general population. 

Target audience:

  • students from low-income families;
  • people with disabilities;
  • everybody, regardless of their age or educational background.

My role

I was the Product Design Lead at The programming foundation, we were in a team of 6 designers. I was fortunate enough to work with great professionals, including some PhD researchers, which assisted me in leading some phases of the research process. During this project, I led the team and planned every step of our research. I was present in every step (end-to-end), from being a notetaker to conducting brainstorming sessions as well as interviews.


User Research plan

What were the research objectives?

  • Find out students preferences and studying methods;
  • Understand students frustrations during their studies;
  • Understand how would be learning through an online platform;
  • Understand how is the process of a new student;
  • Get to know how was the learning journey of computer programming professionals. 


For this project, we decided on a few different methods to fit the timeline:

  • Survey;
  • Remote user interview through video calls;
  • The usability test will be proceeded after we release the product.

Research Analysis Strategy

Research Questions Analysis strategy
Who are we designing for?
Empathy maps, personas
What are the pain points?
Affinity maps, empathy maps, personas,
What feature sets are most important?
Competitive analysis, Information architecture
How do we promote ease of use?
Heuristic analysis, user flows, information architecture

Accessibility research

The Programming Foundation’s goal is to build a smarter us; therefore, we don’t want to leave anyone behind. We want to make our platform accessible to all without requiring anyone to use dedicated hardware.

For accessibility, it was important to define some key guidelines to help designing an accessible website:

1. Content and Structure

  • Clear layout and design;
  • Accessible labels for controls;
  • Use of headings;
  • Notification and feedback

2. Layout

  • Reading without wrapping;
  • Large links, buttons, and controls;

3. Hierarchy

  • Using the web without a mouse;

4. Color and contrast

  • Color contrast;
  • Make sure it’s obvious where the focus is;

5. Media

  • Accessible audio or video elements;
  • Moving, flashing, or blinking content;
  • Voice recognition;
  • Text to speech;
  • Alternate text for images.

You can read more about our accessibility research here.

Desk research

The purpose of the desk research was to find out the current scenario of programming learners and any important data.

According to a survey from

  • Most people are learning to code because they desire a better career, followed by increased flexibility in their day-to-day;
  • Their major struggle when learning is finding time to do so, seconded by maintaining motivation;
  • Most people said they prefer online courses as their primary education method.

Learners thoughts

Due to information overload, learners face difficulty in how they can start programming and which path they should take. The most common question that students ask are:

“I Want to Learn Programming but I don’t know where to Start”
“Which programming language should I learn if I’m new?”
“Which programming language is most in-demand for jobs?”

Why is programming so hard?

There’s this stereotype over the internet concerning programming saying that it’s so tough. According to articles and people’s reports, we can list the following difficulties that learners face when it comes to programming:

  1. Finding the “right” amount of time to code every day;
  2. Finding the balance between “not making a good enough progress” and “getting burnt out” (get frustrated and give up);
  3. Keep yourself motivated;
  4. Lack of practice;
  5. Remembering the codes.

Quantitative Data


👪There were 27 responses to the survey

Our survey consisted of a total of 16 questions. Our objective was to explore the ways in which people learn to code more efficiently, the problems they co-front, and the reasons they choose to learn code.

  • Most of our respondents are students (74.1%);
  • All of our respondents have an interest in learning programming, with leading reasons behind it career improvement (78.6%), finding a job (53.6%), or leisure time (53.6%);
  • Concerning the difficulties surrounding learning code, it seems that dealing with programming errors (67.9%) is a prevalent difficulty, while remembering the syntax (46.4%) follows with a significant percentage. Some of our respondents reported how they have difficulty finding the time to study (39.3%) or keep motivated (39.3%);
  • All respondents prefer learning programming on a computer (100%);
  • Our respondents are mostly interested in learning Python (67.9%), Java Script (60.7%), C++ (60.7%), and Java (57.1%);
  • Concerning learning methods, the majority of our participants appears to be learning the best by interacting with platforms and by watching tutorials (89.3%). A significant percentage of 75% appears to be finding useful hands-on experiences, while smaller percentages of 42.9% and 32.1% appear to rely on reading instructions and the use of drag and drop tools respectively;
  • Our participants noted how they would want more exercises, participation in discussion forums, increase in personal experience, and interactivity, to be among the top things they would improve in the process of learning code. Interestingly enough, one individual cited how they would find useful the explanation of code instead of memorization, while another stressed how they would learn easier through the gamification of code.

Compiling our data has resulted in understanding the main characteristics of people desiring to learn code. The majority are young male students in their early twenties, who try learning code for pursuing a better career. Such careers are mostly in the tech field, such as game programming, UX, and e-commerce. The average of such users have difficulty dealing with programming errors, while they prefer learning on a computer interface. They spend between 5 and 10 hours per week learning code, while they are mostly interested in learning Python, Javascript, Java and C++. Similarly, they are interested in learning Linux and Unix Operating Systems. Finally, the majority of learners learn more effectively through hands-on experiences, along with watching tutorials and reading instructions. They would also prefer to engage with even more video tutorials and hands-on projects throughout their learning journey.

Qualitative Data

User interview

At this point of the research phase we target 3 main audiences of students:

  • Who hasn’t started it yet – “Non-technical”;
  • Who is studying;
  • Who has completed their studies;

For our user interview, we wanted to get to know all these audiences and understand how different their experience is. We also thought it necessary to interview professionals to understand their study journey, their obstacles and, most importantly, how they overcame them.

Based on that we organized a brainstorming session with designers and some computer programming professionals to create the interview questions. The interview script was based on questions about learning methods, learning platforms, computer languages, operating systems, difficulties while learning, and outcomes.

👪 We interviewed 5 people from different countries through video calls; they were non-students, students, and professionals.

The interviews were very enlightening; however, we faced a good but tiring issue: so many insights.

Data Analysis

Thematic Analysis

Due to the data overload, we decided to proceed with a data analysis technique called Thematic Analysis. These were the first steps:

  1. Transcript the interviews;
  2. Review the transcripts and highlight the pain points and insights;
  3. Move the highlights and pain points to a whiteboard (we used Mural);
  4. Group them according to similarities and name these groups.

These resulted in an Affinity Map.

While reviewing the notes in the affinity map, we observed that people interested in learning programming and beginners share similar pain points. The more advanced learners require additional support. So for the Empathy Map, we decided to move on with two groups:

  • Entry-level/Beginner;
  • Intermediate/Advanced.

After that, we got to the Key insights. We analyzed the problems, discovered their insights, and finally turned them into opportunities.

Persona and User journey

Although we mapped two types of personas, due to the current situation of the website, which we can only offer entry-level classes (there’s the need of writing more advanced lessons and this process might take a couple of months), we decided as the first step to focus on only one persona that we can actually offer content. And of course, later, once this product is implemented and we have advanced classes, we can work on the second persona.

Pain points priotization

We decided to prioritize the pain points for the next steps according to what is possible to be done now with our current scenario. We identified that we’d need a content writer for solving many pain points, which would take us a couple of months to solve. Things that either might take more time or weren’t as important were moved to categories called next and future.

Overall themes and opportunities

1- Understand how the syntax works and its structure is the key;

Sometimes the reason for syntax errors can be a simple “,” (comma). As computer programming professionals have reported, syntax comprehension is an important and essential skill that every professional must know.

2- Each student learns differently;

Each student has his/her own preference studying methods, it could be learning through written instructions, video lessons, learn by doing, etc. Studies have shown that we have 3 types of memory: visual, auditory, and kinesthetic; for this reason and such it’s important to offer students the possibility of picking their learning style and learning in their own peace.

3- New students need guidance.

New students are often lost and in need of guidance. They base their assumptions on others’ opinions and internet search results. Showing them which specific paths they can perform to achieve their goals would be a differential.

Next steps and recommendations

1- Work based on the priorities and figure out a plan for the future priorities;

2- Prototype;

3- Testing: usability test,  A/B testing, user observation, and interviews;

4- Implement: feedback loops, learning analytics.

Thank you for scrolling


Other projects