Modifying expectation

A half of 3-month internship has gone, and now it’s time to have a look at the initial plan. When I sent the draft version of internship plan to my mentor before submitting the application, he told me that plan was expected to change. I agreed with it, especially when I had a little understanding about the project when I started making this plan. In fact, after a while, I realized that my initial plan was pretty bigger than what I could handle in 3 months, and it also didn’t have enough “back-up” time for some unexpected issues.

Last week, my mentor and I talked to decide the plan for the rest of the internship. My mentor made it through three steps: brain-storming, consulting and making decision. First, he invited an expert who had deep understanding of my project to discuss with us, and wrote down everything we should do within the project’s scope. Then, he set up meetings with some experts to consult potential solutions for some issues we wanted to solve. Finally, we talked with each other to decide which tasks would be done in the internship (he also separated them into 2 categories: “need to be finished” and “if time permits”). These steps were taken for the whole project, not only for my internship plan. However, it was very helpful for me to understand the overall picture before choosing suitable tasks.

Now the planning is more realistic and easy to track. I will keep tracking and see how things go 🙂

Brief introduction about my Outreachy project – Active Data Recipe

When I talked with my friends about my internship, they often asked me “What is Outreachy?” and “What do you do in that internship?”. Well, the first question could be easily answer (you can find it in my first blog), but I found myself stymied with the second. At the beginning, I started with “I guess you know Firefox browser”, then “Well, I work for Mozilla, who owns that browser”, and that’s it, lol. But now, after a third of internship period, I guess I can have better answer!

  1. Active Data Recipe in a nutshell

Imagine that a company (in this case, Mozilla) has some products and they have to test them. There are many people, many teams working with this testing duty. One of these teams is CIA. You must know them, they are always mentioned in Hollywood movies! Just kidding, they are not Hollywood-CIA, they are Continuous Integration Automation team. According to their introduction on Mozilla Wiki, they “work on a wide range of projects around Mozilla’s core continuous integration (CI) pipeline”, and they focus on some areas which include:

Performance: developing perf harnesses and standing up new benchmarks/measurements

Testing: developing test harnesses and improving test stability

Data: collecting CI related data, creating metrics and dashboarding

Configuration: developing taskgraph and modifying which tasks run in CI

Tools: developing the tools that Firefox core developers use to interact with CI

Plus many other projects

Let’s talk about “Data: collecting CI related data, creating metrics and dashboarding”. The collected data will be saved in some data warehouses. One of them is Active Data.

ActiveData is a collection of about 8 billion records (Feb 2016) covering unit tests, Buildbot jobs, performance data, and mercurial. This collection is publicly available, and can be queried directly, similar to any database.

ActiveData is built on top of ElasticSearch, a fast, distributed, redundant document store. ActiveData provides the benefits of familiar and succinct SQL by translating SQL-like queries to ElasticSearch queries.

What if you want to get information from Active Data without knowing about its structure? Here comes the Active Data Recipes. There are two layers in this structure: the queries and the recipes. The Active Data Query extracts information from Active Data, the Active Data Recipe will run one or more queries and returns the output (which sometimes be post-processed). There are some ready-to-use queries and recipes, but users can write queries and recipes themselves to get the answers of their specific questions.

Each recipe should try to answer a single question.

2. How do I play with Active Data Recipe

The name of my project is “Improve usefulness and usability of Mozilla’s data warehouse front-end”, which mainly works with ADR. My duty includes:

  • Back-end: improve the ADR structure, so that writing recipe becomes easier and clearer
  • Front-end: create a ADR webpage so that user can run existed recipes, or write new recipes
  • Documentation and testing

3. Summary

In summary, Mozilla test-related information are collected and stored in some data warehouses included Active Data. To help user easily extract information from Active Data, they make Active Data Recipe. Making it becomes more user-friendly by re-structuring it and making a web-app for running and creating recipes is major tasks of my internship.

Say hello to struggles

“Everybody Struggles” topic, which is suggested by Outreachy organizers, is a very practical and useful theme to discuss, in my opinion. I don’t know whether the problems described in this blog are considered “struggles”, but I will list some difficulties I faced and how I got out of them. The first problem relates to a technical issue, but I also list some other problems that are non-technical in the last paragraph. Even I passed by some and still struggle with others, I believe that it is very common and I always can learn from it.

My current project is working with Active Data Recipe. Last week, I faced a problem while working with the issue “Define recipe queries and arguments in a structured manner“. My mentor and I had worked during some weeks to develop a new design which helps writing recipes be easier and clearer. At that time, this new design was implemented successfully in one recipe, and my task was to apply it to other recipes. To be honest, at the beginning I thought it wouldn’t be a difficult task, but then it turned out that it was.

Firstly, I realized that I didn’t understand the “meaning” of each recipe, so I didn’t know what should be modified, what should be kept. So I debug every lines of some recipes, which took too much time. But after some recipes, I realized (again) that I didn’t have to understand the “meaning” of each recipe. If I understand the pattern, I can modify the recipes without “understand” them.

Then, another problem is this design seemed not work with some recipes. I was a little disappointed when I found out that, even I knew that this design may need to be updated several times. I thought this way and that way, tried my best to see how I could make it works with not so much modification. I also took time, too. Finally, I couldn’t, so I decided to ask for help from my mentor, as you can see in this PR. I described the problem, and said that I have no solution for it. And, after reading his comments, talking on IRC, I saw the problem in a new way, and by some simple modifications, I could apply the new design for these recipes. Of course it was not perfect at that time, but I think that it was good enough, and didn’t require too many changes in the design. I thought I should asked him sooner, however I encouraged myself that getting stuck helps me to understand more about these recipes.

Now, I want to tell you about another non-technical problem. I am not a native English speaker and afraid that using wrong words may offend other people. This is also the first time I work in an international software team, so I am also not sure about what to talk and what not to talk, even everybody is friendly (my manager also reminds me that they are all “human beings, not robots” lol. I guess that feeling came to me because of my previous working experience. I have worked in an international cooperation group in a government organization for more than 2 years. Most discussions were done through emails and “delegation meetings”, most documents were checked multiple time by some people to reduce confusion & ensure correction, so it was kind of more official and formal communication than software industry environment. Therefore, at first, I often asked my mentor about what should I say in group, and he often helped me to be more confident and relax. I feel more comfortable chatting in IRC group channel now and think this problem will be solved after a while, when I have more experience and “feeling” about company culture.

And this is the story of my mentor: “I struggle with focus, I find it difficult to work on the same thing for long periods of time. My mind tends to drift and lose interest if the project takes too long to finish, probably around a month.” After talking with him, I realized that I also have problem with focus, but in another way. When doing a task, I often think about many things I can do to improve it, so it takes me too much time for low-priority things related to this task. I think I should set a “deadline” for each task and change to another task when time runs out.

Outreachy – The Journey Begins

Yesterday was my first day as an intern in Mozilla through Outreachy program. I am working in project “Improve usefulness and usability of Mozilla’s data warehouse front-end” with mentor Andrew Halberstadt.

What is Outreachy?

Outreachy provides a three-month paid internship for women (both cis and trans), trans men, and genderqueer people or anyone who faces under-representation, systemic bias, or discrimination in the technology industry. Intern will work in Free and Open Source Software (FOSS) with programming, user experience, documentation, illustration and graphical design, or data science.

You can find more detailed information in their website:

How did I know about Outreachy and why is this internship so valuable to me?

I started coding when I was at high school, then kept studying and working in software industry, but changed to another field about 5 years ago. At the beginning of this year (2018), we moved as a family into Canada – which can be considered as the biggest change in my life until now. Having opportunity to re-think about future career in the new land, I finally made a decision to come back to software engineering. It was kind of hard at first, because I had to prove that I could come back to code, and some companies also wanted me to have “Canadian experience”. I tried many ways: did some freelance works, took part in job fairs, and also thought about taking some coding courses.

While trying to send an email to Systers – a mail group for women in IT – to ask about programming course, I randomly read some mails and saw someone mentioned Outreachy (I subscribed that mail group nearly ten years ago, but to be honest, didn’t read the mail frequently because of changing working area). After reading Outreachy website, I said to myself that this internship was so fantastic, it would open many doors for me.

To apply or not to apply?

The internship is so fantastic, but how can I get that? Considering my age and my busy schedule with freelance projects, at first I thought it is impossible. There were many other students who were young and active and could arrange time for it. Moreover, I had no experience with FOSS. I didn’t know what would happen if I submitted “stupid” code.

However, after reading blogs of many Outreachy interns from previous rounds, I felt more confident because most of them said that: 1) contributing to FOSS is not too scary; 2) even if I am not selected for the internship, I still can learn many things and gain my skill. That really changed my mind. “The application process is only about 2 months, shorter than a course and I also will be guided by great mentors from FOSS” – I thought,  and finally I decided to give it a try.

What did I find from previous alums’ blogs?

Outreachy interns’ blogs are very informative and inspiring, and these are the most valuable advises in my opinion (some of them are also stated clearly in Outreachy website

  • Focus: many projects sound interesting and we may want to join them all, but we will not have enough time. Give yourself some criteria for choosing projects, then pick 1 – 2 most potential projects. In my case, I started with 2 projects but after 2 weeks I decided to focus on only 1 project.
  • Make your own deadlines: you should set your own deadlines and expected results, don’t think about other applicants. Keep thinking that you are learning and contributing, whatever the result is, you still win. This tip really worked for me! Sometimes I wanted to give up because of my busy schedule and I saw many other strong applicants. However, I remembered my goal was submitting a contribution weekly, so I just tried to keep my goal, no matter what happened.
  • Make progress, not perfection: we don’t have to give the perfect solution, just try to ask and to solve issues, from the “first good bug” to more complicated issues. I am not type of “speed person”, I often need time to dig in the problem and absorb the new things, so through the application process, I kept reminding me that “It does not matter how slowly you go as long as you do not stop”.
  • Don’t hesitate to ask your mentors: you can’t go through everything by yourself, so don’t hesitate to ask. My first question was not quite clear, but my mentors and other people in the team were so open and give detailed guide. So I felt more confident and continued asking and discussing. In my case, I often got answers quickly whatever I used: Github, IRC or email. But other people said that if you don’t hear from your mentors, you may try different ways, or ask on IRC channel of the team so other people can help you.

There will be 3 months ahead and I am so excited about this. Maybe the next blog I will tell you more about “intern life”!