Contributor Mindset
This section is the "soft skills with hard edges" half of the curriculum. The
Levels teach you the mechanics — how Tez builds a DAG, how the
DAGAppMaster schedules tasks, how the shuffle moves bytes. This section teaches you how the
Apache Tez project works: how decisions are made, how patches are accepted, how trust is
earned, and how a contributor becomes a committer.
These are not optional skills. A technically excellent patch with poor process around it will
sit on JIRA for a year and get closed as stale. A modest patch with clean process — a linked
JIRA, a green Yetus run, a dev@ thread that shows your homework — gets reviewed and
committed. The difference is rarely the code.
You should also calibrate one hard fact before you start: Tez is a mature, maintenance-phase project with a very small active committer set. Sample it yourself:
cd ~/tez-src
git shortlog -sn --since="2 years ago" | head -10
At the time of writing that list is short. Two people — Raghav Aggarwal and Laszlo Bodor — account for the large majority of commits over the last two years (roughly 32 and 28 respectively), with a long tail of contributors at one or two commits each. The founders whose names dominate the all-time log — Hitesh Shah (~619 commits), Siddharth Seth (~611), Bikas Saha (~403), Jonathan Eagles (~272), Rajesh Balamohan (~246) — are largely inactive now. Recent work is overwhelmingly maintenance: build modernization (Yetus, Jenkins, Java 21 and 25 support), dependency upgrades, Spotless/SpotBugs hygiene, and a slow-moving "[Cloud]" container-image effort. This shapes everything. A low-traffic project means slow reviews, a handful of gatekeepers, and enormous leverage for anyone who shows up consistently and does clean work. It also means the design conversations that mattered mostly already happened — and they are sitting in JIRA, which is why two of the seven chapters below are about excavating that history.
Reading Order
The chapters mirror the actual arc of a new contributor: learn to read, learn where the design lives, learn to talk, learn to ship a patch, learn to iterate, learn what you may break, learn how trust accrues.
| # | Chapter | What it answers | When to read |
|---|---|---|---|
| 1 | Reading the Codebase | How do I navigate ~200k LOC across 17 modules without drowning? | Before any lab; pre-work |
| 2 | Design via JIRA | Where does design live in Apache Tez, and how do I recover the "why"? | Before you propose a change |
| 3 | Community Interaction | How do I talk to dev@ and JIRA without burning trust? | Before your first patch |
| 4 | Patch Quality | What does a committer-ready patch look like? | Before you open a PR |
| 5 | Responding to Feedback | How do I handle review comments well? | The moment a review lands |
| 6 | Compatibility | What can I change without breaking users? | Before touching wire/API/config surfaces |
| 7 | Meritocracy | How does a contributor become a committer or PMC member? | When you think beyond one patch |
Chapters 1–2 are pre-work — read them before opening any JIRA. Chapters 3–5 are operational — read them before submitting your first patch. Chapters 6–7 are strategic — read them when you start thinking beyond a single change.
The Arc: User → Contributor → Committer
Everyone on the Tez PMC started as a user. The project bylaws
(docs/src/site/markdown/by-laws.md in the checkout) name four roles — User,
Developer (contributor), Committer, PMC member — and they form a ladder you climb
by doing the visible work at each rung.
| You are… | You do… | The project sees… |
|---|---|---|
| A user who reads code | Run Tez under Hive; read ShuffleVertexManager to understand a slow query | Nothing yet — but you are building the context that makes your later patches credible |
| A contributor whose patches merge | File a JIRA with a repro, open a PR, iterate on review, land a fix | A name that shows up on dev@, on JIRA, and in the commit log with reviewed by |
| A committer who is trusted | Review others' PRs, shepherd JIRAs, cut the occasional release candidate | Someone the PMC can hand the keys to |
The bylaws are explicit that a developer "who makes sustained, welcome contributions" may be
invited to become a committer, and that "the form of contribution is not limited to code — it
can also include code review, helping out users on the mailing lists, documentation." On a
small project this is not abstract: the current active committers review nearly every merge
(grep the log for reviewed by Laszlo Bodor and you will see one name recur). Becoming the
third or fourth person who reliably reviews and unstalls patches is a concrete, open slot —
see Meritocracy.
How This Section Complements the Rest of the Book
The relationship is concrete. Each mindset chapter pairs with technical material and with the issue roadmap, which is where you pick the real JIRA you will actually work.
| Mindset chapter | Pairs with |
|---|---|
| Reading the Codebase | Level 3 AM-internals deep dives |
| Design via JIRA | The issue roadmap — choosing what to work on |
| Community Interaction | Any lab that ends "now post it to dev@" |
| Patch Quality | Level 2 Lab: Prepare a Patch |
| Compatibility | Level 7 protocol & wire-format labs |
| Meritocracy | The Release & PMC section |
If you are doing the Capstone, you should have read all seven chapters by the time you reach the step where you attach your real patch. The Capstone is graded in part on process — the things this section teaches.
What This Section Is Not
It is not generic open-source advice. Every claim, template, and procedure here is grounded in Tez-specific reality that you can verify in your own clone:
- The Apache Tez JIRA project (TEZ) and the
TEZ-NNNNreferences peppered through the source (grep -rn "TEZ-[0-9]" tez-dag/src/main). - The
dev@tez.apache.orgmailing list and its archive at lists.apache.org. - In-repo policy and tooling:
.asf.yaml,.github/workflows/build.yml,dev-support/tez-personality.sh(the Apache Yetus personality), the Checkstyle config attez-build-tools/src/main/resources/checkstyle/checkstyle.xml, and the Spotless rules underdev-support/spotless/. - The project bylaws in
docs/src/site/markdown/by-laws.md, published at tez.apache.org. - The
@Public/@Private/@Evolving/@Unstableannotations that mark the API contract intez-api.
Where a chapter generalizes to Apache-wide norms, it labels the generalization. Where it states a Tez-specific rule, it cites the in-repo file or the JIRA where the rule was set.
Prerequisites
Before this section is useful you must have:
- A local clone of Tez at
~/tez-src:git clone https://github.com/apache/tez.git ~/tez-src cd ~/tez-src - A JIRA account at issues.apache.org/jira. This is your
contribution identity — Tez tracks work in JIRA, not GitHub Issues (they are disabled;
see
features: issues: falsein.asf.yaml). - A subscription to
dev@tez.apache.org— send empty mail todev-subscribe@tez.apache.organd confirm the reply. - A GitHub account. Since roughly late 2019 the working unit of change is a GitHub pull
request linked to a JIRA, squash-merged (
enabled_merge_buttons: squash: truein.asf.yaml). The old attached-.patch-file workflow is history you will still meet in old JIRAs — Community Interaction explains both. - An ASF ID is not required — that comes later, with committership.
You Have Absorbed This Section When…
Treat this as the gate before declaring the section "read." You have absorbed it when you can:
- Find any feature in Tez within 10 minutes by tracing from
TezClient.submitDAGorDAGAppMaster.main, usinggit log -S, IDE call hierarchy, andTest*classes as spec. - Recover the "why" behind a piece of code:
git blame→ theTEZ-NNNNin the commit message → the JIRA and its design discussion. - Write a JIRA description a committer can act on with zero follow-up questions.
- Produce a patch that passes Checkstyle and the changed-module tests on the first try, is attached to a JIRA, and is offered as a GitHub PR the way the project takes them today.
- Read a
@Public/@Privateannotation and predict what you may and may not change. - Explain the difference between a contributor, a committer, and a PMC member, and describe a realistic track record that leads from the first to the second on a project this small.
The next chapter — Reading the Codebase — gives you the navigation strategy you will use through everything that follows.