14 Strategies for Objectivity in Software Development

Crafting Code, Not Egos

As a former software engineer turned Product Owner, I’ve navigated the full spectrum of emotions that come with writing and reviewing code. The protective instinct we feel over our creations is natural, but it can also become a hindrance if not managed properly.

When I was still a programmer, I remember the sense of ownership that came with every function, class, or module I wrote. It was a piece of me, a testament to my problem-solving skills and hard work. This attachment often led to spirited defenses during code reviews, where I would argue for the merits of my approach, sometimes overlooking the broader picture of what the team was trying to achieve. It wasn’t just about the quality or efficiency of the code; it was personal.

Transitioning into the role of a Product Owner, my perspective shifted. I began to see the bigger picture, understanding that each line of code, no matter how elegantly written or cleverly executed, is part of a larger system designed to serve a purpose beyond individual achievement. It became clear that emotional attachment to code could lead to resistance against necessary changes, impacting productivity and stifling innovation.

In Agile environments, where adaptability and collaboration are key, such attachments can be particularly problematic. They can create bottlenecks, reduce the willingness to refactor or delete code, and ultimately slow down the iterative process that drives improvement. When developers hold onto their code too tightly, they may miss opportunities to learn from others and to enhance the overall quality of the application.

To address this challenge, I have found it essential to foster a culture where detachment from individual contributions is encouraged without diminishing the value of each team member’s work. One effective strategy has been to emphasize the collective ownership of the codebase. By shifting the focus from individual authorship to team responsibility, developers begin to see their work as a contribution to a group effort rather than a standalone masterpiece.

The IKEA effect, a term coined from the Swedish furniture giant known for its ready-to-assemble products, encapsulates a psychological phenomenon that extends far beyond the realm of flat-pack tables and bookcases. It speaks to a fundamental aspect of human nature: the value we assign to our own labor and the creations that result from it.

At its core, the IKEA effect is about investment and perceived value. When individuals invest effort into creating something, they tend to value the end product more highly than if they had not put in any work at all. This cognitive bias isn’t limited to physical objects; it applies equally to the intangible, such as the code written by software developers.

In the context of software development, the IKEA effect can be observed when developers spend hours, days, or even weeks crafting a piece of code. The process involves problem-solving, creativity, and a series of decisions that reflect the developer’s unique approach and understanding. Each line of code becomes infused with the developer’s intellectual labor, making it feel like a personal extension of themselves.

This attachment to one’s own work is not inherently negative. It can drive developers to produce high-quality work and take pride in their craftsmanship. However, it also has the potential to cloud judgment, leading to an overestimation of the code’s quality or relevance. In a field where change is constant and adaptation is necessary, this bias can become a barrier to progress.

/images/gaiusred_IKEA_in_Cyberspace_6d52ff53-69cf-4b34-af19-60ffa0c68e22.png Emotional attachment to code can manifest in various ways within a software development team, often leading to inefficiencies and conflicts that can hinder the progress of a project. When developers become too attached to their code, they may resist necessary changes, advocate for their solutions despite evidence to the contrary, or struggle to accept feedback. This can create friction within teams, as the collaborative nature of software development requires openness to critique and the ability to adapt quickly.

One of the most significant inefficiencies caused by emotional attachment is the reluctance to refactor or delete code. I recall a time when a colleague had spent several weeks perfecting a feature. The code was elegant and well-documented, but as the project evolved, it became clear that the feature was no longer needed. The suggestion to remove it was met with resistance- I can only conclude that my colleague couldn’t bear to see his hard work go to waste. It took multiple meetings and discussions to convince him that holding onto unnecessary code would only add to the maintenance burden and potentially introduce bugs down the line.

This experience highlighted how emotional attachment can cloud our judgment. As developers, we need to remember that code serves a purpose beyond its existence. It’s a means to an end, not the end itself. Holding onto code for sentimental reasons is akin to hoarding; it clutters the codebase and complicates future development efforts.

Another area where emotional attachment can lead to conflict is during code reviews. These sessions are meant to be constructive, yet they can quickly devolve into defensive arguments when developers take criticism personally. I’ve been in situations where I’ve suggested improvements to a piece of code, only to be met with hostility. The developer in question felt as though their competence was being attacked, rather than understanding that the review process is about enhancing the quality of the codebase as a whole.

In one particular instance, a peer review escalated to the point where the team’s productivity suffered. A developer had introduced a new algorithm that, while functional, was not the most efficient solution. During the review, alternative approaches were proposed, but the developer insisted that their method was superior. The ensuing debate consumed valuable time that could have been spent moving the project forward. It was only after stepping back and discussing the broader goals of the project that the developer agreed to consider the alternatives.

It’s not just during code reviews that emotional attachment can cause friction. The entire development lifecycle can be affected by this bias. For instance, when prioritizing tasks, developers might push for their own work to be given precedence, believing it to be more critical than it actually is. This can lead to skewed project timelines and misallocated resources, as less important features are developed over those that would deliver greater value to the end-user.

I remember a project where two developers were so invested in their respective modules that they lost sight of the project’s deadlines. Each believed their work was paramount to the project’s success and should be prioritized accordingly. This led to a standoff, with neither willing to yield, and the release date looming. It took intervention from higher management to realign priorities, but not without cost to the team’s morale and cohesion.

Moreover, emotional attachment can also blind developers to the potential for improvement. There have been times when I’ve clung to a particular framework or technology stack simply because I was comfortable with it, even though a new tool had emerged that could significantly reduce development time. It’s a humbling experience to realize that your attachment to a certain way of doing things can hold back innovation. Embracing change and continuous learning is crucial in an industry that evolves at breakneck speed.

These anecdotes underscore the importance of detaching oneself from the code. In a professional environment, the focus should always be on delivering the best possible product, which sometimes means letting go of individual contributions for the greater good. It’s essential to foster a culture where feedback is seen as an opportunity for growth, not as a personal affront.

/images/gaiusred_IKEA_in_Cyberspace_75a453bc-47aa-40f4-bbb0-3399de0e87b1.png Accepting constructive criticism is a fundamental skill for any software developer aiming to grow professionally and contribute effectively to their team. Here are some practical strategies to help developers receive feedback gracefully and use it to improve their work:

1. Cultivate a Growth Mindset

Developers should approach their work with the understanding that there is always room for improvement. By adopting a growth mindset, they can view criticism not as an attack on their abilities but as an opportunity to learn and enhance their skills. This perspective encourages them to seek out feedback proactively and respond to it positively.

2. Understand the Intent of Reviews

It’s important to remember that code reviews are not personal. Their purpose is to ensure the quality and maintainability of the codebase, not to judge the worth of the individual who wrote the code. When receiving feedback, focus on the technical aspects being discussed rather than perceiving it as a reflection of your competence.

3. Separate “You” from Your Code

One effective way to detach emotionally is to mentally separate yourself from your code. Remind yourself that you are not your code; you are the craftsman, and the code is simply your craft. This distinction helps in depersonalizing feedback and viewing your work objectively.

4. Practice Active Listening

During reviews or discussions, practice active listening. Pay attention to what is being said without formulating a response while the other person is still talking. This ensures that you fully understand the feedback and consider it thoughtfully before responding.

5. Ask Clarifying Questions

If feedback is unclear or seems unfounded, don’t hesitate to ask for clarification. Sometimes, misunderstandings arise from communication gaps rather than actual disagreement about the code. Clarifying questions can also demonstrate your openness to dialogue and your commitment to understanding the reviewer’s perspective.

6. Reflect Before Reacting

Take time to process feedback before reacting, especially if your initial response is defensive. Step away from the situation if needed, and allow yourself to cool down. Reflect on the feedback with a clear mind, considering how it can be applied to improve your work.

7. Embrace Team Goals

Shift your focus from personal attachment to team objectives. Recognize that each piece of code contributes to a larger project goal, and the success of the project is a collective achievement. Aligning with team goals helps in prioritizing the project’s needs over individual preferences.

8. Encourage Peer Programming

As mentioned earlier, pair programming can help reduce emotional attachment by sharing ownership of the code. It also provides immediate feedback and fosters a collaborative environment where the emphasis is on the best solution rather than individual contributions.

9. Document Rationale for Decisions

When writing code, document your reasoning for the decisions you make. This can be helpful during reviews, as it provides context for your choices and can lead to more informed discussions. It also allows you to revisit your own thought process and evaluate it critically in light of new information or perspectives.

10. Celebrate Learning, Not Just Success

Create a team culture that values learning and growth over simply achieving success. Celebrate when team members learn from feedback and improve their work. This reinforces the idea that the journey is as important as the destination and that setbacks are just another step in the learning process.

11. Use Metrics Wisely

Metrics can be a useful tool for assessing the quality of code objectively. However, they should be used wisely and not become the sole focus. Overemphasis on metrics can lead to a fixation on numbers rather than the underlying principles of good coding practices. Balance quantitative analysis with qualitative insights to maintain a holistic view of code quality.

12. Encourage Reflection and Retrospection

Regularly scheduled retrospectives can provide a forum for reflecting on both successes and areas for improvement. Encourage team members to share experiences where detachment from code led to positive outcomes. Reflecting on these moments can reinforce the benefits of staying objective and can help others in the team to adopt similar attitudes.

13. Lead by Example

As a leader or more experienced member of the team, demonstrate how to receive and apply feedback constructively. Your behavior sets the tone for the rest of the team. By showing that you value feedback and are willing to make changes based on it, you encourage others to do the same.

14. Celebrate Team Achievements

Make it a habit to celebrate team achievements rather than individual contributions. This helps to reinforce the idea that everyone is working towards a common goal and that the team’s success is more important than any single piece of code.

By implementing these strategies, developers can learn to detach themselves from their code, viewing it as a part of a larger collaborative effort rather than a personal extension of themselves. This detachment allows for greater flexibility, adaptability, and ultimately leads to a more robust and successful project outcome. It also fosters a healthier team dynamic where feedback is welcomed, learning is continuous, and innovation thrives.

/images/gaiusred_Ikea_in_Cyberspace_aa582fd1-25af-4690-b857-f2effcf162fd.png In conclusion, the journey of a software developer is one of continuous evolution—not just in terms of technical skills and knowledge but also in the way we approach our work emotionally. The IKEA effect, while a natural human response to our own labor, can become a stumbling block in the collaborative and ever-changing landscape of software development. Recognizing and overcoming emotional attachment to code is crucial for personal growth, team dynamics, and project success.

We’ve explored various strategies to mitigate the impact of this cognitive bias, from fostering a growth mindset to normalizing the evolution of code. By cultivating an environment where constructive criticism is valued, where the distinction between self and code is clear, and where the focus remains steadfastly on collective goals rather than individual ownership, we pave the way for more efficient, adaptable, and innovative development processes.

Pair programming, code stewardship, and regular retrospectives are just a few of the practical approaches that can help developers detach from their work. These practices encourage a shared sense of responsibility and a recognition that the true measure of success lies not in the lines of code we write but in the problems we solve and the value we create for users.

Leadership plays a pivotal role in this cultural shift. When those in leadership positions lead by example—showing openness to feedback, willingness to adapt, and commitment to team achievements—they inspire their teams to do the same. This creates a virtuous cycle of improvement, where learning from mistakes is celebrated, and the pursuit of excellence is a collective endeavor.

As we move forward in our careers, it’s important to remember that our professional identities are not defined by any single piece of code or project. They are shaped by our ability to collaborate, our resilience in the face of change, and our dedication to crafting solutions that stand the test of time. Letting go of emotional attachment doesn’t mean losing passion for our work; it means channeling that passion into a broader vision, one that transcends individual contributions and reflects the collaborative spirit of software development.

The next time you find yourself bristling at the suggestion to refactor or remove your code, take a moment to step back. Consider the feedback objectively, weigh it against the project’s goals, and remember that every end is a new beginning in the world of coding. Embrace the impermanence of your creations as a space for new ideas to flourish. After all, the code we write today may be tomorrow’s legacy, but the lessons we learn and the relationships we build along the way are the true enduring legacy of our craft.

Whether you’re a seasoned developer or just starting out, I hope this article has provided you with valuable insights into managing emotional attachment to your work. Thank you for reading!


Note: This was first published as a LinkedIn article.