In my extensive software development experience, I've identified two primary mindsets: Customer-Oriented and Engineering-Oriented. The Customer-Oriented mindset places users at the heart of decision-making, while the Engineering-Oriented mindset prioritizes technical excellence and best practices. Both approaches aim to create high-quality software, but their focuses differ significantly.
Many engineers tend to adopt an engineering-oriented mindset, concentrating on delivering technically sound solutions. They take pride in writing elegant code, optimizing performance, and maintaining clean codebases. While this approach often leads to robust and efficient software, it can sometimes create a gap between the product and its users. As Robert C. Martin pointed out in his book "Clean Code: A Handbook of Agile Software Craftsmanship" (2008),
"The only valid measurement of code quality is WTFs/minute"
This quote emphasizes that even technically perfect code is of little value if it doesn't effectively meet user needs.
I have discovered that adopting a customer-oriented mindset shifts the focus to user satisfaction and business value. Engineers with this approach actively seek user feedback and are willing to make technical compromises for a more user-friendly product. This aligns closely with Tim Brown's Design Thinking principles. In his Harvard Business Review article "Design Thinking" (2008) (p86), Brown states,
"Innovation is powered by a thorough understanding, through direct observation, of what people want and need in their lives and what they like or dislike about the way particular products are made, packaged, marketed, sold, and supported".
The focus on deeply understanding user needs aligns perfectly with a customer-oriented approach, which should be the preferred mindset. In today's competitive software market, user experience and customer satisfaction are crucial differentiators. As Peter Drucker famously said in his book The Practice of Management (1954),
"The purpose of a business is to create and keep a customer"
I believe this principle applies equally to software development: a technically perfect product that fails to meet user needs is ultimately a failure. Throughout our careers, we have all experienced using external software for payroll or travel booking. We may have considered the user interface terrible and hoped for startups to disrupt the market. Unfortunately, that's not always the case because individual needs often differ from the needs of the customers of the product, in this case, your company. Those external software vendors are focused on their customers - your employer - not you.
I see these mindsets as complementary rather than mutually exclusive. In my view, the optimal approach is to strike a balance, with a preference for the customer-oriented end. This balanced approach is effectively demonstrated in the Agile methodology, which places equal emphasis on technical excellence and customer collaboration. The first principle of the Agile Manifesto (2001) states,
"Our highest priority is to satisfy the customer through early and continuous delivery of valuable software."
By wholeheartedly embracing a customer-centric mindset and upholding high engineering standards, software teams can confidently create products that are both technically sound and highly valued by users.