Full-stack developers, unicorns and other mythological beings
According to the “Developer survey 2018” of StackOverflow, a majority of developers consider themselves “full-stack developers”, an intrinsically senior profile, very demanding in knowledge and with high demand in the sector.
We speak of a developer capable of designing and implementing projects, both on the server side and on the client side, which means knowing the strengths and weaknesses of each technology and staying updated as they evolve and/or new ones appear.
With the technological evolution of the Web stack, staying updated and productive in the front and back-end is increasingly complicated, to the point of questioning whether meeting those expectations is more a myth than a reality.
The origin of the “Full-stack”
When this nomenclature began to be used for this profile, in the early 2000s, Web technologies were clearly less complex and the options to choose from were less numerous:
- There were three or four major application servers, all in charge of maintaining the state of the application, applying the business rules and generating the UI of the clients. The languages and environments could vary, but the client-server model, the development patterns and the techniques used were relatively similar.
- All the DBs followed the relational model, with SQL query languages. Having a domain of the SQL-92 standard, it was possible to jump from one SGDB to another in a reduced time.
- The Internet bandwidth could be up to 100 times smaller than the current one.
In this context, it was perfectly possible for the same developer to take responsibility for the entire development.
The full-stack profile was born!
And this term really became popular especially with the expansion of Facebook, which apparently only hired developers with this profile.
Since then, the evolution of front and back-end technologies has been considerable:
- There has been a fundamental paradigm shift about where the state of an application resides, which has clearly migrated from the back-end to the front.
This change of paradigm has also modified the center of gravity of the knowledge of the full-stack developer, who has gone from being, at the beginning, a back-end expert with knowledge of front, to be now more a front-end expert with good knowledge of back.
Modern JS frameworks are almost as complex as the back-end frameworks, as the AngularJS or Ember learning curves test, starting from scratch, or the relative ease of adaptation of the back-end developers that are passed to the front.
- The browser’s virtual machine has continued to evolve, from the mere presentation of documents from the beginning to becoming a true platform for applications.
The last characteristic of the object orientation paradigm that was lacking, the encapsulation, has been resolved at JS level for some time now, and now it is also at the DOM level, with standards such as the Shadow DOM or the Custom Elements.
The mobile world
At the beginning of the current decade, the mobile environment was added to the desktop environment with its own user experience.
Both iOS and Android demand to dominate their ecosystem, rich and complex, if you want to offer native solutions and, only in the case of using hybrid technologies based on the browser DOM (Apache Cordova, for example), it is possible to save development efforts, although with performance counterparts (although lately they are getting close enough).
The layout possibilities are now much more powerful. The CSS standards and the DOM allow very sophisticated layouts, necessary to adapt to multiple clients: mobile / desktop, different screen sizes and densities, touch UIs, etc. And they are standards that continue to grow (CSS3, FlexBox) not only in 2D, but also in 3D (WebGL).
In the back-end, the databases do not follow exclusively the relational model. The “NoSQL” persistence layers are here to stay and there are several actors in this movie.
Applications of monolithic architecture are moving to more distributed architectures, based on microservices, much more scalable and to which they are derived, not classic aspects such as the storage of information, but also part of the processing of that information.
And yet, expecting that the same person can choose the optimal technologies in all circumstances, perform the front and back developments with high productivity and all in a reasonable period of time, seems something less and less realistic.
Without denying that there are still cases in which a classic full-stack profile is justified, as in start-ups created around a specific stack or in smaller projects, should not we definitely retire this profile as we know it?