Page MenuHomePhabricator

Proposal: Develop 'User Contribution Summary Tool'
Closed, ResolvedPublic

Description

Profile Information


IRC nickname on Freenode: megha213
Github Profile: https://github.com/MeghaSharma21
LinkedIn Profile:https://www.linkedin.com/in/megha-sharma-81834012a/
Location (country or state): Chandigarh (UT), India
Typical working hours (include your timezone): 12:00 - 02:00 (UTC+5:30)

Synopsis


Short summary describing your project and how it will benefit Wikimedia projects

As we all know Wikimedia is a global movement whose aim is to provide educational content for free. Since it is a crowdsourcing platform, both quantity and quality of content is dependent on the users/contributors. Hence, to maintain these it becomes highly important to have motivated contributors.

And we also know that human behaviour is motivated by incentives, so I’ve taken up the project of developing a ‘User Contribution Summary Tool’ for Wikipedia which will allow contributors to take credit for their contributions and give insights into their contribution patterns.

With the help of this tool, we’ll be able to programmatically measure contributions & achievements by transforming it into set of metrics. Hence, each contributor will be able to share his/her profile and take due credit for it. All in all, we’ll be implementing Incentive Theory of Motivation.

Wikipedia community will be benefited because of this project in the following ways:

  • This tool will not only help contributors gain trust from the community but will also help them to use this profile as a proof of their skill set in the professional world.
  • 'Comparison of profiles’ will further motivate the contributor to make quality contributions and will also give a fun element to the whole process. Also, it will improve the user experience of people who are using this tool to look into others' contributions (say, boss, professor etc.) as they can easily measure performance of two potential candidates using this feature.
  • It will improve the user experience by giving them a clear picture of their contribution patterns and community’s feedback.

Possible Mentor(s)

@Tgr,@Slaporte

Have you contacted your mentors already?

Yes

Deliverables


Describe the timeline of your work with deadlines and milestones, broken down week by week. Make sure to include time you are planning to allocate for investigation, coding, deploying, testing and documentation

During the internship, I’ll be following the Agile Model of SDLC. The whole tenure of internship will be broken down into sprints of 2 weeks each. Each sprint will consist of one full SDLC until and unless it’s an epic. Hence, continuous testing and documentation will be done.

For every task, there will be an Acceptance Criteria (AC). Only after it is satisfied, task will be considered complete.

  • For coding tasks AC will be : Proper UTs should be in place. Code review and beta testing should be done.
  • For design tasks AC will be : Design document should adhere to the requirements and should be approved by the mentors.
  • Usability Testing will be performed with representative users. After that only, the milestone will considered as complete.

Timeline:


Nov 9 - Nov 23

  • Community Bonding Period
  • Developing an understanding of Wikipedia’s current format of contribution
  • Understanding Wikipedia’s current tools that showcase user’s contributions. It’ll help me in identifying the areas of improvement
  • Getting familiar with the technologies already being used
  • Start participating in the scrum and sprint meeting of the team

Nov 23 - Dec 7

  • Try to know the community more
  • Studying similar existing tools that quantify a user’s performance
  • Defining the scope of the project after extensive discussions with the mentors
  • Finalizing the exact requirements and breaking them into phases/modules
  • Getting familiar with existing APIs and databases structure

Dec 07 - Dec 21 (Week 1,2)

Task 1 of this Sprint

  • Identify various metrics that can be used as a measure of one’s contributions and can be calculated programmatically
  • Find out various factors that will influence the metrics
  • After discussions with mentors, derive formulas for the same
  • Take some selective users in the loop to get some early feedback from them

Note: These metrics will be used to calculate ratings, badges (a symbolic mark of achievement) etc.
(Acceptance Criteria: Users should be satisfied with the formulated metrics.)

Task 2 of this Sprint

Note: This task will help us to gain clarity about the functionality that we need to implement.
(Acceptance Criteria: Design document should adhere to the requirements and should be approved by the mentors.)

Dec 21 - Jan 4 (Week 3, 4)

  • The major focus during this sprint will be to implement the backend functionality with minimal UI.
  • Write module to calculate ratings. For example, rating based on the no. of edits.
  • Write module for making various graphs that present a contribution summary of the user. For example, graphs showing comparison between pages edited and created by the user along with average and max values for the same.

(Acceptance Criteria: For both the modules, proper UTs should be in place; code review and beta testing should be done.)

Jan 04 - Jan 18 (Week 5,6)

(Acceptance Criteria: For both the modules, proper UTs should be in place; code review and beta testing should be done.)

Jan 18 (Mid term evaluation)
Gather feedback from users or developer community

Jan 18 - Feb 01 (Week 7,8)

  • Add a cache layer to decrease the cost of repeatedly fetching data
  • [EPIC] Implement the front-end as per the design mockups.

Feb 01 - Feb15 (Week 9,10)

  • Finish up the implementation of front-end.
  • Implement functionality to make user’s profile public or private based on user’s preference.

(Acceptance Criteria: For both of these, proper UTs should be in place; code review and beta testing should be done.)

Feb 15 - March 1 (Week 11,12)

  • Implement functionality to make the profile customizable by user. (Acceptance Criteria: Proper UTs should be in place; code review and beta testing should be done.)
  • Finish up pending reviews and documentation, if any.

March 01 - March 05
Final Evaluation

After Internship
Even after internship, I plan to lookout for new and challenging opportunities being offered by Wikimedia community. I will continue to maintain and contribute to the development of this tool and this problem of motivating users to contribute more to Wikipedia!

Milestones:


  • November:
    • Gained familiarity with existing tools and formats
    • Defined scope and requirements of the project
  • December:
    • Defined metrics and their formulas
    • Prepared design mockups
    • Finished up the first two modules that calculate rating of the user and generates graphs
  • January:
    • Finished back-end implementation after writing modules for assigning badges and comparing profiles
    • Added cache layer to avoid repeated fetching of data from database
    • Exposed APIs for reusability
    • Received feedback
    • Started the implementation of front-end as per design mockups
  • February:
    • Added functionality to make profile customizable
    • Added the ‘opt-in’ feature to make profile public
    • Done with final release of the product

Participation


Describe how you plan to communicate progress and ask for help, where you plan to publish your source code, etc

  • I’ll be maintaining the code base using Git. Hence, PRs will be used to gather feedback from the mentors on the same.
  • For sharing status and discussing issues, I’ll be using Phabricator. Other than this, IRC and Gmail will act as other communication mediums. I’ll be active on IRC during my working hours.
  • Also, I’ll be participating in scrum meetings and sprint planning. These meetings will help me in knowing the community better. And to discuss tasks and issues, I’ll be having one-on-one once in every two weeks with my mentors.
  • I’ve planned to use meta wiki user page to keep a record of my progress in a shareable format. I’ll be updating it every week.
  • I’ve also thought to write a blog about my experiences and challenging work that I’ll be doing as a part of this project. I plan to write it once in every 2 weeks.

About Me


Tell us about a few:

Your education (completed or in progress)

I am a final year computer science undergraduate student at PEC University of Technology, Chandigarh, India. I am a Computer Science enthusiast, because it gives me the power to reach billions and transform their lives. I fell in love with mathematics and problem-solving in primary school and that love drives my programming. I enjoy Coding and Building new things.

For reference to my skill set and past projects,this is my resume. (Majorly, these include expertise in languages like Python, HTML/CSS, Javascript, Java; frameworks like Django, Spring and cloud computing platforms like AWS, Google Cloud.

How did you hear about this program?

I got to know about this when I saw a post from outreachy on twitter.

Will you have any other time commitments, such as school work, another job, planned vacation, etc, during the duration of the program?

For 5 weeks, I will be having holidays, so I will be completely free. For the rest of the tenure, I will be attending even semester at my college.

In this semester, a full-time student takes up 25 credits but I'll be taking only 13 credits (out of which 6 credits are for major project which will be same as my outreachy internship project) so that I can do full justice to Outreachy programme.
Link for curriculum: http://pec.ac.in/programmes/ug/structure/cse-14-18
(Please refer to semester 2 of fourth year).
Note: I won't be taking 3 major/minor courses in the semester which are equal to 12 credits (as each one of them is 4 credits) and will take up outreachy internship project as major project(worth 6 credits).
So, I'll be taking up courses for 13 credits only (25 - 12 = 7 + 6(major project which will same as outreachy internship project)).

We advise all candidates eligible for Google Summer of Code and Outreachy to apply for both programs. Are you planning to apply to both programs and, if so, with what organization(s)?

Not applicable

What does making this project happen mean to you?

Wikipedia has always been an ultimate destination when it comes to making college assignments or reading about a topic or finding answers to some questions.

What google is to searching, Wikipedia is to knowledge. And Wikipedia is nothing without its community. If I’ll get an opportunity to make a tool for the community, that’ll motivate people to take out time from their busy schedule to contribute to an article which will then be used as a reference by my neighbourhood friend, the happiness that I’ll get out of it will be immeasurable.

Whatever I've done so far in my computer science career has only reached a maximum of 500 people. I want to build something which will impact millions, including my friend sitting next to me. And this project gives me that opportunity, and at the same time, challenges me to learn and grow. Hence, I would love to solve this hard and complex problem.

Past Experience


Describe any relevant projects that you've worked on previously and what knowledge you gained from working on them. Describe any open source projects you have contributed to as a user and contributor (include links). If you have already written a feature or bugfix for a Wikimedia technology such as MediaWiki, link to it here; we will give strong preference to candidates who have done so

Industry Experience:


Software Engineering Intern , Amazon, Bengaluru : Jan 2017 - July 2017

  • I worked with the tech team that supported the retail business of Amazon.
  • I built a visualization platform that quantified a team’s performance with the help of metrics. The visualizations provided an insight into the data which eventually helped in increasing a team’s productivity.
  • I used plethora of AWS technologies like QuickSight, Redshift, DynamoDB, Lambda etc for making this tool. Open source tools like Kibana were used to create visualizations.
  • I made webapp for the visualization platform using JSP, HTML/CSS, Javascript and Integrated it with my team's website.
  • Multiple reviews were held with senior leaders and clients and the platform improved with multiple iterations, which in turn improved my coding, testing and leadership skills.
  • I got pre-placement offer from Amazon for my exemplary work during the internship.

Researchshala - www.researchshala.com

  • Researchshala is an online platform to connect professors to research-interns, helping them with their research projects
  • I built this website in Django, hosting on AWS for the budding startup of my college

Research-Intern at IIT Delhi

  • I was among the top 0.33% students all over India who got selected for Student Research Fellowship Program, IIT-Delhi.
  • At IITD, I was a Research Fellow under Asst. Prof. Maya Ramanath.
  • I built a technical knowledge base to establish relationships between technical concepts by using Wikipedia as the input corpus and then organised relations into a hierarchical structure.
  • For this, I'd set up Hadoop for using PATTY, a MPI resource and maintained database using PostgreSQL and MongoDB.

Self-Projects:


Health Monitoring Application using Brain Computer Interface

  • I built an android app to analyse and improve user’s concentration and meditation levels.
  • The state of the user’s brain was monitored using Muse, an EEG device.
  • Binaural beats were used to improve the current levels of concentration and meditation.

Accessing and Extracting Information from the Hidden-Web

  • Objective was to build a database of publications and research papers of foreign academicians of Indian origin.
  • For this, I built a crawler that explored the Deep Web in a targeted manner after receiving a list of names of academicians as input.
  • Libraries like BeautifulSoup, Requests and JSoup were used for fetching and structuring the results.
  • This Project was funded by NSTMIS, a division of Department of Science and Technology, India.

Link: https://github.com/MeghaSharma21/AccessingDeepWeb

Intelligent Subtraction Tutor

  • I built a chatbot that is capable of teaching subtraction to a child by first judging its current knowledge level and then teaching it accordingly.
  • Facebook Messenger API was used to host the bot on Modulus, having Facebook messenger as the interface.
  • ai.wit was used to train the bot.

Link: https://github.com/MeghaSharma21/intelligent-subtraction-tutor

Password Based Door Lock

  • I built a password-based door-lock system, integrated with IR based motion sensor using 8051 microcontroller
  • The microcontroller was microprogrammed in C language.

Link: https://github.com/MeghaSharma21/Password-Based-Door-Lock

Open Source contributions:


  1. Developed a Sublime Package for C++ code snippets, which contained templates for algorithms commonly used in competitive programming. This was developed with the intent to help programmers solve questions with greater speed and accuracy. Link: https://github.com/MeghaSharma21/CPP_Competitive_Programming_Sublime_Snippets
  1. Developed an Atom Package, which has been developed for competitive programmers on similar lines like the aforementioned sublime package. Link: https://github.com/MeghaSharma21/CPP_Competitive_Programming_Atom_Snippets

Both the packages are available with their respective package managers, having 200+ installations.

Micro-tasks Completed:


MicroTask 1

Created a tool on toolforge which takes in the Wikipedia username and shows recent edits by the user. The results have been presented in an eye-catchy way, showing the timestamp, comment, title, article-size and diff-link of the edit. For this, I made an ajax call to the mediawiki database to fetch recent edits of a user and used Javascript and CSS to present the results.

Link to Code: https://github.com/MeghaSharma21/outreachy-wikimedia-recent-user-edits-tool/tree/review

Link to Tool: https://tools.wmflabs.org/outreachy-recent-edits-tool/

MicroTask 2

Created a tool on toolforge to show the rank of a user based on no. of edits in Hindi Wikipedia.

The rank and percentile of the user is presented along with the graph showing distribution of all the users according to number of edits which adds more clarity as to where the user stands. For this, I developed a Django app and the User table was taken as a data source.

Link to Code: https://github.com/MeghaSharma21/outreachy-wikimedia-user-rank-tool/pull/1

Link to Tool: https://tools.wmflabs.org/outreachy-user-ranking-tool

MicroTask 3:

Created UI design mockups for the ‘User Contribution Summary Tool’.

These mockups speak about my vision for this tool which has been descriptively explained here: https://github.com/MeghaSharma21/outreachy-wikimedia-userprofile/blob/MeghaSharma21-patch-11/README.md.

I also explored formulas for calculating ratings for the person, similar to what we have on Topcoder or Codechef.

Link to Mockups: https://github.com/MeghaSharma21/outreachy-wikimedia-userprofile/tree/MeghaSharma21-patch-11

MicroTask 4 (Extra):

I picked the Graph Module from my timeline and prepared a POC for it.

For this, I created a tool on Toolforge that shows the contributions of a user in terms of no. of pages edited and created in the present year.
The contributions have been shown in the form of a timeline similar to the Github’s contribution timeline.

Link to tool: https://tools.wmflabs.org/outreachy-user-contribution-tool/
Link to code: https://github.com/MeghaSharma21/outreachy-wikimedia-user-contribution-tool/pull/1

Any Other Info


Add any other relevant information such as UI mockups, references to related projects, a link to your proof of concept code, etc

While I was an intern at Amazon, I did similar kind of work. There I built a visualization platform that gave insight into the team's performance with the help of dashboards displaying metrics.
Here also we are trying to showcase a user's contributions with the help of programmatically measurable metrics.
So, I feel my past experience can give me a headstart in this project.

Event Timeline

Hi @Tgr @Slaporte,
This is my project proposal for building User Contribution Summary Tool.
I really wanted your reviews on this. They'll be very helpful.

This is a pretty well-written project plan! I disagree with some specifics though:

Wikipedia which will allow contributors to brag about their contributions

This is not entirely wrong but a somewhat disdainful way to put it :) "take credit for their contributions" might be better.

will bring in gamification to motivate contributors

I would prefer if gamification wasn't invoked. It's an exploitative strategy that uses subconscious behavior to make people do things that the software writer wants, in exchange for fictive points that have no real-world value. This projects aims to do the opposite: allow editors to gain real value from their contributions, by making those contributions transparent and understandable to their bosses / recruiters / etc.

This project will have a huge impact on Wikipedia because -

Realistically, the Outreachy project probably won't have a huge impact - not with what can be achieved in three months, anyway. I hope it can be the first step in a larger project that will eventually have significant impact, though - a demonstration that this is interesting enough to invest further resources.

Write module for comparing 2 user profiles.

I feel this is a distraction for this project. It's not really useful toward the stated goal ("proving" your contributions towards your boss etc. so you can take credit for them). Evaluating a user compared to the general population (e.g. saying that someone is in the top 1%, or the top 100 most prolific contributors) could be useful, but I can't really imagine a scenario where comparing to a specific user would come up.

Release the MVP to selective users for feedback.

I don't think it's useful to that before working on the frontend. An MVP doesn't necessarily have to look pretty, but it shouldn't look like a debug dump either - how well something looks will influence users' opinions of it, even if they are asked to disregard it. Lack of design makes it hard to quickly understand the shape of the information presented, etc.
If you want to release the MVP by the mid-term evaluation point, you should pull some features from it (e.g. badges).

Milestones

Stylistic nitpick: milestones are typically outcomes, not activities. So instead of "Defining metrics and their formulas" you would put "Metrics definitions" or "Metrics have been defined", etc.

This is a pretty well-written project plan! I disagree with some specifics though:

Thanks :)

I don't think it's useful to that before working on the frontend. An MVP doesn't necessarily have to look pretty, but it shouldn't look like a debug >dump either - how well something looks will influence users' opinions of it, even if they are asked to disregard it. Lack of design makes it hard to >quickly understand the shape of the information presented, etc.
If you want to release the MVP by the mid-term evaluation point, you should pull some features from it (e.g. badges).

Don't worry it won't look that bad :p. By minimal UI I meant that it will be worth presenting to the users. But if it is still a concern, we can release it within our team, it will serve the purpose too. The intent behind it was to get early feedback.

I feel this is a distraction for this project. It's not really useful toward the stated goal ("proving" your contributions towards your boss etc. so you can take credit for them). Evaluating a user compared to the general population (e.g. saying that someone is in the top 1%, or the top 100 most prolific contributors) could be useful, but I can't really imagine a scenario where comparing to a specific user would come up.

For this tool, there will be two main stakeholders, a) Contributors and b) people to whom they are trying to prove their contributions. Hence, while deciding upon the specifics of the tool, I thought adding the feature of 'Comparing profile' will improve user experience for the latter stakeholder. For example, if a boss wants to compare his employee's performance with another, he can easily do it using this feature.

Other than this, thanks a lot for your comments! :) I've made all the other suggested changes.

Hi @Tgr ,

Since I have some time left, I thought to pick up some module from my timeline. It'll help me if I'll get selected. I've decided to start with the graphs component. For now, I am aiming to represent the pages created and pages edited by a user over time. This will act as POC for the graphs that I had shown in the mockups in MicroTask-3.
I wanted your feedback on the same.
Also, review for the 1st revision of microtask 2 is pending. Can you please go through it so that I can close it in time?

@Meghasharma213 I'm not sure those graphs are the best way to represent the information (but did not want to force my own preconceptions or get into debates for the microtask). The goal here is to inform the boss / authority person who wants to better understand the impact of an editor's Wikipedia usage, and in that context I can think of two pieces of information that are relevant: how much value they add and how their activity is distributed over a large timescale (ie. are they active now? were they active years ago but not anymore? Are they active in the summer vacation but not the semesters? etc). For the first, a graph is not really useful as it's hard to interpret large numbers; describing their activity compared to others ("in the top 1% of editors", "one of the top 10 physics content creators") is much better. For the time distribution, YMMV but for me line/bar charts seem distracting; I'd go with something discrete like Google's calendar charts. (Not that I'm a design expert or anything.)

Hi @Tgr,
Thanks for the feedback. I got the point and agree with it too. Hence, I’ve made this tool which shows the contributions of a user in terms of no. of pages edited and created in the present year similar to Github’s contribution timeline.

Link to the tool: Tool
Link to the code: PR

Kindly Review.

Hi @Tgr,
I've made changes to the code of Task-4 according to your comments.

Link to the Tool: Tool
Link to the code: PR

Kindly Review.