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.