The legend of fullstack

2020-05-14

post-thumb

Contents

Whenever we ask a developer, most consider themselves a “fullstack developer”; an intrinsically senior profile, with vast knowledge and high demand in the market.

A developer capable of designing and implementing projects, both on the server side (backend) and the client side (frontend), which means knowing the strengths and weaknesses of each technology and staying up to date as they evolve.

With the constant and rapid evolution, staying up to date on frontend and backend is increasingly complicated. React, Vue, Svelte, Angular, SASS, LESS, and the constant (and good) evolutions of ECMAScript (the beloved Javascript) already make it a difficult task to stay current in the frontend universe. If you consider that programming (in one of thousands of languages) on the backend is a small fraction of the responsibility, we need to question whether meeting these expectations is more myth than reality.


The origin of FullStack

Webmaster vs FullStack

When this nomenclature started being used for this profile, in the early 2000s, technologies were clearly less complex and options were less numerous:

  • There were few servers, responsible for maintaining state, logic, and frontend. Languages could change but the model, development patterns, and techniques used were similar.
  • All databases followed the relational model, with SQL query languages. There were no great difficulties when changing databases.
  • The frontend used simple Javascript and an HTML4/CSS2-based DOM, oriented only to display documents on desktops with similar screen resolutions. There were no complexities like responsiveness and mobile first.

The evolution of technologies

Being fullstack now means you can: create frontends, write backends, handle devops, start a podcast, curate a newsletter, crack an egg with one hand and animate a Pixar movie

The evolution of front and back-end technologies has been considerable since then:

FullStack Developer
  • There was a fundamental paradigm shift regarding the state of an application, which migrated from the back-end to the front-end.
  • This paradigm shift also changed the center of gravity of the full-stack developer’s knowledge, who went from being, initially, a back-end specialist with front-end knowledge, to now being more of a front-end specialist.
  • Javascript was enhanced and sophisticated (ECMAScript 5, 6, and 7) to the point of rivaling software engineering solutions at a C# or Java level.

Here comes a new challenger

Here comes a new challenger

The mobile world

Both iOS and Android require a good understanding of their rich and complex ecosystem, if you want to offer native solutions, and only in the case of using hybrid technologies based on the browser DOM (React Native, for example), is it possible to make this arduous task simpler, albeit with performance trade-offs.

Front-end

Layout possibilities are now much greater. CSS and the DOM allow very sophisticated layouts, necessary to adapt to various clients: mobile/desktop, different screen sizes and densities, touch interfaces, etc. And these are standards that continue to grow (CSS3, FlexBox), not only in 2D, but also in 3D (WebGL).


The backend world is no longer the same, Charles

World is not the same, Charles

On the back-end, databases no longer exclusively follow the relational model. “NoSQL” databases are here to stay. Dynamo, Mongo, and many others, each with their own particularities.

Monoliths are migrating to more distributed architectures, based on microservices, much more scalable and in many cases, cheaper to maintain. This new paradigm brings several advantages, but it is not a silver bullet and there are many disadvantages that need to be weighed when evaluating a solution.

An almost extinct species

Even with this broad panorama of technologies, the developer with a full-stack vocation still has some possibility. An example of this is that, by choosing the stack well, the same language can now be used in all contexts: Javascript on the web (DOM), on mobile (Cordova, React Native), on the server (Node.js), and in the DB (MongoDB).

And yet, expecting the same person to choose the ideal technologies in all circumstances, develop backend and frontend with high productivity and in a reasonable period of time, seems increasingly less realistic.

Even if there are cases where a startup is built around a specific stack or in smaller projects, shouldn’t we definitely retire this profile as we know it?