Conventional Comments : How Better labels makes a Better Software Engineer

Writing Better Code Review Comments

As Software Engineers, we constantly balance technical communication and non-technical communication.

Writing good code is important — but writing clear, respectful, and actionable comments is just as critical.

Poorly written comments slow teams down, create misunderstandings, and introduce unnecessary friction during reviews.


The Problem: Vague Comments

❌ Unclear Feedback

> “Why are we calling this API twice?”

Short comments like this often:

- Sound more aggressive than intended

- Leave the reader guessing about intent

* Create unnecessary back-and-forth

* Lack context or actionable direction

Even when the intention is good, the delivery can create friction.


The Fix: Add Labels

✅ Label Your Comments

Labels immediately clarify:

Intent*

Priority*

Tone*

Before the reader even finishes the sentence.

They help reviewers understand whether something is:

* a question

* a suggestion

* a blocking issue

* a future task

* or just additional context

This reduces misinterpretation and keeps reviews productive.


Conventional Comment Patterns

1. Question

Basic

Why are we calling this API twice?

Better

question: Is there a reason we’re calling this API twice in the same request cycle?

I’m wondering if this is intentional for caching, or if we can reuse the first response.

Why It’s Better

* Neutral and non-accusatory

* Shows curiosity instead of blame

* Suggests a possible direction without assuming a bug


2. Suggestion

Basic

Can we change this to match the wording on the marketing page?

Better

suggestion: Can we align this copy with the wording on the marketing page?

That way, users see consistent terminology across the product and website.

Why It’s Better

Explains why* the suggestion matters

* Connects the change to user experience

* Adds context instead of only requesting change


3. TODO

Basic

@paul to add test coverage.

Better

todo (test): Add unit tests for the error-handling path in `useAuth`.

This should cover the unauthorized and timeout cases.

Why It’s Better

* Avoids dependency on a specific person

* Clearly scoped and actionable

* Easy for anyone on the team to pick up


4. Note

Basic

We need to update our library version on the next sprint.

Better

note: This relies on `react-query@3`, which we plan to upgrade next sprint.

No action needed here — just something to keep in mind.

Why It’s Better

* Explicitly non-blocking

* Provides future context

* Prevents confusion during later refactors


5. Issue

Basic

A vulnerable library needs to be updated before we deploy.

Better

issue (blocking): `lodash@4.17.20` has a known security vulnerability.

We should upgrade to `4.17.21` before deploying to production.

Why It’s Better

* Clearly marked as blocking

* Specific and actionable

* Includes a direct resolution path


Ultra-Compact Cheat Sheet

question: Is this behavior intentional?

suggestion: Could we simplify this to reduce duplication?

todo: Add tests for edge cases.

note: This will change once we migrate to v2.

issue (blocking): This breaks on null input.

Useful for:

* Pull Request reviews

* RFC discussions

* Async collaboration

* Team feedback loops


Rule of Thumb

Good comments answer at least one of these questions:

* Why does this matter?

* What should happen next?

* Is this blocking or informational?


Final Thought

Clear comments scale better than clever ones.

A well-written review comment improves:

* team communication

* onboarding

* collaboration speed

* review quality

* long-term maintainability

Good engineering is not only about writing code.

It’s also about helping other people understand it.