<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Shraddha Agrawal</title>
    <description>The latest articles on DEV Community by Shraddha Agrawal (@shraddhaag).</description>
    <link>https://dev.to/shraddhaag</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F60622%2F358a4a35-f24d-4450-a556-8ecf2b210c3f.jpg</url>
      <title>DEV Community: Shraddha Agrawal</title>
      <link>https://dev.to/shraddhaag</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shraddhaag"/>
    <language>en</language>
    <item>
      <title>Improving Teuthology Scheduling: GSoC 2020 with Ceph Foundation</title>
      <dc:creator>Shraddha Agrawal</dc:creator>
      <pubDate>Wed, 09 Sep 2020 00:48:13 +0000</pubDate>
      <link>https://dev.to/shraddhaag/improving-teuthology-scheduling-gsoc-2020-with-ceph-foundation-1kp8</link>
      <guid>https://dev.to/shraddhaag/improving-teuthology-scheduling-gsoc-2020-with-ceph-foundation-1kp8</guid>
      <description>&lt;p&gt;I was selected in Google Summer of Code 2020 with the Ceph Foundation to work on Teuthology scheduling improvements.&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;
      &lt;div class="ltag__twitter-tweet__media"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--l8VhoJe3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/media/EXOnerkU8AA5YG5.jpg" alt="unknown tweet media content"&gt;
      &lt;/div&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--xvyYVNv0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1258445844535263232/onV_Zn1__normal.jpg" alt="Shraddha Agrawal profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Shraddha Agrawal
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="comment-mentioned-user" href="https://dev.to/shraddhaag"&gt;@shraddhaag&lt;/a&gt;

      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Extremely delighted and grateful to be selected in &lt;a href="https://twitter.com/gsoc"&gt;@gsoc&lt;/a&gt; under the &lt;a href="https://twitter.com/Ceph"&gt;@Ceph&lt;/a&gt; Foundation 🙏💖&lt;br&gt;&lt;br&gt;Here's to another OSS packed summer, working on improving Teuthology scheduling, with my super mentors Josh Durgin and &lt;a href="https://twitter.com/ojha_neha"&gt;@ojha_neha&lt;/a&gt; 🍷✨&lt;br&gt;&lt;br&gt;Best &lt;a href="https://twitter.com/hashtag/MayTheFourthBeWithYou"&gt;#MayTheFourthBeWithYou&lt;/a&gt; yet 🔥 
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      04:49 AM - 05 May 2020
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1257532885650665477" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFnoeFxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1257532885650665477" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k6dcrOn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=1257532885650665477" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SRQc9lOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;Here is what I worked on this summer.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Teuthology?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/ceph/ceph"&gt;Ceph&lt;/a&gt; is a highly distributed system with active kernel development. &lt;a href="https://github.com/ceph/Teuthology"&gt;Teuthology&lt;/a&gt; (&lt;a href="https://en.wikipedia.org/wiki/Teuthology"&gt;referring to the study of cephalopods&lt;/a&gt;) is Ceph's automation framework used to schedule and run a vast majority of its integration tests and was developed due to the lack of a pre-existing system that could serve Ceph's unique requirements of testing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding the Components
&lt;/h2&gt;

&lt;p&gt;The various components that enable the testing framework, Teuthology:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Job queue&lt;/strong&gt;: A priority queue maintained by the scheduler as the pool of jobs available to run. &lt;a href="https://github.com/beanstalkd/beanstalkd"&gt;Beanstalkd&lt;/a&gt; queue is used in Teuthology. Various queues are maintained for different &lt;em&gt;machine type&lt;/em&gt; of test nodes to run the job on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test nodes&lt;/strong&gt;: We have a large cluster of various types of machines that are used for running tests. They are classified under various machine types. Jobs are run on one or more of these nodes by specifying their machine types and sometimes specific test nodes when scheduling jobs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Teuthology Scheduler&lt;/strong&gt;: Based on the incoming request from Teuthology users, it schedules a job, pushing the job information in the queue and paddles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Teuthology Workers&lt;/strong&gt;: Daemons that watch a queue, take a job from it, and proceed to run it. After the job finishes execution, workers keep repeating this. There are a number of workers per queue. This enables running jobs concurrently.&lt;/p&gt;

&lt;p&gt;All the above is managed and used inside the &lt;a href="https://wiki.sepia.ceph.com/doku.php"&gt;Sepia Lab&lt;/a&gt;. The tests cannot be scheduled or run locally on developers' machines. To schedule tests, developers need access to Sepia Lab&lt;/p&gt;

&lt;p&gt;The different services that interact with Teuthology:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/ceph/paddles"&gt;Paddles&lt;/a&gt;&lt;/strong&gt;: A JSON API used to report back on test results and is the jobs database. It contains complete information about the jobs, including when they are scheduled, nodes they are scheduled to run on, execution time and their status.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/ceph/pulpito"&gt;Pulpito&lt;/a&gt;&lt;/strong&gt;: Frontend for Paddles. It is used to visualize the information contained in Paddles. It can be accessed &lt;a href="https://pulpito.ceph.com/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jenkins&lt;/strong&gt;: The package builder. It is used to built packages from the specified branch for the required distro. Packages are fetched from Jenkins to run jobs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://shaman.ceph.com/"&gt;Shaman&lt;/a&gt;&lt;/strong&gt;: REST API used to update and query the build status of the packages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://fogproject.org/"&gt;FOG Project&lt;/a&gt;&lt;/strong&gt;: Used to capture and deploy the required Linux distros on test nodes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Current Working
&lt;/h2&gt;

&lt;p&gt;When Ceph developers need to test their development branches or reviewers need to test changes before merging, integration tests are scheduled using Teuthology.&lt;/p&gt;

&lt;p&gt;Devs run a similar command in Sepia Lab to schedule a job:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Teuthology-suite -m smithi -c wip-shraddhaag-add-dispatcher \
  -p 45 -s rados/cephadm/upgrade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Teuthology scheduler queries the status of the build from &lt;a href="https://shaman.ceph.com/"&gt;Shaman&lt;/a&gt; to check if the build is ready corresponding to the branch and repository specified. If yes, other sanity checks are done and the job is scheduled by adding it to the beanstalk priority and its information is reported to Paddles, the jobs database. At this point, users' job is done and they can see the status of the job on Pulpito, the web UI for Paddles.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oFaw3mk4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/h2bwnz3w4xplen59y1eh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oFaw3mk4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/h2bwnz3w4xplen59y1eh.png" alt="Teuthology architecture"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Behind the scenes, several workers are watching the queues, waiting for jobs to run. When a worker receives a job, it prepares the job and invokes &lt;code&gt;Teuthology&lt;/code&gt; cmd, its child process, to start executing the job. The worker waits for its child process to finish execution and then moves ahead to take the next job in the queue. At a time, a worker only runs one job. There is also a maximum time limit set for a job's execution. If the execution takes longer, the worker interrupts the execution and kill its child process and reports the status of the job as 'dead'.&lt;/p&gt;

&lt;p&gt;The child process is responsible for executing tasks described in the job's YAML files. Various tasks are specified that range from acquiring (locking) the required test nodes to run the job on, reimage these test nodes using the FOG project, run the tests, archiving the logs for further analysis and finally unlocking the test nodes (so that they can be used by other test). After executing all the tasks, the child process exits.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;The problems with the current implementation are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Lack of scheduling fairness&lt;/li&gt;
&lt;li&gt;Priority is not maintained&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Lack of scheduling fairness
&lt;/h3&gt;

&lt;p&gt;Some jobs aren't able to run at all due to low priority and high requirement of test nodes to execute the job. Since workers are always looking for jobs to execute without knowledge of the other jobs being executed by the rest of the workers, it often happens that a job is not executed at all because the required number of test machines are not free.&lt;/p&gt;

&lt;h3&gt;
  
  
  Priority is not maintained
&lt;/h3&gt;

&lt;p&gt;Since jobs which are requirement heavy will be delayed execution in favor of ones that require fewer machines, priority is not maintained. Workers do not have knowledge of what jobs are being executed by other workers, so they do not wait for these jobs to finish execution first before locking machines for low priority jobs. Thus jobs are rather executed in order of available test nodes, job's requirement and its priority which isn't the ideal scenario.&lt;/p&gt;

&lt;p&gt;Lets take an example, a job is scheduled which requires 5 machines to execute with a low priority. Since priority is low, it will be picked up much later by workers. When a worker does start its execution, it will try to lock 5 test nodes. At the same time, the other workers will be picking up jobs from queues and executing them, where they will try to lock machines required by their jobs. If these other jobs require fewer machines, they will be locked before our job locks machines, irrespective of the priority of the job. Since we have many workers per queue, they will always be looking to lock machines, chances of having 5 free machines for our worker to lock are very less. It's very likely that our job isn't able to start execution at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution
&lt;/h2&gt;

&lt;p&gt;The above problems can be solved if we have complete knowledge of the system when we are locking machines. Since execution does not need to know about the priority of the job, that can be executed independently without the entire system's knowledge. Separating the locking mechanism from the job execution such that it is done in a centrally controlled environment is key.&lt;/p&gt;

&lt;p&gt;To achieve the above, we replaced the existing worker framework with a dispatcher.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dispatcher
&lt;/h3&gt;

&lt;p&gt;The dispatcher sits at the interface of the beanstalk queue and the workers, which are now called the job supervisors. Instead of various workers watching a queue, a single dispatcher keeps track of the queue. Instead of locking machines in the initial tasks upon execution of a job, the dispatcher locks the required number of machines and then invokes the job's execution by starting job supervisors. The dispatcher forgets about the job now and moves onto the next job in the queue.&lt;/p&gt;

&lt;h3&gt;
  
  
  Supervisors
&lt;/h3&gt;

&lt;p&gt;Job supervisors are similar in working to workers with some key differences. While workers execute many jobs, one after the other, supervisor are job-specific. They supervise the execution of the job and then exit when it's completed. Unlike workers, they also don't have direct access to the priority queue to pull jobs from but are called with a specific job's information. They are responsible for reimaging the target test nodes and unlocking/nuking them after a job finishes executing all its tasks.&lt;/p&gt;

&lt;p&gt;In case of job timeout, that is when a job exceeds the maximum execution time for a job, workers simply nuked target test nodes without archiving logs from these machines. This was a huge pain for developers to debug without the test logs to go through. Supervisors archive test logs from target test nodes in case of a job timeout before nuking machines.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does it all come together?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--u9eBM62C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/v9e4xkwuk3l1yrc48ci1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--u9eBM62C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/v9e4xkwuk3l1yrc48ci1.png" alt="The new Teuthology architecture"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dispatcher watches the queue, takes a job from it, waits for the required number of test nodes to be available, locks them and invokes job supervisor. The supervisor reimages the test nodes, constructs the &lt;code&gt;Teuthology&lt;/code&gt; cmd and invokes it. &lt;code&gt;Teuthology&lt;/code&gt; proceeds to run all the tasks and exits after the job execution is complete. At this point, the supervisor unlocks/nukes targets depending on the job status.&lt;/p&gt;

&lt;p&gt;If the required number of test nodes are not available the dispatcher waits for them to be freed. During this time, no other job starts execution as dispatcher is busy. As other jobs finish execution and unlock nodes, the dispatcher is able to lock the required number of nodes, invoke that job's execution and move on to the next job in the queue. This ensures that jobs that have a higher requirement for test nodes to execute are not left waiting too long and at the same time maintains the priority order of the jobs.&lt;/p&gt;

&lt;p&gt;Following PRs enable the above working:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/ceph/Teuthology/pull/1546"&gt;https://github.com/ceph/Teuthology/pull/1546&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ceph/ceph/pull/36738"&gt;https://github.com/ceph/ceph/pull/36738&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ceph/ceph/pull/36718"&gt;https://github.com/ceph/ceph/pull/36718&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What lies ahead?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Same Teuthology workspace for each run.
&lt;/h3&gt;

&lt;p&gt;While scheduling suites, we can specify what Teuthology branch to run the suite against. But in the middle of a run if the said branch is updated, some jobs are run using the old branch ref and some using the latest ref. This makes debugging harder since the error could be in the latest branch update which just adds onto places to look for bugs, not to mention one will only look into it if they realize in the first place that Teuthology might have updated mid-run. We want to avoid this nastiness by enabling Teuthology workspace for each run such that each job in a suite is run using the same ref.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enable re-prioritizing jobs
&lt;/h3&gt;

&lt;p&gt;We would like to add the ability to re-prioritize jobs after they are scheduled. This would be used to re-prioritize jobs, to bump them up in the priority queue after they have spend maximum waiting time in a certain priority level. This will ensure that even low priority jobs are executed eventually and not end up waiting in the queue indefinitely.&lt;/p&gt;

&lt;h3&gt;
  
  
  Running Teuthology locally
&lt;/h3&gt;

&lt;p&gt;If you read through the blog till now, you might be wondering how does one go about setting up Teuthology locally. The simple answer is you can't, for now at least. There are a lot of pieces that need to be figured out to run Teuthology locally. But doing so will be extremely useful in shortening the development time for Teuthology.&lt;/p&gt;

&lt;h2&gt;
  
  
  No ride is void of challenges
&lt;/h2&gt;

&lt;p&gt;There were a few instances this past summer when I felt overwhelmed.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The first hurdle was setting up the development environment. As I mentioned earlier, running a development setup for Teuthology was a big task. Recently no such drastic changes had been made to Teuthology, and so no one had deployed Teuthology for development that I could ask questions to. We were all figuring it out together. It was a good exercise and made me appreciate the extensive lengths people go to make sure their project's local development setup experience is as smooth as running a single command to have everything up and running.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I had a medical emergency in the second week of GSoC due to which I wasn't able to work for an entire week. This interruption came at a time when I was already struggling with trying to setup Teuthology. It got to me a little but my mentors were extremely supportive.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I was already done with the main aims of the project by the time we approached the last month of GSoC. Teuthology is also used in SUSE and they have some restrictions due to which we had to change the solution's implementation details entirely. On the first blush, this seemed like a challenge I won't be able to pull off. But in the end, I completed it well within the timeline and I'm happy about the change since the updated implementation is much more elegant.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Acknowledgements
&lt;/h2&gt;

&lt;p&gt;I was studying the internal working of other task queues and message queues when I came across this project in GSoC while helping out a friend find a suitable project for them. The project really piqued my interest. I was elated to be selected in GSoC because I would be able to work on something I'm genuinely curious about.&lt;/p&gt;

&lt;p&gt;I can safely say that this past summer has been an immensely gratifying learning experience. All of this has been possible only because of my rockstar mentors Neha Ojha and Josh Durgin. They not only helped me throughout the process but made sure to appreciate my work and gave me constructive feedback at every turn. I'm extremely grateful for the opportunity to learn from such talented people. Thank you to the wider Ceph community for bearing with me while I got up to speed with way things work. And last but not the least, thank you so much Kyrylo Shatskyy for helping me out in the last leg of this journey!&lt;/p&gt;

&lt;p&gt;Thank you so much for this wonderful summer :)&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>gsoc</category>
      <category>googlesummerofcode</category>
    </item>
    <item>
      <title>What, Why and How: Outreachy 101</title>
      <dc:creator>Shraddha Agrawal</dc:creator>
      <pubDate>Sat, 25 May 2019 18:52:20 +0000</pubDate>
      <link>https://dev.to/shraddhaag/what-why-and-how-outreachy-101-26hf</link>
      <guid>https://dev.to/shraddhaag/what-why-and-how-outreachy-101-26hf</guid>
      <description>&lt;p&gt;I recently got selected for Outreachy with Fedora and thought I should document the entire process for other curious souls looking to participate! :)&lt;/p&gt;

&lt;p&gt;Note: This article by no means provides a 'hack' or definite steps to get into Outreachy. These are just my thoughts on what worked for me. &lt;/p&gt;

&lt;h2&gt;
  
  
  The What
&lt;/h2&gt;

&lt;p&gt;As mentioned on the official Outreachy website: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://www.outreachy.org/"&gt;Outreachy&lt;/a&gt; provides internships to work in &lt;a href="https://en.wikipedia.org/wiki/Free_and_open-source_software"&gt;Free and Open Source Software (FOSS)&lt;/a&gt;. It's a three month remote internship. &lt;/p&gt;

&lt;p&gt;Outreachy internships provide a wide varity of domains to work in. Projects may include programming, user experience, documentation, illustration, graphical design, or data science. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you've heard about Google Summer of Code, Outreachy in many ways is similar to it with some key differences: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;While Outreachy is an internship, GSoC is &lt;a href="https://developers.google.com/open-source/gsoc/faq#is_gsoc_considered_an_internship_a_job_or_any_form_of_employment"&gt;not considered as an 'internship'.&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Outreachy is open to only under-represented individuals in tech whereas GSoC is a student centric program. &lt;/li&gt;
&lt;li&gt;Outreachy is biannual while GSoC runs once per year.&lt;/li&gt;
&lt;li&gt;Stipends for Outreachy are fixed while GSoC stipends may vary depending on where you reside. &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Who can apply?
&lt;/h3&gt;

&lt;p&gt;Outreachy has &lt;em&gt;very strict eligibility criteria&lt;/em&gt;. Two of the most important ones are: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Anyone who faces &lt;em&gt;under-representation, systemic bias, or discrimination in the technology industry of their country&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;You must have &lt;em&gt;atleast 49 consecutive days free from full-time commitments&lt;/em&gt;. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can check the &lt;em&gt;complete eligibility criteria&lt;/em&gt; on the &lt;a href="https://www.outreachy.org/apply/eligibility/"&gt;official website&lt;/a&gt;. The initial application verifies your eligibility. More on the same is detailed below. &lt;/p&gt;

&lt;h3&gt;
  
  
  When can you start?
&lt;/h3&gt;

&lt;p&gt;Outreachy runs &lt;em&gt;twice a year&lt;/em&gt;, mid year and end of year. For the mid year round, the &lt;em&gt;application period starts from February and the internship concludes August&lt;/em&gt; while for the end of year round, the &lt;em&gt;application period starts from  September and the internship concludes in March&lt;/em&gt;. If you're a student, depending on where you school is, you can apply to either of these rounds.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Why
&lt;/h2&gt;

&lt;p&gt;Not that all that is out of the way, essentially the most important question to ask here is &lt;strong&gt;why do you want to apply for Outreachy&lt;/strong&gt;. Summer of code have gained a considerable amount of traction in the last few years and if you're based in India, there are GSoC/Outreachy fellows left right and centre. &lt;em&gt;Don't do it because everyone you know is doing it, peer pressure be damned.&lt;/em&gt;  &lt;/p&gt;

&lt;p&gt;Here are some takeaways from my experience that hopefully will help you choose if Outreachy is the best bet for you! &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Quality abundance of learning&lt;/strong&gt;. Contributing to a FOSS project is a huge step up from a personal project. You get to learn plentiful and get a taste of what it's like to be a part of a big system with various working parts. Contributing to the project not only enhances your &lt;em&gt;skill set as a software developer&lt;/em&gt; but also endows you with &lt;em&gt;essential soft skills&lt;/em&gt;.   &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Gateway into Open Source Software development&lt;/strong&gt;. If you're passionate about OSS and have been looking to contribute to the same, Outreachy sets an effective precursor. Getting involved with OSS can be tricky and often daunting for beginners, as was the case with me. Just knowing who to ask help from is barrier breaker. Outreachy provides specific steps on how to connect with your mentor and contact them in case you feel stuck or are in need of help. This brings me to my third most important takeaway. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Build you network&lt;/strong&gt;. Irrespective of whether you get selected or not, while contributing to the project you get to know and work with experienced and highly talented software developers and your fellow skilled applicants. Interacting and working with OSS veterans across the globe teaches you the current best practices, brings new and enlightening perspectives into focus and exposes you to opportunities you might not have stumbled upon elsewhere. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Credibility&lt;/strong&gt; If you're like me who regularly needs a reminder to hush that small voice in the back of your head telling you that you're not skilled enough, or often doubt your own capabilities as a software developer, Outreachy will provide that much needed boost to your self-esteem.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Monetary Perks&lt;/strong&gt; Outreachy provides $5500 USD to each intern as an incentive to get involved in OSS. Additionally, Outreachy also provides $500 USD travel stipend to attend workshops/conferences.     &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The How
&lt;/h2&gt;

&lt;p&gt;Now if most of the above reasons seem fitting, let's get into the stepping stones towards getting selected for Outreachy. &lt;/p&gt;

&lt;h3&gt;
  
  
  The Initial Application
&lt;/h3&gt;

&lt;p&gt;The first step during the application period is the initial application. This is for the Outreachy organisers to verify your eligibility. It requires you to answer four essay based question and some others to verify your time availability. &lt;/p&gt;

&lt;p&gt;This must be taken &lt;strong&gt;extremely seriously&lt;/strong&gt;. Only after the initial application is accepted, the projects are made visible to the applicants. &lt;/p&gt;

&lt;h3&gt;
  
  
  Selecting a Project
&lt;/h3&gt;

&lt;p&gt;Going through the list of projects I had these important points in mind: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Look for a project that will enhance your current skill set and simultaneously nudge you to expand your knowledge spectrum. &lt;/li&gt;
&lt;li&gt;Question to self: Do you see yourself contributing to the project long after the internship is done? If the answer is yes, you're good to go. &lt;/li&gt;
&lt;li&gt;Don't go after an organisation because you've heard too much about it. Again, a tag won't help you if your heart's not in it. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Don't select too many projects and juggle between them as that will only divide your time that could instead be devoted to understanding one/two projects and giving it your best input. &lt;/p&gt;

&lt;h3&gt;
  
  
  Contribution Period
&lt;/h3&gt;

&lt;p&gt;Outreachy requires you to &lt;em&gt;solve atleast one issue to submit a final application&lt;/em&gt;. After introducing yourself on the community's preferred mode of communication, go on the hunt for your first issue to solve.  &lt;/p&gt;

&lt;p&gt;This is one of the most crucial period based on which mentors decide whether you're fit for the project or not. Some key points to keep in mind are: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Solve as many bugs as possible. Don't just go for issues that fall under your spectrum of knowledge, try to solve issues that urge you to &lt;em&gt;step outside your comfort zone and learn new things&lt;/em&gt; on the fly. This will help mentors see your ability to learn and adapt according to project requirements. Be involved not only by contributing but also open issues when you come across a bug. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Be an active member of the community. &lt;em&gt;Communicate effectively with your mentors&lt;/em&gt;. Follow the etiquettes to communicate on a public platform. Keep them updated of your progress and any obstacles you're facing. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Do not ask questions to your mentors unless you've done enough research about the same. &lt;em&gt;Respect their time and efforts and use Google and Stack Overflow in abundance&lt;/em&gt;. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Help others out as much as possible&lt;/em&gt;. I can't stress this enough, don't make this into a dirty race where you belittle your co-applicants or the likes. Genuinely help other contributors and build a supporting community.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Most of all, have fun!&lt;/strong&gt; Strive for those Eureka moments when you solve bugs or add new features. Give yourself a pat on the back, you've earned it! &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Note: If you're like me and big code-base seem daunting, remember, you don't need to know it in its entirety. Start small and build from there. &lt;/p&gt;

&lt;h3&gt;
  
  
  The Final Application
&lt;/h3&gt;

&lt;p&gt;The final application requires you to record all your contributions mention your experience working with the organisation, give details of any past projects you've made/FOSS organisation you've worked with and supply a timeline mapping out the course of action for the next three months of the internship. Each and every step is important for outreachy organisers to understand if you're suitable for the internship so give plenty time to each and mention any and all details. &lt;/p&gt;

&lt;p&gt;After submitting the final application, you can keep on contributing to the project and maintain a steady communication with the mentors.&lt;/p&gt;

&lt;h2&gt;
  
  
  And, you're IN!
&lt;/h2&gt;

&lt;p&gt;That's it. As I start my internship with Fedora I can safely say, all it needs is &lt;em&gt;consistent efforts by a passionate being&lt;/em&gt;.  &lt;/p&gt;

&lt;p&gt;You can read about my experience during the application period &lt;a href="https://communityblog.fedoraproject.org/outreachy-2019-with-fedora-happiness-packets-application-period/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Hope you found something valuable here and most of all the drive to apply for that Summer of Code you've been wanting to since eternity. Quit questioning, take a leap of faith and dive right in! &lt;/p&gt;

&lt;p&gt;Feel free to reach out about any doubts concerning the application process, I'll love to help you out! :)   &lt;/p&gt;

</description>
      <category>outreachy</category>
      <category>gsoc</category>
      <category>summerofcode</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
