Unit 0 · Lesson 5

Where to Find Help

Every working FRC programmer has a mental map of where answers live. Not because they memorized everything — but because they know which door to knock on. This lesson builds that map, and teaches you how to knock well.

By the end of this lesson, you will:

  • Know the four primary FRC knowledge sources and what each is best for
  • Navigate WPILib documentation and Java API references effectively
  • Search Chief Delphi for existing answers before posting a new question
  • Read and learn from championship team repositories without copy-pasting blind
  • Identify the right vendor documentation for CTRE, REV, and PathPlanner
  • Write a well-formed help request that gets fast, accurate responses
  • Know which resource to reach for based on the type of problem you have

Knowing Where to Look Is Part of the Job

At Team 2910, we say there are no dumb questions — but there are questions asked in the wrong place at the wrong time, and questions asked without doing any groundwork first. A student who searches for 10 minutes before asking will get a better answer, faster, than one who posts immediately. More importantly, they'll retain it.

FRC programming has a genuinely excellent knowledge ecosystem. The WPILib documentation is thorough, Chief Delphi has been accumulating community wisdom since 2003, and some of the best robotics engineers in STEM post their team's code publicly for anyone to read. Learning to navigate all of that is a skill that will serve you long after your FRC career ends.

🔍 Event Note: Resources under match pressure

At competition, you have ten minutes between matches to diagnose and fix problems. There is no time for a forum search. The teams that recover fastest aren't the ones who look everything up — they're the ones who built enough baseline knowledge during build season that they already know where the problem is likely to be. Use these resources now, during learning, so you need them less when it counts.

The Four Primary Sources

👇 Click each card to learn what it's best for
📘
WPILib Docs
tap to learn more
Best for

Authoritative answers about WPILib classes, robot modes, subsystems, and commands. Always start here for WPILib-specific questions. Maintained by the WPILib team — if it's in the docs, it's correct for the current season.

💬
Chief Delphi
tap to learn more
Best for

Community knowledge, edge cases, and "has anyone seen this before?" questions. 20+ years of FRC history lives here. WPILib developers, CTRE and REV engineers, and championship team mentors all post regularly. Search before you post.

🏆
Team Repos
tap to learn more
Best for

Seeing how elite teams structure real competition code. When the docs explain what an API does but not how to use it well in practice, championship code shows you. Read to understand patterns — not to copy and paste.

🔧
Vendor Docs
tap to learn more
Best for

Hardware-specific API details that WPILib docs don't cover — TalonFX configuration, SparkMax control modes, PathPlanner path creation. If something involves a specific motor controller or sensor brand, go to that vendor's documentation first.

Which Resource for Which Problem

For any question about WPILib classes, robot modes, commands, subsystems, or the Gradle build system — start with the official documentation. It's actively maintained, season-specific, and written by the people who built the library.

📗
WPILib Docs docs.wpilib.org Conceptual guides, step-by-step tutorials, and reference material. Covers everything from TimedRobot to advanced Command-Based patterns. Use the search bar — it's well-indexed.
WPILib Java API Reference github.wpilib.org/allwpilib/docs/release/java/ Full Javadoc for every WPILib class and method. When you see a class in someone else's code and want to know every method it exposes, this is where you look. Bookmark it.
💻
WPILib GitHub github.com/wpilibsuite/allwpilib The source code for WPILib itself. When documentation is ambiguous, reading the implementation is the ultimate answer. Also where to file bug reports and track known issues.
💬
WPILib Discord discord.gg/wpilib The fastest way to ask WPILib-specific questions. WPILib developers are active here. Read the pinned messages before asking, and always include a code snippet and the exact error.
💡 How to read WPILib Javadoc

Find the class you're using in the left sidebar or search bar. The class summary shows what it's for. Scroll to "Method Summary" for a table of all available methods — each links to a detailed description with parameter types and return values. When VS Code shows a red underline on a method call, the Javadoc for that class will tell you exactly what parameters it expects.

When the problem involves specific hardware — a TalonFX not responding, a CANcoder reading wrong values, a SparkMax throwing faults — the vendor's own documentation and tools are your first stop. WPILib docs won't cover vendor-specific behavior.

🔶
CTRE Phoenix 6 Docs api.ctr-electronics.com/phoenix6/release/java/ Full API reference for TalonFX, CANcoder, Pigeon 2, and CANivore. Also covers Phoenix Tuner X, device configuration, and Signal API. Start here for any CTRE hardware issue.
🟢
REV Robotics Docs docs.revrobotics.com REVLib API, SparkMax and SparkFlex configuration, motor tuning, and the REV Hardware Client. Includes examples for closed-loop control and encoder setup.
🛣️
PathPlanner Docs pathplanner.dev/home.html Documentation for the PathPlanner GUI and Java library. Covers path creation, holonomic drive controllers, and on-the-fly path generation. Essential for Unit 9.
📷
PhotonVision Docs docs.photonvision.org Setup, camera calibration, and PhotonLib Java API. Covers AprilTag detection, pose estimation, and multi-camera configurations. Essential for Unit 10.
💡 Vendor docs are season-specific

Both CTRE and REV update their documentation each season. A tutorial written for Phoenix 5 will not work for Phoenix 6 — they have entirely different APIs. Always check that the documentation page you're reading matches the library version in your vendordeps/ folder. If you see class names that don't match what VS Code suggests, you're probably reading the wrong year's docs.

Documentation tells you what the API does. Championship code shows you what it looks like when used well, at scale, under competition pressure. These teams publish their work publicly as a gift to the community — learn from it.

⚙️
Team 2910 — Jack in the Bot github.com/FRCTeam2910 Multiple world championship wins. Excellent examples of swerve drive, Command-Based architecture, and AdvantageKit integration. This curriculum is based on how 2910 trains its programmers.
🧀
Team 254 — Cheesy Poofs github.com/Team254 The most decorated FRC team in history. Their code introduced many patterns that are now standard across the community. Excellent for advanced control theory and superstructure design.
🔬
Team 6328 — Mechanical Advantage github.com/Mechanical-Advantage Created AdvantageKit and AdvantageScope. Pioneers of deterministic logging and simulation-first development. Essential reading for Unit 11. Their blog posts are also outstanding.
🎯
Team 3015 — Ranger Robotics github.com/3015RangerRobotics Consistently clean, readable code. Good examples of PathPlanner integration and well-structured Command-Based design at a regional competition scale.
💡 How to read championship code productively

Don't start at Main.java and read linearly. Instead: find a concept you're currently learning — say, how they structure a swerve module — and navigate directly to that subsystem. Read the class, understand the pattern, then trace the dependencies. The goal is understanding why they made a choice, not collecting code to paste. If you can't explain why a line of code exists, don't use it.

When documentation doesn't cover your specific situation, the FRC community usually has. These are the places where the broader community gathers — choose the right one based on how quickly you need an answer and how complex your question is.

🗣️
Chief Delphi chiefdelphi.com The primary FRC forum. 20+ years of accumulated knowledge. Best for complex questions that need a detailed answer. WPILib devs and veteran mentors respond regularly. Always search first.
💬
FRC Discord discord.gg/frc Real-time community chat. Good for quick questions and live help during competition. Find the #programming channel. Response time is much faster than a forum post.
📺
FRC YouTube youtube.com — search "FRC programming" Teams like 6328 and content creators publish walkthrough videos for swerve, vision, and other complex topics. Good supplement to text documentation when a concept isn't clicking.
🔴
WPILib GitHub Issues github.com/wpilibsuite/allwpilib/issues If you've hit what might be a WPILib bug — not a user error — search the issues list first. If it's not there, file a detailed report. WPILib responds to confirmed bugs quickly.

Navigating a Championship Team's Repository

When you open a repository like Team 6328's or Team 254's for the first time, the sheer amount of code can be overwhelming. Here's the mental model: you're not reading a textbook cover to cover — you're using it as a reference. Click each file or folder below to learn where to start.

  github.com / Mechanical-Advantage / 2024-robot
📄 README.md start here
📁 src/main/java/frc/robot/subsystems/ most useful
🚗 Drive.java
Shooter.java
📁 src/main/java/frc/robot/commands/
🤖 RobotContainer.java architecture map
⚙️ Constants.java
📁 src/main/java/frc/robot/util/
📁 src/main/java/frc/robot/subsystems/drive/ io pattern
← click a file or folder to learn where to start

How to Ask a Good Question

The quality of the answer you get is directly related to the quality of your question. A vague question gets a request for clarification. A well-formed question gets a solution. Here's the difference in practice.

❌ Weak question
"My motor doesn't work. Here is my code: [entire Robot.java file] Please help."
No goal stated. No error message. No hardware context. Dumps an entire file. The responder has to ask five follow-up questions before helping.
✅ Strong question
"I'm trying to spin a TalonFX (Kraken X60, CAN ID 1) at 50% output in TeleOp. The motor appears in Phoenix Tuner X but doesn't move when I enable. No faults shown. Here's the relevant code: [10 lines]. Is there something wrong with how I'm calling set()?"
States the goal. Names the hardware. Confirms prior checks. Shares a minimal snippet. Asks a specific question. This gets a direct answer.

Before You Post — The Good Question Checklist

Work through this before submitting a question to Chief Delphi or any Discord channel. Click each item as you complete it.

Good question checklist 0 / 6 complete
I searched first Searched WPILib docs, Chief Delphi, and Google for the exact error message or behavior. Most questions have been asked before.
I stated my goal I explained what I'm trying to accomplish — not just what's failing. "I want X to happen" tells responders context "it doesn't work" never does.
I included the exact error Copied the full error message or stack trace — not a paraphrase. "It says something about null" is not an error message.
I included a minimal code snippet Shared the relevant 5–20 lines, not the entire file. Used a code block (backticks on Discord, code formatting on Chief Delphi).
I named my hardware Specified the motor controller model, CAN ID, vendor library version, and any relevant configuration. Hardware context is essential for FRC questions.
I described what I've already tried Listed the things I checked or changed that didn't fix the problem. This prevents responders from suggesting things I've already ruled out.

Your question is ready to post. You'll get a fast, accurate answer.

🔌 System Check

⚙️ Build Your Reference Kit Now

This lesson has no physical hardware requirement — but it does have a homework equivalent. Before you move to Unit 1, complete each of these once so the resources are already familiar when you need them under pressure:

  • Bookmark these URLs in a dedicated "FRC Programming" folder: docs.wpilib.org, github.wpilib.org/allwpilib/docs/release/java/, chiefdelphi.com, api.ctr-electronics.com, docs.revrobotics.com
  • Make a GitHub account if you don't have one. You need it to clone private team repos, follow team accounts, and eventually contribute to your own team's codebase.
  • Join the WPILib Discord and FRC Discord. You don't need to post anything — just get set up so you can reach those channels when you need them during competition week.
  • Open Team 2910's most recent robot repo on GitHub. Find the drivetrain subsystem. Don't try to understand everything — just find it, note the file name, and notice the structure. You'll read it in detail during Unit 7.
  • Searching Chief Delphi effectively: The built-in search is good. For more precise results, use Google with site:chiefdelphi.com followed by your search terms. Try it now with a topic from this unit: site:chiefdelphi.com roboRIO imaging 2025.

Knowledge Check

Click an answer to check your understanding.

Your SparkMax motor controller is connected and appears in REV Hardware Client, but calling sparkMax.set(0.5) in code does nothing. Which resource should you check first?
  • 1WPILib documentation — SparkMax is a WPILib class
  • 2Team 254's GitHub — they've used SparkMax in past seasons
  • 3REV Robotics documentation — SparkMax is a REV product and its control API is vendor-specific
  • 4The FRC Discord general channel
You want to understand how a championship team structures their autonomous routines using PathPlanner. You find Team 6328's 2024 repository. What's the most productive way to start reading it?
  • 1Start at Main.java and read every file in order
  • 2Copy the entire autonomous directory into your own project
  • 3Navigate directly to their autonomous commands and RobotContainer.java, read to understand the pattern, then trace the dependencies
  • 4Only read files that have fewer than 50 lines to avoid complexity
A teammate posts this question on Chief Delphi: "My code doesn't work please help." What is the single most important element they are missing that would get them a useful response?
  • 1A more polite tone
  • 2The name of their programming mentor
  • 3A specific description of what they're trying to do, what behavior they're seeing, and the exact error message or relevant code
  • 4A link to the WPILib documentation page for the class they're using
💪 Practice Prompt

Build Your Reference Toolkit

These tasks build the muscle memory for using these resources. Do them once now so they feel familiar when you're under pressure at competition.

  1. Open docs.wpilib.org and find the page explaining the TimedRobot class. What does the documentation say happens in the robot loop every 20 milliseconds? Find the Javadoc link for the same class and confirm the method signatures match.
  2. Go to Chief Delphi and search for "roboRIO brownout prevention". Find one thread with useful technical information. What was the most actionable piece of advice in that thread? Note the username of whoever posted it — you'll notice veteran contributors come up again and again.
  3. Open Team 2910's most recent robot repository on GitHub. Find the file that defines their swerve module. What class does it extend? What vendor library does it import at the top?
  4. Open the CTRE Phoenix 6 Javadoc and look up the TalonFX class. Find the setControl() method. What does it take as a parameter? What is a ControlRequest? (You don't need to understand it fully yet — just locate the information.)
  5. Write a practice question. Think of something from Lessons 1–4 that genuinely confused you. Write a help request that passes all six items in the Good Question Checklist — even if you already know the answer now. This is a skill that improves with deliberate practice.