In my previous post I talked about the example of the UK postal service where software bugs over the years impacting hundreds perhaps thousands of lives of sub-postmasters being wrongly sued and fired for embezzlement and fraud. In this post I am going to talk about my top 10 potential options and ideas that are available to overcome the fact that "all software is flawed".
- Speed is your friend. If we accept that software is going to be flawed, then quick turnaround cycles help fix and push out newer versions of the software that reduce or eliminate defects. So long-cycle release management to short-cycle release management is a potential great tool to overcome software bugs.
- Product Management - Projects tend to prioritize new work at the cost of defects which are relegated to the back-burner. In Product work, work is prioritized every day based on its importance. And when bugs come by they are squashed first with newer features being pushed to later.
- Move to Product teams rather than project teams who go away from the work is done and either there is no one to do the bugs or people who have limited to no knowledge of the code.
- Constantly work to eliminate technical debt - with the constant pressure deliver more (newer features), the older features are left behind with debt. And unmanaged debt will come back to bite you in your ass. Without fail.
- Automate. Automate and more automate. Automate everything that is automatable. But, then again one needs to use intelligence to automate well. A good suite of unit tests supported by functional automation and non-functional automation test bed is a great start. While at it automate the build and release process to support test automation. These are table stakes in the 2020's.
- Experts are often wrong (that is more than 60-80% of the time) so when specific expertise is required, use multiple experts and get them to agree on common things.
- Software development and humans in teams are always complex situations, use mass-sense techniques like always involving all team members in problem solving (at least 50 team-members minimum or all of the team members if less than that) to get multiple perspectives. Initiate multiple safe-to-fail experiments to find the potential answers that might be beneficial. Add additional perspectives by including people who would ask naive/stupid questions or expert people from different industry or technology. There are really no stupid questions. And invest in constant learning. Learning breaks being stuck in the same patterns.
- Don't overlook the obvious - and overthink the problem to come up with complex answers that override the simple. Occam's razor: In layman's terms, the simplest explanation is usually the best one
- It is going to happen again - so continuously set standards and evolve them. Tools, techniques, technology, process all change and can be constantly improved. Instead of forcing processes on the teams, work with them to evolve the standards and evolve improvement plan for all of the work - that includes improving products, tools, methods, technology and process.
- When there are problems, do not stop with a quick fix. Many a time quick fixes become long term solutions. These are going to come to bite you in the ass, again. Anytime a Band-Aid solution is used, immediately initiate the update work that will replace this solution with an updated permanent solution. And permanent might be six months in the technology space. Nothing is long-term with technology and "everything has a half-life, and it degrades"
Software is hard work. And there are no short cuts. You either pay today in terms of time or money or you pay more tomorrow in terms of time, money, poor customer experiences and hardships along with it. It is a Hobson's choice. So pick well - the do it right today option.
For part 1, see:
The cost of flawed software - https://www.2agility.work/all-software-is-flawed/