The one about unrealistic expectations on software developers

This is a topic I have discussed countless times with developer peers and friends outside the tech world alike.

It is generally agreed that software developers occupy a privileged position. This profession is not only highly in-demand but also offers a host of advantages rarely found elsewhere: competitive salaries, remote work, and flexible schedules, among others.

However, this privilege comes with a set of unrealistic expectations. A case of divine justice, you might say?

I recently came across an excellent post about the insanity of being a software engineer and felt compelled to expand on its insights.

Getting started is not easy at all, especially if you have no experience. I would say that it is difficult to find job offers for junior developers, but in those rare cases where you do find them, it is common that companies ask for 2-3 years of experience. How can one get the experience if no one will provide the first opportunity?

Nowadays, you have bootcamps, for example, that have collaboration agreements with tech companies that give the student a chance to start an internship upon finishing, but they are not guaranteed to continue in the company once the internship is over.

That brings me to another key point. While it is probably nothing new, I feel that the hiring processes nowadays are wild.

Companies have unrealistic job requirements, often demanding an entire development team's worth of skills in a single candidate. It risks discouraging candidates who would otherwise be excellent fits but feel they do not tick enough boxes to apply.

But even when you decide to apply for a position, many candidates are rejected because interviewers fail to see that skills are transferable and the match should not be limited to a predefined checklist.

The way I see it, this situation is a consequence of the normalization that developers must master (almost) all related areas. For instance, check the roadmaps for backend, frontend, full stack, or software architects.

For a typical backend position, you are expected to master the main programming language used in the project, but preferably you should master more than one, because that will give you the tools to apply different approaches depending on the occasion, especially if those languages allow you to apply different programming paradigms, such as OOP and functional.

Of course, you must be fluent with the entire ecosystem surrounding those languages, starting with the most popular frameworks, because they are the tool you will work with in your day-to-day.

You are also expected to master databases, at least one of the most popular SQL DBMS (PostgreSQL, MySQL) and some NoSQL (MongoDB, Redis). Performance tuning, data modeling, security... What happened to the role of the database administrator (DBA)?

Experience designing, implementing and consuming REST APIs or GraphQL is also a must.

Depending on your level, you must also be able to design efficient systems, always with performance, scalability, maintainability, and security in mind.

In a world dominated by (micro)services, you are also expected to know every architectural pattern, such as event-driven architecture (EDA).

You could think that is enough, right? Well, not quite...

You must know your way around the command line to be able to configure the system you are working on and ensure it is working nicely.

Do not forget about monitoring the system, responding to incidents caused by changes introduced to applications in your team's governance, and automating tasks to ensure the reliability of the system.

You are expected to be proficient with containers and cloud providers too, configuring and provisioning the infrastructure using code instead of manual processes and settings (IaC). Who needs SysAdmins, SREs, or DevOps anymore, right?

Do not forget about AI, which makes it increasingly common to find job offers asking for knowledge in LLMs, RAG, fine-tuning, or transformers, to name a few.

And all of that is without even getting into the full-stack role, where you will need to add frontend skills to the equation.

On the one hand, if the main workload is on the backend, you will not need to be an expert, but you will certainly have to know JS and the web ecosystem well enough.

On the other hand, if the entire project stack is based on JS, also working with Node on the backend, for example, then you will have to be an expert in the entire web and JS ecosystem in particular, whether it is frameworks, UI libraries, or other tools.

For sure, in a more purely frontend role, you are expected to be an excellent designer, have good taste for interfaces, and have solid knowledge of UX and usability.

And we are still just getting started, because I have not yet mentioned all the expertise required no matter the role.

You are required a high level of technical proficiency and a strong understanding of software development best practices, partaking in all stages of the development lifecycle, from initial task definition to final deployment.

Needless to say, your code must be clean, scalable, maintainable, and testable, preferably applying TDD. For that, you will need to master design patterns, refactoring techniques, and every software design principle ever coined, such as SOLID.

I really like what the author that somehow inspired this post says about it:

Software gets more complicated. All of this complexity is there for a reason. But what happened to specializing? When a house is being built, tons of people are involved: architects, civil engineers, plumbers, electricians, bricklayers, interior designers, roofers, surveyors, pavers, you name it. You don't expect a single person, or even a whole single company, to be able to do all of those.

Jack of all trades, master of none.

And there is still more, although it is not exclusive to this profession. You are expected to have not only a wide variety of hard skills but also a bunch of soft skills that would make you a solid candidate for "Employee of the Year".

You are expected to be a highly motivated team player with leadership skills; an excellent communicator with both technical and non-technical people; and possess proactivity, the ability to give and receive feedback, a capacity for self-management, abstract thinking, attention to detail, and adaptability to change, among many others.

Naturally, you should be someone with experience working in startups or fast-paced environments, with a business-driven, product-focused mindset, and be able to balance technical debt with delivering new features quickly.

Note that all those skills have been extracted from real job offers I have seen lately.

I love what I do, and the opportunity to constantly learn is one of the best parts of this job. However, I think the industry needs to move away from seeking mythical 10x developers.

My suggestion is to not expect to hire a single person to do the work of an entire department, and rely on the candidates' ability to learn and adapt. Foster a culture that values deep expertise as much as broad knowledge to build stronger teams.

Thank you for reading and see you in the next one!


0
Subscribe to my newsletter

Read articles from David Montesdeoca directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

David Montesdeoca
David Montesdeoca

I love learning new stuff, especially when it comes to building software. I'm really interested in software architecture, clean code, testing and best practices.