When a struct holds a reference, you must annotate its lifetime so the compiler knows the reference won't outlive the data. The syntax <'a> declares a lifetime parameter, and &'a str ties the reference to that lifetime. This ensures that as long as the struct exists, the borrowed data is valid. Lifetimes can feel abstract at first, but they're just a way to express "this reference lives at least as long as that." I use them in parsers, config structs, and iterators where copying data would be wasteful. The compiler infers lifetimes in most function signatures, but structs require explicit annotations. Once you're comfortable with lifetimes, you can write zero-copy APIs that are both safe and fast.