Engineers spend most of their learning time on technical implementation content. Things like new frameworks, languages or cloud platforms.
But turning solutions into code is a tiny part of what you do and it’s getting less valuable year by year.
As we’ve seen with “no-code” and tools like GitHub Copilot, the implementation part of our role is increasingly becoming commoditised.
You could generalise that the value an engineer brings to a team is their ability to analyse problems and synthesise context. The part of your role as an engineer that will never be replaced by “no-code” or AI is this high level cognition.
The true human aspect of being an engineer is working in a team and considering other people’s ideas, emotions and thoughts while solving these problems.
So shouldn’t you train these meta-cognition skills as much as you train the specific technologies?
Every engineer should spend time learning and applying general tools for thinking. These tools are applicable to almost all problems so the compounded payback on your invested time is huge.
Clearer thinking will amplify all the other skills you have and any frameworks or tools you learn will give you results for the rest of your career.
Like any skill, improving the way you think takes deliberate study and practice.
These are some of the tools and systems for thinking that I refer back to all the time.
1. Take care of yourself first!
A healthy, rested mind and body will produce better cognition. Take the time to take care of yourself.
More work will always be there, there is no end to work except the limit we put on it ourselves. There will always be another problem to fix next. Because of this you have to manage your workload yourself. It's OK to work a couple of long days here or there but your mood, cognitive ability and decision making skills are all negatively affected by over-work.
One simple thing to start doing when you find your mood is atypical or you're completely stuck on a problem is to stop working. These days most organisations will not notice or care if you leave a few hours early one day. I prefer if someone on my team takes an early afternoon if they're not feeling great and they don't need to tell anyone.
It's difficult for all of us to be aware of an atypical mood at the time it's happening. Often we have to have someone else point it out to us. Being able to notice our own emotions is one aspect of mindfulness and these days there are millions of blog posts, books and podcasts on techniques on mindfulness. I have a headspace account and get grounding and perspective every time I use one of their sessions.
Other straight-forward ways to take care of yourself are to get enough sleep and have self-compassion. I say straight-forward here because the concepts are straight-forward but in practice it's difficult to change life-long habits. The trick is to keep learning, keep trying.
There are some practical well-being guides for specific scenarios here: https://psyche.co/guides.
2. Control your biases
We all have biases, it's just part of being human. We can reduce their effect by being aware of them. A nice example of this is preventing groupthink and domineering team members by enforcing a strict structure in meetings. e.g. having everyone write down their thoughts on a topic individually or in small teams for a few minutes and letting each team talk about their points in order afterwards.
The book Factfulness by Hans Rosling, Ola Rosling, Anna Rosling Rönnlund does an incredible job at explaining some of our biases and provides ways to reduce their effect.
They produced this handy poster to remind you what to do about common biases. It won't make much sense without the book so I highly recommend reading it.
A nice bias reduction that I saw recently was for fixing the "culture fit" issue in hiring. "Culture fit" is a terrible measure of a potential hire because it ultimately boils down to "Do I like this person?" or "Is this person like me?". During hiring if you have a measure for "culture fit" out of 10 you should consider changing it to a "company values fit" measurement instead. This way a candidate aligns with the organisation, not the hiring team.
3. Learn some well known mental models
A mental model is a codified thought process about how something works. The mental model is usually based in closed system with a number of assumptions.
If we can categorise problems and assumptions and associate them with specific mental models then risks can be reduced or a path to a solution can appear. Mental models are closely related to first-principles thinking where you start with "What are we absolutely sure is true here?" and then you build on that.
Learning and applying mental models will change the way you think.
A good example of a mental model is the Scientific Method. With the Scientific Method you have a hypothesis and you design an experiment to test the hypothesis. The result is added to your body of knowledge and this feeds into the next hypothesis. If your result proves the hypothesis wrong, that is still useful learning that can feed into the next experiment.
We're so used to using the scientific method in every industry these days that it's difficult to consider a time where it didn't exist in a codified form.
There are hundreds of these models, too many to know them all. It's best to learn a couple of them that resonate with you. There are some nice lists of mental models on the internet. These are some of the lists I use when I need to look up a model
4. Thinking is the work!
The software engineering role is creative, contemplative and collaborative. The "coding" part of the role is implementation. You still have to produce code that does stuff, there's no argument there. But it's not as important as you might think.
In the past engineers were often measured on their specific outputs by an organisation e.g. tickets completed or features released. These are coding implementation outputs. Focusing on developer's outputs, especially a specific developer, is wrong and most good orgs have realised this by now.
If you're a new engineer you should know that not every organisation expects you to be at your computer coding for 8 hours a day. That's not a great situation and you should consider finding a better place when you have an opportunity.
Instead you should be focusing on producing great business results. This requires thinking, study and collaboration before writing any code. You need to make the space for yourself to do this thinking. These are some simple things you can start doing to give yourself time to think.
Simple things you can change today to give yourself space to think are
- Control your calendar - block out sessions to reduce interruptions
- Include time for thinking in your estimates - Reduce time pressure on yourself
- Go for walks to improve thinking - walking has physiological effects on brain function
- Finish early if stuck on a problem - trying to force it wont work, your brain will continue working on the problem in the background
- Write to clarify thinking - writing forces you to think deeply about an approach
5. Comparing yourself to others can be extremely destructive
- "Comparison is the thief of joy" - Theodore Roosevelt
- "Whatever you worship will destroy you. If you worship power you will always feel weak, if you worship beauty you will always feel ugly." - David Foster Wallace
The general idea here is that if you're comparing yourself upwards to others then you will always feel inferior because there will always be a better example of whatever you're comparing.
If you have high self-esteem on a specific topic or high self-esteem in general then comparing yourself to others can have positive effects through improving your motivation. You do have to be careful because a recent threat to your self-esteem can turn a positive comparison into a negative comparison.
So you can use comparison to increase your drive and motivation but be careful you're not letting it affect your self-esteem. Instead you can focus on helping others and having close relationships with them. Remember that most of us are average by definition and that's OK!
David Foster Wallace gave a great commencement speech on this topic here
6. Break creative deadlocks with Oblique Strategies
Oblique strategies are a set of cards developed by Brian Eno and Peter Schmidt.
The cards contain prompts that can be used to break a deadlock or dilemma situation.
There are online versions here. I prefer the first one.
7. Learning and self-compassion
Engineering is a role where you always have to learn new things to stay relevant.
Each new thing you learn adds to your base of knowledge but all engineers have to return to a beginners mindset regularly just to stay up-to-date with technology.
It's important to remember that it takes a long time for a beginner in anything to produce excellent work.
Ira Glass has a wonderful note on this.
"Nobody tells this to people who are beginners, I wish someone told me. All of us who do creative work, we get into it because we have good taste. But there is this gap. For the first couple years you make stuff, it’s just not that good. It’s trying to be good, it has potential, but it’s not.
But your taste, the thing that got you into the game, is still killer. And your taste is why your work disappoints you. A lot of people never get past this phase, they quit. Most people I know who do interesting, creative work went through years of this.
We know our work doesn’t have this special thing that we want it to have. We all go through this. And if you are just starting out or you are still in this phase, you gotta know it's normal and the most important thing you can do is do a lot of work. Put yourself on a deadline so that every week you will finish one story.
It is only by going through a volume of work that you will close that gap, and your work will be as good as your ambitions. And I took longer to figure out how to do this than anyone I’ve ever met.
It’s gonna take awhile. It’s normal to take a while. You’ve just gotta fight your way through."
It's easy to get overwhelmed with all the new frameworks, features and technologies coming out everyday. It's easy to fall into a trap of falling behind and "framework fatigue". Just remember that it's not possible for a single engineer to be proficient in everything so there's no point worrying about it.
Ignore the blog spam about new tech until there's significant adoption. Pick some technologies that interest you and learn those well.
Software engineers are in an occupation where primary value is driven by thinking, not implementation.
Software engineering tools are getting better and tasks that required an engineer 5 years ago are commoditised into button clicks today. The value in engineering these problems today is knowing which approach will best solve the business problem at hand. This requires clear synthesis and working well with experts from other disciplines.
You probably already spend a lot of time improving specific technical knowledge. You should spend the same amount of time thinking about thinking. Knowledge based roles and meta-cognition require a healthy mind so actively take care of your mental well-being!