Feedback That Lands: How to Critique Code Without Demotivating People
The Challenge of Code Reviews
You've just completed a code review, and the feedback you provided was met with silence or defensiveness. The code quality isn't improving, and team morale is dipping. This is a common scenario in many engineering teams, where the intention to improve code quality inadvertently leads to demotivation. How can we critique code effectively without discouraging our peers?
Context and Assumptions
This post assumes a tech stack of Java 21, Spring Boot 3.3, and a microservices architecture deployed on AWS. The focus is on backend engineers and system designers working in teams that handle around 2k requests per second. While the principles discussed can be applied broadly, the examples and context are tailored to this environment.
Why This Matters Now (2025-2026 Context)
As we move into 2025 and beyond, the complexity of software systems continues to grow. With the rise of AI-driven development tools and increasingly distributed systems, the need for effective communication in code reviews is more critical than ever. Engineers must navigate not only technical challenges but also interpersonal dynamics to maintain high-quality codebases and cohesive teams.
Step-by-step Approach to Constructive Code Feedback

-
Start with Positives: Begin your feedback by acknowledging what works well in the code. This sets a positive tone and shows appreciation for the effort. For example, "The use of Spring Boot's caching mechanism here is efficient and well-implemented."
-
Be Specific and Objective: Avoid vague comments. Instead of saying "This is not good," specify the issue and its impact. For example, "The current implementation of this method results in an N+1 query problem, which could degrade performance under load."
-
Suggest Improvements: Offer actionable suggestions rather than just pointing out problems. For instance, "Consider using Hibernate's Entity Graphs to optimize the query and reduce the number of database calls."
-
Encourage Discussion: Frame feedback as a conversation starter. Ask questions like, "What do you think about using a different design pattern here?" This invites collaboration and shared problem-solving.
-
Follow Up: After the review, check in to see how the feedback was received and if further clarification is needed. This reinforces your commitment to the team's success and continuous improvement.
// Before: Inefficient query causing N+1 problem
List<Order> orders = orderRepository.findAll();
for (Order order : orders) {
order.setItems(itemRepository.findByOrderId(order.getId()));
}
// After: Optimized query using Entity Graph
@EntityGraph(attributePaths = {"items"})
List<Order> orders = orderRepository.findAll(); // Reduces database calls
Real-world Use Cases or Architecture Patterns
Many companies, like Netflix and Spotify, have adopted a culture of continuous feedback and learning. They use tools like GitHub and GitLab to facilitate code reviews, integrating automated checks to catch common issues early. This allows engineers to focus on more complex feedback that requires human insight.
Common Mistakes Engineers Make

- Being Overly Critical: Focusing only on negatives can demoralize team members. Balance is key.
- Ignoring Context: Feedback should consider the constraints and requirements of the project.
- Lack of Empathy: Remember that behind every line of code is a person who wrote it.
Trade-offs and When NOT to Use This Approach
While constructive feedback is generally beneficial, there are times when it might not be appropriate. For instance, in a high-pressure situation where immediate fixes are needed, detailed feedback might be deferred in favor of quick solutions. Additionally, overly frequent reviews can lead to feedback fatigue, reducing their effectiveness.
How This Impacts System Design Interviews
In system design interviews, the ability to give and receive feedback is crucial. Interviewers often look for candidates who can articulate their thought process and respond constructively to critique. Practicing effective feedback in code reviews can enhance these skills, making you a more compelling candidate.
Practical Recap
- Start with positives to set a constructive tone.
- Be specific and objective in your feedback.
- Offer actionable suggestions for improvement.
- Encourage discussion to foster collaboration.
- Follow up to ensure feedback is understood and implemented.
By adopting these practices, you can transform code reviews from a source of tension into an opportunity for growth and learning, ultimately leading to better code and stronger teams.
