This came out of a thread of tweets. I composed last night.
Like many of you, I've been reflecting a lot on why I do the things I do (particularly my blog).
For me, it's about helping programmer's with their Inner Game.
What do I mean by that?
Here are my notes on the Inner Game of Software Development.
- To be a successful software developer you are playing an outer game and an inner game. The outer game deals with the world around you, the inner game deals with the world inside you. They are related, and affect one another, but there is a boundary.
- The outer game is relational and circumstantial. It means hiting targets, identifying/delivering value, producing code and documentation, making use of opportunity, building relationships, influencing the world. It's how most people measure success, which is valid but incomplete.
- The outer game is important, but you only have so much control over it. The COVID crisis is an excellent example of how the outer game can quickly change. None of us were to know the precise details of when, where, and how exactly a pandemic would strike.
- The inner game is a game played in your own mind. It's about responses to circumstances, mental state, capacity to focus, mental and physical energy, mindset, attitude, inner dialog, self awareness, life satisfaction, emotional intelligence and other personal psychological qualities.
- The outer game is often emphasized while training to be a software developer. The outer game skills are important and necessary for success, but they are not the full story. Learning about the inner game - and how to play it - will amplify your experience of being a developer in subtle and not-so-subtle ways.
- The foundational skill of the inner game is self-awareness. This is the ability to identify the aspects of your internal experience - in particular, physical, emotional and cognitive structures and experiences - that interfere with your ability to write code. A short course in mindfulness meditation is an excellent way of developing your self awareness. I teach this, ask me about it.
- Self-awareness is like a superpower for a programmer. It allows you to debug yourself, by giving you a clear picture of your internal state and processes at a given time, which allows you to take appropriate action to modify that state if required (immediately, or over a period of time) to more easily achieve your outer game goals.
- Managing your inner dialog is another inner game skill that allows you to moderate and harness self-doubt, impostor syndrome, frustration and other forms of negative self talk that can hold you back when creating software.
- Being aware of the voice (or voices) in yourinner dialog, and learning how to successfully relate to it - especially your inner critic - will bring great dividends in all areas of your coding life.
- Energy management is a crucial inner game skill that helps you manage stress, prevent burnout and make sure you can keep coding in a sustainable manner. In my experience, programming culture does not, promote sensible personal energy management techniques.
- This includes promoting a reliance on caffeine, long hours/all night culture, poor diet and so on. A few changes to your physical well-being can have hugely positive effects on your energy levels. A burnt out programmer is no good to anyone.
- Emotional intelligence is a particular form of self-awareness that focuses on how your emotional state, and your understanding of the emotional state of others, affects your experience and performance. It's particularly useful in the context of development team and stakeholder relationships. It's the interface between the inner and the outer games.
- Obviously this is influenced by your own particular neurodiversity, but there are ways for many of us to develop this aspect of the game. Again, meditation helps, so does journaling, self-reflection and a bit of education.
- Cultivating mental qualities is important for software developers because we rely on our mental processes to produce code. Learning to manage distractions (external and internal) is another key part of the inner game of software development. This is another place where mindfulness meditation can help.
- Mindset is not often mentioned in software development circles. This means learning to re-frame "failure" as "learning", viewing problems as challenges (growth mindset), making use of feedback, using the scientific method and giving without expectation.
- Defining success internally is a particular form of mindset that I've relied on. For example, I've defined success in terms of having more time to work on creative pursuits, so I sacrifice salary by working part-time in order to spend time on the things that I love.
- For a while that meant "just" doing Wordpress development (rather than my full capacity of running hardcore web-dev teams). Neither of these make sense from a typical "outer game" point of view, but made perfect sense from my inner game definition of success.
- The outer game is often outside of your control. Reality will provide you with a stream of events - opportunities as well as challenges - that sometimes have nothing to do with the effort you are putting in. I still advise shaping your external reality as much as you can. But recognise the inherent limits.
- Your inner game is yours. There is always room to explore the structures of your mind, learn more about how you habitually do things and whether there are better ways. Let me know how I can help.
Top comments (24)
Great content!
In my experience, not many people even have active awareness that any of the aspects of the inner game exist, much less go on to realize that the only people who end up successful (outer game) and happy (inner game) are those who excel at both.
Each one of the points you reference is a discussion in itself.
Agreed. Took me quite a while to figure out what was going on. This is very much a set of notes for a series of longer articles, maybe a short book! There was a fashion of The Inner Game... books back in the 80s I think.
The 80's? The paragraphs are already numbered! Let's write is up as a Bible and start a cult! 🙋🏻♂️🔮🤩🤩🤩
🤣 Serious now.
I think it's a great shame that developers are often blinded to the understanding of their own thought processes.
Our natural tendencies are different than most people, and there's practically nobody shedding light on such issues.
Great content, man. Great content.
Thank you. It flowed out as a set of notes :) my plan is to tidy and extend.
Any topics in particular you'd like me to elaborate on?
I was quite touched by your descriptions on working with easier stuff for a while to ease your mind - I had to do that myself.
I'd like your full detailed account, to be honest. 🙈
Cool - there are two reasons to do that. One is self-compassion (you need to go easy on yourself), the second is values (you've decided that something else is actually more important in your life - a side project or passion project - and you'd like to give more of yourself to it). Both are valid, it can seem a bit unwise to people around you to step back or take "less responsibility" but the inner game part is the acknowledgement that it's your life and you know best what's good for you. And watching your own inner resistance.
I'll write heaps more on this soon.
Thanks for the feedback!
Top post, for my interests precisely! I would like to add cognitive skills (mental qualities) and social skills (social emotional quotient and people hacking vs solitude) and creativity and more depth to all of your topics. We often exclude prose from the many books we read to have more time for the technical books of our trade, yet it is literature of human situations that requires deeper awareness and insight into their relationships both help to increase mental qualities too and perhaps, to some extent, help to get a handle on the variety of human conditions of our existences. However the inner "game" as a metaphor has an aspect that seems a little short-sighted to me. There is an important difference between divergent and convergent thinking and "games" have rules and these rules are usually mastered in the way of convergent thinking while development and mastering software engineering requires divergent thinking too. Something to ponder on for me too.
Thank you for the insightful comment! The game metaphor is not my own - there were a number of famous books (The innner game of Tennis, the inner game of music and so on) and I'm riffing on that. I think you are correct, understanding, working with and developing mental qualities is a big part of it, especially EQ. I often argue that software development is a creative act, more akin to the composition of music than the building of a bridge. It sounds like you've thought about this a bit already, reach out if you'd like to continue the conversation!
Why not ?!! Delighted, no - thrilled!
Daragh - great read.
Did you play sports? This reminds me of playing highly competitive tennis and what it takes for a high-performing athlete to remain high-performing. I love how you used the paths of inner and outer "game" to help engineers better think about how they show up in the space.
I would love to hear you speak about how as a manager you can monitor the inner & outer game of your team to be more effective, or perhaps - the other way around how do developers communicate their parts of their inner game to enable managers to be better for them.
This is actually adapted from The Inner Game of Tennis, which was a coaching phenomena many years ago!
That's a good question. I guess openness of communication/psychological safety is part of it. Let me think about it.
Yes, I played sports and can relate to the high level of competition in tennis. The principles you mentioned are similar to those in "The Inner Game of Tennis," which focuses on the mental side of sports. For more great sports content, check out tiroalpalotv.es.
Thankyou Sir for this article on our stubborn mindset,
Please give some ideas how to change the mindset while solving the coding problems if one idea doesn't work?
I find it difficult sometimes
What sort of difficult mindset do you experience? Frustration? Anger? Not feeling able to solve the problem?
Often I find it useful to substitute words in my thinking. For example, if I am thinking "I can't fix this..." I turn it into "I can't fix this... yet".
Also the mindset of having to fail a number of times before you succeed - it's OK when things don't work, because it obviously wasn't the right answer! So you've learned something in this case, it's not a waste of time...
Let me know more specifically what you struggle with!
In some tough questions,I misinterpret the logic so after trying the most I see the solution and I feel down that it couldn't cracked by me so I didn't practicecoding after 1-3 days which makes me question that how can I achieve the logic?
Please suggest me Sir how can I work towards it.
How to build complicated logics?
The biggest shift in mindset is to be kind to yourself. You are learning! Of course you don't know anything. Of course you will look back and think - oh, I should have seen that. But these moments are part of the process. So don't give yourself a hard time for not understanding. In a year's time, or even a few months, you'll remember this moment and be able to apply the same logic, and then you will be proud of yourself.
You build complex logic out of lots of simple pieces of logic wired together, break it down, be patient and be kind with yourself! And don't be afraid to ask for help :)
Thankyou Sir I will remember your words while practicing coding
Nice it's great that it talks about it so much on the need to have both.
Yes. But the inner is overlooked and we need to cultivate it.
Yes definitely the problem in it might be they may be bogged down to their perspective on the outer mindset due to the short term advantage that comes with it.
That's an excellent point, thank you!
This is excellent! Very true.
Thank you for this beautiful content. Health to your hands. More content like this content should be produced!