A common enemy to software developers.
The Jets, a British band from the early '80s once wrote a song saying that "love makes the world go round".
Fourty years later, we find ourselves in the middle of a global pandemic and I am here to challenge the status quo by putting my neck on the line with yet another slightly controversial statement.
Software, also makes the world go round.
Think about it, it makes the clock tick in your iPhone, the television you watch Netflix on every evening runs software. Netflix themselves would seize to exist without their behemoth of a software engineering team. All the online shopping on Amazon that you have been doing to get things delivered to your doorstep because you have to isolate & can't leave your house due to COVID-19, needs software, software is everywhere. Even in the vehicle of the Amazon delivery driver who brought your order!
As software developers, we do some complex stuff and in order to do it, we must surely be relatively smart people... right? Even those of us who do not know how to invert a binary tree off the top of our heads... (tongue in cheek)
and that my friends, is part of the problem.
We are living in an era of digital transformation and technology is booming.
This unfortunately though, can have a knock-on effect to us, the developers.
Developing a website for example, used to be simple and simple was the norm. There were only so many ways of doing things. After all, I made my first one over a decade ago.
I had no idea what I was doing, I was a care-free 13-year-old, yahoo searching things & typing random HTML and CSS into Microsoft FrontPage (before joining the cool kids in Dreamweaver land, of course). Sure, the end result was an abomination of tabled nonsense, but it worked.
Still to this day, I make jokes to colleagues about how I still recall being a 15-year-old, hacking away at PHP files in my bedroom, then drag and dropping them in to FileZilla to upload them via FTP (straight to production, of course) and hoping for the best.
I don't mean to say that software development in the past wasn't complex nor that it didn't come with its own wide array of completely different (and often extremely complicated) problems like some of those which we face today (my Dad still tells me stories of punch cards and a client recently spoke to me about back when they used to use FORTRAN with mainframes).
Software development comes in different shapes and sizes and has evolved over the years. So I don't want to compare what is most prominent amongst most of today's developers, to FORTRAN running on IBM mainframes prior to the internet. Rather I'm trying to paint a relatable comparison for most of my generation (or the next) of software developers who are reading this, that they can relate to. The generation who grew up idoling the magic of the internet & can recall how simple building static websites were during its infancy, when they first started writing code or building websites during their own development infancy.
The point is that the number of things such as software libraries, languages, architectures, paradigms and many more things has shown to be directly proportionate to the growth of technology. Back then, things were just... a bit simpler & less overwhelming. There were less trade-offs. There were less options. There were only so many ways to solve the same problem.
You're new to the game and you've only just about managed to wrap your head around SQL. You think you know SQL, you're now confident writing joins and reading some slightly large stored procedures, but realise you've actually only scratched the surface of it. For example, do you know the difference between a culstered index and a non-clustered index? Of course you don't and probably won't even need to know this level of detail to fulfill your role. But you're a perfectionist so you think you have even more to learn... when does it end?
However, before you even have time to breathe, you watch a quick YouTube video at a conference about why MongoDB is amazing and why using Mongoose is easier than having to write out SQL queries manually...
Stress. Levels. Increasing.
Half way through your new journey on trying to become an expert with MongoDB, you catch someone else boast about how much better DynamoDB is. So you decide to read up on it and add it to your ever growing "to learn" list... but it burns every time you see someone else post something about it and you start getting FOMO.
FOMO (Fear of missing out) - anxiety that an exciting or interesting event may currently be happening elsewhere, often aroused by posts seen on social media.
Six months later, there is a new GraphQL kid on the block. But you have not even found the time to try DynamoDB out yet.
Wait what? Aurora gives you serverless databases on demand?
Facebook have released a brand new state management library in RecoilJS?
SO. MUCH. STUFF. TO. LEARN.
You start to feel like all the developers of the world around you are working with and learning state of the art cool stuff. Yet you're still stuck writing PHP, without any intellisense because of how old your codebase is, day in, day out to get a pay cheque in order to eventually spend it on a brand new laptop or state of the art computer, so you can try all these new technologies out on in the evenings & weekends!
Oh, wait. You do exactly that but then are too tired in the evenings & weekends... then you get stuck in a cycle. You start to feel anxious. Are you even any good at your job? You do not know any of the fancy new libraries like Svelte? You have not tried FaunaDB yet? What do you mean you have not built a blog with Gatsby yet?
How dare you have a family who take priority in your life?!
Are you even a software developer anymore? Sounds like the whole world around you, knows more than you do. Maybe you are just not good enough. Maybe you are just getting old and cannot keep up anymore?
Welcome, to both, fear of missing out and imposter syndrome.
Impostor syndrome - a psychological pattern in which one doubts one's accomplishments and has a persistent internalized fear of being exposed as a "fraud".
Mental health is serious and whilst there are software developers who do not suffer from this... I do and I know at least another 8 developers who do. Which is quite a large proportion of developers I'm actually comfortable enough with on a personal level to discuss this with in the first place. Some of whom are literally at the start of their careers as well and have little to no expectation of pressure on their shoulders. This can't be good.
Carolina Gilabert gave an interesting 8-minute-long lightning talk about "impostor" (French spelling, apparently) syndrome and a question that really stood out to me was:
"If you are indeed a fraud, how are you managing to fool all the smart people around you?"
Here is a hint, you are not fooling anybody. You're pretty 'effing awesome at what you do.
There are hundreds of articles, blog posts, reddit posts, conference talks about imposter syndrome in software development on the internet. It is a serious problem. You might not experience it, but someone around you might and as with all anxieties, some affect people more than others and some people make it more visible that they are suffering than others.
You know how people go on Instagram and get drawn in to photoshopped photos of people and their fake lives? It is a similar thing.
Most of us work on smelly, old codebases using older technologies... and that's just fine.
Do you want to know why it's fine? Because Software Development is built on paradigms. You don't need to know the nitty gritty details of absolutely everything and every brand new library, off the top of your head.
Picture it like this. You're a car mechanic. You've been working on Peugeot's & Citroen's for most of the first few years of your career. Suddenly, you get a promotion and now have to work on Japanese cars too, Honda's, Toyota's & so on.
You're nervous at the start. You're out of your comfort zone. For your first couple of jobs, you have to refer back to the manual. No doubt, the underlying workings of the Japanese cars will have differences which are new and unfamiliar to you. However, the fundamentals, the paradigms are the same. They're both cars at the end of the day.
SQL and GraphQL both let you query/mutate a database. They both hook up differently, but most of it is boilerplate that is available via documentation. You don't need to have used GraphQL, to know GraphQL.
C# and Kotlin both let you feed a computer instructions, built on the same fundamental paradigms of loops and conditional statements. You don't need to have built anything in Kotlin, to know Kotlin.
Do you see where I'm going with this? Nothing is rocket science, nothing is impossible. But at the same time, nobody said our jobs were going to be easy, within limits. We're supposed to like a challenge as software developers, aren't we?
Everyone you see who is talking about something new and shiny, has just ticked something off their own "to learn" list. They still have a trillion other things, like you, they want to get through too and believe it or not, even though they probably know this new shiny thing... you also know stuff they most likely don't. But hang on a second, why does it even matter? Why are you comparing yourself to someone else in the first place?
When you drown yourself in lots of these types of people all at once, that is when you stop realising they are not the same people. Rather you start seeing, THIS IS COOL LEARN THIS, THIS IS NEW DO THIS, SHINY THIS, SPARKLY THAT.
Stop comparing yourself not only to other individuals... but your own knowledge to the combined knowledge of numerous other individuals! You only have one brain!
You cannot learn everything at once. You do not need to know everything. If you must suddenly deal with something you do not know, then you learn it on the job. After all, isn't that how we fundamentally all became software developers in the first place? Think about it.
If a framework or new fad is suddenly being described as the next best thing sinced sliced bread by people (admit it, you are thinking of Deno) and it feels like a lot of people suddenly know it and you don't... then it is probably straight forward and easy to pick up whenever you need it, anyways! Believe in yourself!
So, what is the conclusion I want to make with this post? If you suspect someone you know is struggling with it, help them out. If you yourself struggle with it, speak out about it. This also is not just a software developer thing.
An example of a simple cure for this that I've witnessed is simply buying a coffee for that person, having a chat with them and thanking them for everything they do and their contributions. The imposter syndrome stems from people making themselves feel like they are inadequate within their own heads. But once they start to feel valued and encouraged, it can be quickly defeated.
I've suffered from this, some of the best software developers I know have suffered from it, I've mentored developers who suffer from it and most of us will probably continue to suffer from it.
Some of us manage to overcome it in the long run and some of us don't. Which is why we all need to work together to look out for it and work together to try and tame it.
Working remotely during this pandemic has also led to people feeling more isolated that could make the symptoms of this worse. Catch up with your colleagues over a zoom call, have a morning or afternoon coffee/catch-up. Give each other remote pats on the back if and when you have met your sprint goals.
We all became software developers in the first place, because we love doing what we do. As long as you are enjoying what you are doing and still getting that dopamine "buzz" every time you solve a problem or fix a bug, that's all that matters.
I am about a fortnight late from Mental Health Awareness Week 2020, but this is finally done & off my chest. I've written this because it's not only something that I myself can come back to, but also hopefully something that I can refer others to for a quick read, whenever they're getting bouts of this themselves.
We're all in this together, so from one developer to another... stay awesome and thanks for reading!