Genuinely good at
- Boilerplate, a form, a CRUD endpoint, a config file
- Explaining unfamiliar code or an error message
- Translating between languages or frameworks
- Naming things, writing tests, drafting documentation
- The syntax you always look up, regex, date formats, CSS grid
Unreliable at
- Facts about your specific project. It has not read your database
- Recent library versions. It may confidently use an API that was removed
- Security decisions. It produces code that works, not code that is safe
- Saying "I don't know". A confident wrong answer looks exactly like a right one
The one habit that matters
Treat every response as a draft from a fast, well-read colleague who has never seen your codebase and will not admit uncertainty. Useful, and not something you merge unread.
The trap for beginners
Code you did not understand becomes code you cannot debug. When it breaks at 11pm, you are reading it for the first time. If you cannot explain a line, do not ship it. Ask what it does until you can.