Naming Things: The Skill Nobody Teaches
Good names make code readable without comments. Bad names make code that requires explanation at every turn. The difference between them is not style - it is precision of thought.
Good names make code readable without comments. Bad names make code that requires explanation at every turn. The difference between them is not style - it is precision of thought.
AI tools change how code is written. They do not change what makes a pull request good. But they do change the failure modes - and what reviewers need to watch for.
AI coding assistants make you faster. They can also make your codebase worse if you use them without a framework. The difference is in how you review and own what gets generated.
Andrej Karpathy coined vibe coding to describe accepting AI output without deep engagement. The mode is legitimate for low-stakes work. The risk is when it becomes the default - and you stop noticing the gradual loss of understanding.
What technical debt actually is, how to distinguish debt worth paying from debt worth ignoring, and how to make the case for cleanup work to a non-technical stakeholder.
A commit is not a diff - it is a snapshot. Understanding the object model inside .git/objects changes how you think about branches, merges, and history.
A commit message is a letter to whoever debugs this code next. Here is how to write one that actually helps.
Most teams argue about Gitflow vs trunk-based development. The better question is what you are actually trying to solve.
A code review is not a gatekeeping exercise. Here is what makes them useful - from both sides of the diff.
Refactoring is changing structure without changing behavior. The hard part is keeping those two things separate.