Why do we find it so hard to celebrate the lessons we learn when we make a 'mistake'? Why are so many people worried about getting things wrong? How many times have you heard 'I should have done it this way!' in a disheartened tone?
We can't always be right first time, so we need to give ourselves a break and concentrate on the learnings we can take from things that don't work out the way we hoped. We can't let our perceived failures define us and keep wishing we could change the past - often it's not as bad as we think anyway!
A lot of software development is in the complex domain of the Cynefin framework, especially when we are developing new products. (I'm not going to go into it in any detail, but you can read up on this separately). We do, from time to time, find ourselves in chaos. And there are more familiar tasks that have us in the obvious or complicated realms.
For the purpose of this article, I want to focus on complex, as this is where most projects start. This means that we are dealing with more unknowns than knowns on a daily basis - something I'm sure we can all relate to.
One of the most important things is to ensure we learn from our mistakes - quickly. View them as an opportunity, making a mistake means we have tried something different, something new, taken a risk - and there will always be some positives to take from it.
I'm not saying we should work blindly and keep the blinkers on until we fail, quite the opposite in fact. We need to work in an agile way to ensure the safety of our work.
Regular opportunities to inspect and adapt our work means that mistakes and issues can be found and learned from quickly. This creates a 'safe to fail' environment where experimentation is encouraged and we don't make mistakes, we learn from our experiments. Much better finding issues and resolving them early than late.
In the complex domain, we aren't expected to find a perfect solution straight away - a bit of investigation needs to be completed to find out what can be done and what potential solutions are out there, their pros and cons. You have to do this before you can choose to try a way forward.
We also need to be careful that we don't jump straight to chaos without realising we are actually in complex. Chaos leads us to act first, which could be dangerous when used in the wrong circumstances. Working in the complex domain can be about about recognising when you are in a safe environment, where experiments are there to be learned from, before taking action.
When a situation is new, unpredictable and ever-changing, there are often no right answers, there are many ways to achieve a vision and the goalposts are constantly moving around. Software can be like that - especially when you are engineering a brand new product. New technologies are being developed all the time, user needs are changing at pace - we are repeatedly faced with situations we've never faced before.
So embrace it, challenge yourself to learn from your mistakes - and turn complex work into an experiment that you expect to learn from, not fail. As long as you make the effort to regularly inspect where you are (check surroundings and relevancy of what you are doing) and adapt your approach if needed, you will be successful in the end.