Patience is more than a virtue, it's a skill
There are plenty of technical skills to achieve, be sure that patience is one of them.
Like any other skill we acquire in software development, patience is a skill we can improve on daily. Some people will learn this earlier than others, but for many of us, it takes persistence and practice. And in many cases our impatience forces mistakes, or we apply patience in the wrong way. With coaching this can be improved.
An interesting idea is that patience is a skill we should apply to software. And further, the more patience you apply the better the software becomes. For many of us this could sound problematic because of our deadline driven development. How can you possibly be patient if you are up against a timeline and need a solution fast? Software is usually not designed by just one person, and good ideas usually come together quicker in groups. So what is the power of patience in software design?
First, you have to remind yourself that software is never done. It’s this false sense of completion that we glean from thinking of very linear efforts: design, build, deliver. The reality is we repeat that process over and over again. I used to say “there are robots on Mars” as a way to motivate teams around finding a solution, but something I learned was that it had multiple points. Obviously we’ve had robots on Mars so we can achieve anything, but also it proves that software is never complete. In fact all of the rovers put on Mars received updates to their software - while on Mars.
The new software was transmitted at 2Kbit/sec. over three days until all of the 8MB of files had been uploaded.
Todd R. Weiss, Computerworld
The process of updating Ingenuity’s flight control software will follow established processes for validation with careful and deliberate steps to move the new software through the rover to the base station and then to the helicopter.
Patience in software means that you don’t have to solve everything right now. In fact for some problems it is far better to wait to see results from smaller tests, than to try and deliver a fully formed solution. The magic trick is that patience comes in forms like decomposing problems down to simpler steps, and breaking apart complexities to focus on them individually. Having patience is not how we immediately describe this, but it certainly is the affect.
I had a coaching moment very early in my working career, when my boss tried to ease my frustration with my co-workers by telling me “not every one is Clint”. It was a jarring reaction that I had never experienced before. In the moment, I remember not understanding what he meant. I also recall feeling like he was just pandering to my impatience. But I eventually understood that I was holding my own personal standards against others, and that if I wanted everyone else to raise theirs I was going to have to give everyone time and space to catch up. (more on ego and arrogance later)
Organizing any group of individuals to work together is in of itself very challenging. Forget software, just think of all the events or activities you have been a part of that required everyone to just be at the same place, at the same time. So now add the complexity of software, and you have to force yourself to be patient and wait for teams to become aligned. Software developers are notorious for being clever, and in many cases very eager to prove it to everyone. This creates micro-competitions on teams that accelerate the work unwittingly. Everyone is racing to get their ideas or code into the product to prove their value to the team. Good leadership finds ways to maintain a healthy balance between good momentum for the product, and providing space for everyone to contribute in their individual ways.
A very frequent topic I encounter with software developers is career growth. It always comes in the form of this question: How do I get promoted? It’s a good question, and the best answer is not the one people want to hear. Getting promoted or advancing in your career path always requires patience. This is not unique to software, but there are things about this type of work that we have to remind ourselves is different than others.
First, it’s not enough to be excellent at writing code. That’s the obvious start, but you must also be capable of delivering code to users. There is a huge learning curve on how to do this well, let alone all of the methodologies for CI/CD in software development. You must build patience to understand that real value of software is in the improved outcomes for users, and not simply in your achievement.
Second, advancement usually comes in the form of increased scope or responsibilities. And this means working with others, or more accurately, leading others to get work done. This is recursive to the leadership section above. Apply that here too.
Lastly, we all make mistakes, and this is where most of us suffer from impatience. It’s very easy to get down on ourselves after mistakes, especially when they impact more than just the code we write. It’s hard to remind ourselves that we are all learning every day, and that we need to forgive ourselves during that process. None of us will be perfect and we need to be sure to have patience for these moments of learning.
What does coaching provide?
Most software developers learn patience the hard way. But it doesn’t have to be that way. With coaching you can learn how to build patterns for yourself that remind you to exercise patience. You can learn to detect moments of impatience, respond to them differently, and improve your daily experiences. Coaching can also provide you support in building those patience muscles. It helps to have opportunities to vent and get honest and direct feedback, before you make mistakes. Patience is a skill that can be learned, and that makes it all the better a virtue.