Everything Is More Complex Than We Think It Is
To this day, I still remember a short conversation I had with a classmate. This was back in 2013, when I was still studying in college. During recess, we discussed potential companies we'd like to work for. As I answered Spotify, my classmate remarked "Huh? Why would they need any developers? I mean, they already have a finished product!"
That same year, Spotify had in excess of 900 employees worldwide of which 300 were engineers, while continuing to expand.
I remember this particular exchange, because it exemplifies how everything in life is drastically more complex or harder than we think it is. It's only once we take the time to understand or experience something, that we start grasping the extent of our ignorance. What's also interesting is that the less we know, the more prone we are to having larger disparities between our perceptions and reality, with seemingly no upper limits. And this can remain unchanged, no matter how often we interact with the very things we are ignorant about.
While this phenomenon has impacts on society in more ways than I could ever imagine, I'd like to discuss it in the context of software. Before getting there, I'd like to bring up sports as it's more relatable to most people while sharing similarities to software. To round things off, I'll reveal how my mindset has changed upon understanding this phenomenon.
Watching a Sport We Know Little About
Remember the last time you watched a sport that you knew little to nothing about? That sport might've been basketball. It might've been golf or ice hockey. It might've even been an esport such as Counter-Strike or League of Legends.
If you don't know anything about basketball, all you'd see during a match between two teams is a bunch of tall people running around with no rhyme or reason, trying to throw a ball towards a hoop. If you don't know anything about Counter-Strike, all you'd see are a bunch of overgrown children glued to their monitors, pushing keys with one hand on a titled keyboard while doing flick motions with the other. As a personal example, whenever I come across golf highlights, I can't register much beyond seeing people swinging a stick.
But, as you understand more of that sport through playing it or becoming an avid fan of it, you start noticing more and more nuances and intricacies. Using basketball as an example, you notice the subtle movements players make to freeze their defenders for a split second. You also start understanding how a player's ability is a function of a myriad of skills. These skills can be obvious ones like shooting, dribbling, passing and athleticism. But there are also less obvious skills like game awareness, experience, coachability and your ability to cooperate with and inspire teammates. To top things off, each skill also expands into more skills which in turn also do the same. And the more someone knows about basketball, the more they'll be able to identify the sheer number and depth of skills.
Although you may not know much about a particular sport, consider this fact: hundreds of millions of people play association football and basketball around the world. Out of all those people, some have managed to distinguish themselves as the top 100 players in a sport. While that in itself is an astonishing accomplishment, there are players among those 100 that have managed to distinguish themselves even further. This speaks volumes about the complexity of sports.
Software In Comparison
When it comes to software, I speculate that it's harder for a person to understand and appreciate the complexities of it, in comparison to other fields.
To explain myself, think about some of the most complex software in the world: Google Search, Facebook, Youtube, Spotify, Chrome, Android and Windows (seeing this list may already be a surprise). No matter how large or complex each of them are, they're invisible. This is in stark contrast to buildings, where any reasonable person would realize a skyscraper is more complex than a tent. In addition, these applications and operating systems are ridiculously accessible today, to the point of being literally at our fingertips. A sheer amount of work is also put into polishing their design and user experience. As an end user, you don't see the amount of talented personnel required to build these applications. You don't see the massive infrastructures in place. You don't, for the most part, notice the countless iterations taking place. You also certainly don't see the thought applied to the files, classes and functions that make up the millions of lines of code.
Also, in contrast to sports, software and developers don't remotely garner the same amount of public attention or respect for being great. Although we constantly see highlights of spectacular plays and accomplishments in sports, the same very rarely happens when it comes to software. Admittedly, while watching a high-flying dunk is way more exciting to me than watching someone code a great application, I do wonder how things will change in the future. As software becomes even more prevalent and more and more kids experience what it means to create and not just use software, I wonder if our society will start holding software in higher regard.
The Quality Gap Between Software and Skill Gap Between Developers
Of all the things sports and software have in common, it's worth highlighting one thing: There are vast differences when it comes to the quality and usability of software. For instance, I recently learned that Spotify returns the first second or two of each song together with the search suggestions. This way, you don't even notice that the songs you're playing actually don't originate from your hard drive. It's without a doubt one of countless things Spotify does to enhance user experience.
Contrast this with a bad application, where you struggle to even click on a search box. Once you do manage and start typing your query, search suggestions appear slowly because there's no local cache and no index set up on the backend. To add insult to injury, you have to type the full and exact name of songs or artists, including any apostrophes or dollar signs. To make matters somehow even worse, odd covers of songs appear before the original song in the result set. This is assuming that the backend is working, because it's constantly under heavy load from handling expensive queries that are neither debounced by the application or throttled by the backend itself.
When it comes to developers, there's also a gigantic skill gap between average and great. This is because, like basketball, a developer's skill is dependent on such a large variety of skills, where each skill branches into skills of greater and greater detail. The list is long and, like basketball, includes things that are less obvious. For example, I only recently realized that empathy belongs on that list. By having empathy, you're more considerate about end users as well as the next person maintaining your code. Having empathy also allows you to better understand the needs of your colleagues as well as the company as a whole. Empathy is also an important component of communication, where you need to adapt how you deliver your message depending on your audience.
While the existence of these gaps might be baffling, it's no more different than the gaps that exist in sports. From the outside, Lionel Messi is not much different from any other person. Yet, his ability as a football player is worlds apart better than the average person.
How My Mindset Has Changed
Although I didn't go on to graduate from college, it was instrumental in helping me begin to realize the complexities of the world. Compared to how I was five years ago, I approach things with a greater degree of humility and have become a more introspective person. I realize there's a lot to learn in this world, and that the moment I think otherwise, is when I've become too ignorant. I've also developed a tremendous amount of respect for and look up to people who are great at their profession, regardless of what industry they work in.
What I've also learned is that, as a developer, I prefer working for companies that hold the quality of its software in high regard. Both because quality has a clear and recognized business value to them, and because the companies in question understand that building such software requires great talent, resources and attention to detail. By the same token, I also understand that such companies set a high hiring bar which is one of several reasons why I continously strive to improve.