Introduction
First of all, we define the terms. There are many different ideas about who is such a full stack developer, someone even rightly believes that
such developers are a myth , but in this article a developer will be meant who has the knowledge and skills to write from scratch software and bring it into production. At the same time, the software can be designed for a web platform, mobile applications or desktop. The perfect full stack developer is someone who owns, to some extent, all the platforms and can develop and install their software on them. But it is really rather a myth.
Quite good definition with quora.comWhen people search for the full stack of a developer, they expect to see a singing and dancing technomage.
Or at least someone who will not complain too much when asked to work outside his comfort zone.
Perhaps, by the title, it will seem to someone that this is a plaintive post that talks about how bad the unskilled schoolchild lives, who grabbed everything from various articles on the Internet. No, the post is not plaintive, we are talking about full stack, not full slack, and at the end a list of advantages will also be considered. And we will consider not a schoolboy, but a developer with work experience of five or more years. Just see what the minuses are in this development.
Minuses
In every single area you are worse off than a narrow specialist.It seems pretty obvious, but I will explain. If you spent six years on one technology, then obviously your knowledge will be more than that of a person who has been engaged in several for six years. You had more projects, you were more involved in some typical solutions, you read more and wrote code.
It's harder for you to go deeperA good full stack developer is always heavily loaded. And your time to learn new things is shared among all the technologies you work with. Naturally, your development is slower than that of a programmer with a narrow specialization.
You are more likely to be overloaded with tasksIf you are engaged in several projects from several sides at once, then even with good time management it will often happen that all projects require increased attention and time. It will have to be solved either by transferring part of the tasks to other developers, or by prioritization, or by careful planning. Of course, any developer has the likelihood of overloading - as you know, in the real world any task needs to be done “yesterday”. But you have such tasks may suddenly appear in batches.
')
It's hard to replace youTo some it may seem like a plus - it’s difficult to fire you, they love and appreciate you. But the flip side of the coin is the impossibility of transferring tasks, calls at any time of the day, problems with going on vacation, difficulties when trying to do something else.
You do not have a clear area of ​​responsibilityIf there is no water in the tap, then the full stack is to blame! Whatever problems arise, whatever bugs come out - most likely, you will have to deal with them, even if the problem really should be under the jurisdiction of another developer. It's just that your picture of the world is much more complete, and you will be able to locate and correct the error more quickly. Unfortunately, this is often abused.
“Oh, give it to him - he'll figure it out!”In a situation when it is necessary to deal with bad or old code, it’s most likely to involve you. It is especially sad when an employer wants to save money by hiring one developer for the entire project. And you open it and understand that it is easier to throw it out and completely rewrite it.
You do not know all the library setsThis is quite obvious from the first paragraph, but I would like to mention it separately - if only because the vacancies often require experience with specific libraries.
You do not have time for all the trends.Again, this follows from the first paragraph. For some reason I do not understand, they are often looking for a developer who perfectly knows how to apply something that was released six months ago. Alas, you cannot know and be able to use ES6 at the same time, talk about the differences between the latest version of symfony and possible problems with migrating from Oracle to Tibero at the moment. Perhaps you read about it, but just did not have time to try.
You do not always write the optimal code.Most likely, your code is clear, well organized and commented out. But surely a more qualified specialist could make it a little better. Another question is that this is usually not critical. It is really bad if the mess of languages ​​in your head makes you apply approaches and solutions that are not suitable in the current project. It is terrible to see how some even write functions that would be consonant with their usual implementations in another language.
You often peep into manualsEven functions for working with strings in all languages ​​look different, let alone something more complex. If you often switch between different technologies and languages, then most likely you will constantly hang a manual in which you peep, which of course reduces the speed of work somewhat.
You can start to envy the salary of narrow specialistsIf you start looking for vacancies according to your most expensive skill, then you may be upset - specialists with extensive experience can receive very good money for it. Let's be honest - you have no such experience with a particular technology. But even if you dive into this technology and get the necessary knowledge - would you like to continue only this whole life? For example, the administration of Oracle DBMS?
Cons in employment
Separately, I would like to mention the difficulties that occur when changing jobs.
I will call you to work on random keywords in the resumeHR is not looking at the fact that you were engaged in this technology on a small project three years ago. He saw a word similar to a job that needs to be closed, made a counter, and tries to attach you there at any cost, without being interested in your desires and current preferences.
Full stack full stackWhatever you are a broad specialist, you are unlikely to find a place to work with exactly the same technology stack. It happens, but extremely rare. However, the intersections are often quite large, and nothing prevents you from tightening up the missing and broadening your horizons even more.
You do not believeYes, that's such a ridiculous and real problem. If you have indicated too much in the resume, you simply will not be believed and will not even try to check or ask about what level you know. Therefore, no matter how ridiculous, the best way is to ruthlessly remove from the resume all information that you consider irrelevant for your future. And even better - to customize the resume for each job.
It's harder for you to find a suitable job.Fullstack developers are rarely looked for, and an employer with such a vacancy may not always compete with a narrow specialization job by conditions. And the question arises - what keywords to use when searching for a job? If you, say, a Java developer, then simply indicated in the search for Java - and drove to click. But full stack is a bit more complicated. Usually, the problem is solved by subscribing to several different filters by the words that you are most interested in - or simply by sampling at the desired salary level. The latter does not always work, because, to my utter bewilderment, a huge number of vacancies are still hanging without any instructions from the salary fork. Apparently, HR fear that then everyone will want the maximum described? Strange. If anyone knows the reasons for such a strategy of recruiting - please provide in the comments.
pros
Now, finally, about the delicious.
You can choose who to work nextIt's much easier for you to change the orientation (sorry for the ambiguity) than for an ordinary developer. You see a lot in the application, you can understand and understand what interests you. Yes, you have to spend time deepening - but it will be time spent with benefit. Yes, you most likely will have to make some pet projects to try everything you want. But this again pays off handsomely.
You burn lessIf there is an opportunity to periodically change projects, then you are less tired of using the same thing. Of course, if you are not a hardcore fan and do not enjoy simply writing everything, say, vanilla C or asm.
It's easier for you to grow as a team leader or architectQuite an obvious plus - the more you understand the overall structure, the more chances you have for growth in a manager. Of course, if you have the desire and communication skills.
You can otdebazhit anythingAn obvious plus. Your systems thinking has reached a level where you can fix anything, anywhere.
Work more fun, more interesting and informative.In one day you can get a lot of new skills and knowledge in completely different things.
Alone, you can create wonderful things at the junction of different technologies.You alone can do what the standard approach requires 3-4 people. Program a microcontroller for the Internet of Things, which communicates with a web server, writes to a database, and data from which can be viewed on a web site, in an application or on a mobile device? Easy! You alone can imagine the whole system and implement it without coordination, misunderstandings and delays.
Your solutions are faster and more reliable.By understanding the interaction of different systems, you can choose better ways to combine them. You understand each component better and are not afraid to use it. As an example - let's take the “foul technology” (not my moped, it slipped in publications). In general, the cloud is a wonderful way to solve a huge number of tasks, including scaling tasks. Unfortunately, more and more often I see that cloud solutions are used simply because the developer does not know how and is afraid to solve his task somehow else, but presents it as an additional plus. And much can be done much cheaper and better if you have at least a superficial understanding of the issue.
You can use almost any sourceIn a world where practically any practical task has already been solved, spending time writing one more bike is just a crime in relation to the length of one’s life. Now you can take any repository in any language and use it as a starting point for your decision. You fly with a fresh breeze over a rake that thousands of other developers have gathered before you.
You comprehend zenNow you know that there is no development language that is better than others. You know that there is no best database. You can assume that some tool is better suited to your goals ... but you are quite ready to use alternatives, if there are any grounds, for example, the qualifications of other developers. You no longer write articles about synthetic tests designed to show the advantages of one technology over another. You know that a performance gain of five percent is most likely not worth your two man-months. And the time freed from holivars you can finally spend on something useful. For example, to establish a relationship with a girl (for example, let's call her Katya). You now understand that technologies are different, that people are different, and you just need to find the right way to tie everything together. You love the world, and the
world loves you . Even when you use it to shoot yourself in the foot.
There should have been a picture that shows how an enlightened programmer in the Lotus posture slowly ascends over the mountains of Tibet, and around him dance, embrace and dance around programming languages ​​and various technologies in the form of charming girls - but alas, for some reason this picture found. Please introduce it yourself.