---
title: Getting Started
---
<div class="row">
  <div class="col-sm-9">
    <h1 id="where-do-i-start">How do I get engaged with an Apache Project?</h1>
    <p>If you have no idea where to start your engagement with an Apache project, this is the page for you.</p>

    <h2 id="finding-the-right-project">Finding the right project</h2>

    <p>The key to working on projects at Apache (and on any open source project, for that matter) is to have a personal reason for being involved. You might be trying to solve a day job issue, you might be looking to learn a new technology or you might simply want to do something fun in your free time. We don&rsquo;t care what your motivation is we just care about you wanting to get involved.</p>
    <p>If you don&rsquo;t have a specific technical issue to solve you might be willing to work on any project. Our <a href="../our-projects">projects page</a> provides a high some details on some of our most popular projects. If none of those are of interest to you, click on the link to see our full project list, which includes a useful index which allows you to view projects alphabetically, by category or by coding language. When you view a projects detail page in this list you will find information about their mailing lists, issue tracker and other resources</p>
    <p>You might also like to view our <a href="https://incubator.apache.org/">Incubating projects</a>. These projects work in exactly the same way as our &ldquo;top level projects&rdquo; but are still developing their initial community</p>
    <p>Once you&rsquo;ve found some interesting-looking projects, join their mailing lists and start &ldquo;lurking&rdquo;. Read the mail that come through the list. Initially you will not understand what people are talking about, but over time you will start to pick up the language, objectives, strategies, concerns and working patterns of the community.</p>

    <h3 id="finding-an-issue-to-work-on">Finding an issue to work on</h3>

    <p>If you are trying to satisfy a specific technical problem, you already know what you want to work on; but if you are looking for something useful to do in order to participate in an ASF project, the project&rsquo;s issue/bug tracker is your friend (you can find a link to it from the project&rsquo;s home page or from its entry on the projects page).</p>
    <p>In the project&rsquo;s issue tracker you will find details of bugs that have been reported and feature requests the project is considering. This should give you some inspiration about how you might be able to help the project community. If you are looking for a beginner-level issue try searching JIRA for issues with the label &ldquo;GSoC&rdquo; or &ldquo;mentor&rdquo;; these are issues the community feels are manageable for someone new to the ASF and their project. The community has also indicated that they are willing to help someone work on those issues through our <a href="https://community.apache.org/newbiefaq.html#NewbieFAQ-AbouttheApacheMentoringProgramme">mentoring program</a>.</p>

    <h2 id="joining-the-community">Joining the community</h2>

    <p>Once you have identified an issue you would like to tackle, it&rsquo;s time to join the project&rsquo;s mailing list (if you haven&rsquo;t already) and get started.</p>
    <p>Remember, community members are usually happy to help you, but they have to get something in return. The community needs to believe that you intend to contribute positively to their work. There is a limit to how much &ldquo;hand-holding&rdquo; you will get, so be ready to do some work if you expect to continue to be helped in your first foray into open source.</p>
    <p>At this point you might want to ask if someone in the community can mentor you. See our <a href="https://community.apache.org/mentorprogrammeapplication.html">mentoring program</a> for guidance on how to do this.</p>
    <p>Alternatively you can dive straight in and work with the community. Since you&rsquo;ve been lurking on the lists for a while, you should have a feel for how to get involved, so go for it.</p>
    <p>A very good first step would be to introduce yourself in an email to the list. Explain your interest in the project and anything relevant in your background or skills, and identify the bug or feature request you would like to work on.</p>
  </div>

  <div class="col-sm-3">
    <div id="further-reading" class="card bg-info">
      <h2 class="h4 card-header text-white">Further Reading</h2>
      <div class="list-group list-group-flush">
        <a class="list-group-item" href="https://community.apache.org//newbiefaq.html">Newbie FAQs</a>
        <a class="list-group-item" href="https://apache.org/foundation/how-it-works.html">How &ldquo;The Apache Way&rdquo; of developing software works</a>
      </div>
    </div>
  </div>
</div>