One of the most common questions asked in software development is “What features should we build?”. This is usually followed by “How do we build it?” along with several other questions like “What is the opportunity size of our addressable market?”, “How confident are we in the size of opportunity?”, “How will we get our first customers?” and more. These questions arise because software development is innately a massive exercise of uncertainty. There is no manual, formula or methodology that contains exact steps which will guarantee that our software’s success when we set off to build it. By success, I’m referring to software that is profitable as result of providing it’s consumers with enduring benefits. Although deep inside, many of us secretly hope that our software product will make us millions of dollars. But the reality is that it takes many iterations of learning, measuring, implementation and luck (believe it or not), before a product starts to materialise benefits which consumers are willing to paid for. A sustainable software product is like apple trees in that sense; they can grow very big, whilst taking anywhere from four to eight years, before they yield their first crop of apples. Yet, there is nothing that compares to eating a delicious, crunchy apple straight off a tree.
In the last few months, 4 common themes struck me as I reflected upon software product development endeavours that I participated in. As I have shared and discussed these themes with close colleagues, the themes have rang true. I present my case below for each of the common themes.
Note that as I was writing this article, I realised that these are the same traits that make us successful in life.
Purpose is power for the mind.
People and organisations require fuel for motivation and clarity when working towards a common goal. This fuel is purpose. Purpose helps us to answer the “why” and to resolve the inherit uncertainty in situations. More specifically, it makes us feel passionate about a goal, provides meaning to our efforts and contributions, helps us to stay focused, makes us feel important, encourages trust and, most importantly, incentivises us to get through the “hard stuff” especially when our own self-interests are aligned with that of our team and mission. When they are not aligned, teams are not able to produce the horse power to get through the “hard stuff” because software is hard. In this case, people tend deliver outcomes, that are just adequate enough to satisfy the immediately perceived internal organisational pressures, which unfortunately is often in a different direction and space than what is required to deliver tangible benefits to the consumers of our software products. People also need to be reminded to repeatedly prioritise their efforts on solving the right problem. In the world of developing software, working solving the wrong problems is the norm but a high risk as it is an expensive exercise that has negative impacts on a team’s productivity. And so for all these reasons, we need to have a well-defined purpose that is communicated repeatedly throughout the business to create successful software.
Knowledge is king.
When developing software, there are two types of knowledge that is needed: (1) knowledge about the domain for the product being developed and (2) knowledge obtained through critical thinking and collaboration with other experts so that the hard questions can be answered. The former is a self-explanatory. But, the latter significantly contributes to a team’s sustainability and ability to address the challenge that they will need to confront if they are to succeed. The hardest problem in development software product rests at the intersection of uncertainty and complexity. Those that have succeeded in the solving this intersection adopt rational approaches to both knowledge discovery and decision-making. They are overtly aware and work to mitigate the thinking faults (eg. adding more people to the project increases speed) that we all share as humans. These abilities help us to reduce uncertainty and navigate complexity which ultimately enables us to make better software decisions. Being human, we also need to be mindful that our decisions are further complicated by the influence of our mental short cuts (aka heuristics in judgement and decision-making). The winners understand the human short-comings and work in ways to avoid falling victim to them. The strength comes from recognising their weaknesses instead of denying them. And the classic gut feel and experience alone will often end in disappointment especially if luck is not on one’s side. So, deep and thorough knowledge is needed to inspire asking the right questions and quality of communication to ensure our software is successful.
Communication is the art of curiosity.
Everyone recognises that communication is important; it has come to the point that it has become a motherhood statement. This is not to say that we don’t need communication or that it’s a bad thing, but what differentiates those that are successful is that they understand communication is just a noun used to label a group of actions. They don’t say “I am going to communicate such and such”. Instead, they say “I am going to resolve…”, “I am going to align…” and “I am going to move such and such forward”. They need to have “real” conversations and “connect” with their team members, stakeholders and the consumers of their software products. Their ability to do this comes from courage and speaking truth to power. Without communication, developing software would not be possible. To be frank, it’s a guaranteed failure because communication is involved at every step and level of software development — from debates about which problems are worth solving to calculating a feasible investment amount, understanding the customers’ needs and writing code. Business requirements, prototypes, wireframes, designs, daily stand ups, workshops, retrospectives and iteration planning are some of the tangible artefacts and activities from our communication. These are then used to both establish and maintain a shared understanding amongst the people building the software product. The people, who are great listeners and have a great sense of awareness, are considered to have effective and intelligent communication respectively. This quality of communication highly influences the productivity and thus success of a software product.
Trust in the people over process.
Trust is imperative to success. When it comes to software development, trust is an essential component for the team delivering the product and their productivity. Trust is the reliability of knowing how others will or will not respond. In may ways, it is not about a positive or negative response so much as it is to know which it will be with a degree of certainty. When creating an environment where people are unsure what will happen next or how their input will be received, people will be driven to inaction because it becomes that only “safe” option. Trust allows “team members to feel safe with each other, they feel comfortable to open up, take appropriate risks, and expose vulnerabilities.” Although, it was observed that trust is placed in either the people or a process. By this, I’m referring to the teams that focus too much on “following” the process and system that they forget to be inquisitive and think critically about the information they learn and discover along the way. Unfortunately, believing that processes and systems will deliver the certainty we crave is delusional. Processes are a hallmark of low-trust environments which breed failure. On the other hand, when there is reliability, a vast majority of time, humans make things better and add more value. Therefore, in high-trust environments, team morale skyrockets from the self-fulfilling satisfaction of the right balance of communication, interactions, learnings and autonomy amongst team members.
“Strive not to be a success, but rather to be of value” — Albert Einstein
You may have noticed that these key elements are interconnected. The purpose is the underlying force that drives communication, knowledge and trust. A deep understanding and clarity around the purpose prompts us to grow and challenge our knowledge about what benefits the software should demonstrate, as well as how to implement the software. Knowledge builds trust through effective communication and enables us to discover opportunities. Furthermore, trust creates strong, cohesive teams that can achieve anything — people over process.
“The purpose of life is not happiness, it’s usefulness”. Our lives are no different from developing successful software because software is only successful if it is useful. When it is useful, value is created. Without tangible benefits, people will not use or pay for your software. In fact, software products are just the medium which value is delivered to the customer.
And so to survive the rapid technology changes and ensure commercial viability, software teams needs to have a balanced orchestration of purpose, knowledge, communication and trust. From my observations and that of my colleagues, the successful software products (and therefore teams) achieve a balance between the benefits offered by a software product with the appropriate development approach, which ultimate drives the development cost of a product. In other words, teams that manage to balance the “Value (Benefit) versus Effort (Cost)” equation create successful software.
Do you want more? Follow me or read more here.