Unicorns and Where to Find Them: Corporate Edition
Disclaimer
Unicorns are fictional characters that where once created by stories, but continue to live on through job postings
Once Upon A Time
I am back at it again with another sorry excuse for a blog. In my last one, we talked a little about some issues that the software development industry has been facing, and I was able to have many productive conversations as an outcome of the article. So now, it’s time to stimulate another talk.
First off, if you believed in unicorns, I am sorry to burst your bubble, but they don’t exist. So at this point, you have an answer to the title and you could honestly just click out, but I think you will enjoy what I have to talk about. Especially if you are a developer.
Today’s topic will be the market of software engineers when it comes to job requirements. Whether you are hunting for a job, working as a consultant where you switch projects often, or even just checking out of curiosity, we have all seen some absurd job requirements and someone has to talk about it. So, I will take one for the team!
Having said that, buckle up, get ready, and let's go!
My Angry Friend
One day I was talking with a friend of mine. We graduated from college together and we both got jobs around the same time, but he felt like it was time for him to look for a new challenge. I was checking up on his job hunt and he was absolutely livid! I was very confused at first so I wanted to dig a little deeper, see why he is upset the way he is. He then proceeds to send me a barrage of photos, screenshots, of some of the job postings he has been looking at. Lo and behold, 95% of the job postings were companies who were looking for, the most annoying term you hear nowadays, a unicorn.
Now, for those of you who are unfamiliar with the term unicorn in the software development industry, let me elaborate. A unicorn developer was once a term that was actually meaningful and can be easily fulfilled. A developer, preferably full-stack, that can both design the application and code it, was known as a unicorn developer. However, this term has been taken and has mutated into something that most of the developers I know absolutely despise. Nowadays, a unicorn developer (according to job postings) is someone that can do everything. No matter what the position you are applying for actually is, companies still want you to know everything else that is completely not related to the position. Also, keep in mind, I am not talking about “knowing things” as in having knowledge, I am talking about “knowing things” as in having hands-on experience. So, you can only imagine my friends' frustration when he was required to have JavaScript experience for the Java Backend Software Engineer position he wanted to apply to.
Now, let’s dig a little deeper into the two main points in which the term unicorn has been used in the wrong context, completely stripping away any useful meaning the term once had.
The Endless [Tech] Stack
As I have mentioned, my friend is a backend developer. One who has been also trying to gain more experience with cloud knowledge because, well, that’s how the industry is evolving. Let me show you an example requirement bullet list of one of the postings he was looking at (not word for word):
- Needs to know Java, C++, C#, Python
- Hands-on experience with AWS and Azure
- Professional experience with front-end frameworks such as Vue.js, React.js, and Angular
- Fluent in two languages.
- One Basic Understanding of a different language
See, you might take a look at this and say, well, this is not too ridiculous. I agree. It’s wouldn’t be if my friend was applying for a DevOps Full Stack Engineer. That would be completely understandable. But the position he was applying for was a Java backend engineer. Having such requirements for such a position means that the job was not described correctly or it means that this is actually what a company would expect from a java backend engineer, which is equally disastrous, for reasons I will explain in just a little bit.
Now, on to, what has to be, my favorite part of this blog.
Time Is Money
Below, you will see a picture that I personally found for a job requirement
I will be honest, I had half a mind not to finish this part of the blog at all and just let you marvel at this monstrosity of expectations. What kind of entry-level is this? What does this company expect from someone, for example, who had just graduated from college? Or, better yet, do they actually expect that someone with that much experience to accept an entry-level job with an entry-level salary? No explanation has ever made sense to me. I have had sleepless nights having nightmares about this job posting. Let me put things into perspective even more. This job is requiring:
- Testing experience: 3 years
- General Development Experience: Five. Years.
- Analysis, design, coding (whatever that vagueness is supposed to be): SEVEN. YEARS.
Let that sink in. They want someone with an average of five years of experience to say:
Non-existent person: You know what? For the next step of my career, I would like to to take an entry level job.
Non-existent person’s logical friend: Um, you are a senior developer, on track to becoming a team lead in a couple of years. What?!
Non-existent person: I just want to go back to when I first graduated. Less respobnosbilities, less work, and everything will be very easy for me to do. I am applying to that job!
That is the only scenario I would imagine that this job posting would make any sense.
Of course, there are unfortunate, experienced, people who have been down on their luck lately with their job searching, and this might be one of the last few options they have left, which is completely understandable. But, if these are the people that this job posting is targeting, if they were targeting vulnerable people and lowballing them even though they are evidently experienced enough, that takes us to an entirely different dilemma, a moral dilemma. Another issue, for another blog.
ALSO, and I will quote this in the blog just like I did in my previous one
Years of experience does not directly map to how good you are as a developer
Yes, it is more likely that a person with 10 years of experience is probably a better developer than a person who just graduated. But, let’s not be pedantic. We all know what I am referring to. I am referring to a person with 4 years of experience who gets rejected for a job that requires 5 years of experience. These are the examples that grind my gears.
I have personally worked with people with 10+ years of experience that are clueless, and I have worked with fresh college graduates who teach me things that I did not know. It goes both ways. With the internet having all the knowledge that we could ever hope to learn, “years of experience” has become an obsolete way to weed out developers. I know people who have not even come close to working a “traditional job”, yet, I consider them to be some of the best developers I know.
In short:
List<Problems>
I know some of the problems might be apparent at this point, but I’d like to document them all in one place. Maybe this list can be a driver for a faster, cleaner approach to make job hunting easier:
Setting Unrealistic Expectations
With some of the job postings I see, they set an unrealistic expectation of what you as a developer should be able to. They put everyone under the illusion that in order to succeed as a developer in most places, you need to know all these technologies that are not relevant whatsoever to your job. This leads to what I like to call, The Generalist Standard
The Generalist Standard
The Generalist Standard has been a standard set by the market lately where they value generalists over specialists. The reason being of course the generalist “knows more things” than the specialist. But what the market forgets sometimes is that they are both equally important. A successful team would ideally have specialists and generalists.
No matter how in-depth a generalist knows in a specific technology, a specialist should be there to lend a hand for the fine-tuning and very specific details, and the generalist would ideally be able to act as a bridge between specialists of different technologies. A great example could be a full-stack developer narrowing the knowledge gap between a backend and a frontend developer and inversely, those backend and frontend developers use their specialties to consolidate the quality of the application.
Market at an Increasingly High Standard
Don’t get me wrong, the market needs to be at an increasingly high standard. The world evolves and we all need to evolve with it. That is how we grow as individuals and as a community. But, the rate at which it’s growing as well as the reasons behind why it's growing at this rate can sometimes be a bit alarming. This is of course caused by an endless cycle of setting high expectations along with people putting in too much work in order to meet those expectations because, well, people need to be employable at the end of the day.
Causes Low Morale
Understandably so, these previous points ultimately result in low morale for some people. Some people might be falsely lead to believe that they are just not good enough for the industry while, in fact, they are good enough but just face a market that is sometimes too challenging
Maximizing Profit, Minimizing Expenses,
This is honestly a sad reality of our industry sometimes. Let me start by saying that companies should be trying to maximize profits and minimize expenses, but not at the expense of people. Especially not at the expense of people.
It’s also a fallacy that by hiring fewer engineers you would be minimizing expenses thus increasing profits because productivity is a vital part of that equation. Reaching optimal productivity should be the main goal. Now, for some companies that might be through hiring one generalist engineer, for others it might be hiring two specialists, but at the end of the day, it should be done for the right reasons and not to benefit at the expense of people
Lowballing
Needless to say, it’s definitely time to stop this. If a person is producing the quality of work that deserves, let’s say, 80k$/year, don’t pay them 60k$/year. On a human level, this takes advantage of people trying to look for a better job where they can grow and be content. On a company level, an un-happy employee is one that’s ultimately not productive and eventually one who also leaves. So, lowballing (underpaying) employees becomes a very short-sighted, short-term, borderline morally-grey, plan.
Reality Check
Look, I am not saying these people don’t exist, in fact, I am not saying that these postings and expectations are always unrealistic. However, there needs -to be a fine line. In fact, several fine lines. That applies to:
- How often these postings are published. I am not convinced that every job requires to know all these skills.
- Differentiating between someone that is, in fact, knowledgable or is, in fact, a generalist and between just throwing every technology under the sun into one job posting.
- Knowing the market and knowing that even though one requirement is missing, a compromise on it to get a top-level engineer is definitely worth it.
Look, developers will grow technically because that’s what we do. We want to learn more about the things we enjoy doing the most, technology. But expecting that everyone is a copy+paste template, or expecting that everyone follows the same generalist growth path, or just expecting people to know things that are not required or enjoyable for them will only result in us going backward and also result in missing out on some great talent out there.
I lied, unicorns do exist, but not with the definition we have nowadays. So let’s give that word its meaning back and let’s be realistic.
That’s all I got for you, see you next time!