The core idea
Use a generic when your function, type, or component must work with many types and keep the exact type linked across the code.
If the type does not need to travel from input to output, you probably do not need a generic.
Why it matters
In hackathon apps, you often repeat the same pattern: load users, load events, filter tasks, pick one item, store API responses. Generics let you write one helper and still keep strong types.
This helps your repo look cleaner to reviewers. It also avoids switching back to any just because one helper is shared across different data.