I have been seeing a few things on Twitter recently decrying the concept of Full Stack (web) Developers, such as this.
The argument is that Full Stack Developers are generally back-end experts who suffer from Dunning-Kruger relating to their front-end skills. This devalues front-end web work as just slapping some html together; maybe copy pasting a bit of JavaScript from Stack Overflow. Modern front-end development is a difficult and highly nuanced task and it is impossible to fully master both fields.
This leaves us with some cognitive dissonance: it is a compelling argument, yet we do not strongly differentiate between front-end and back-end development at Cultivate. Wherever we have seen the separation of Front End Developers and Back End Developers we have witnessed bottlenecks develop as workload changes between the two groups.
How do we live with this contradiction?
One thing to tease out is that neither front-end or back-end are homogenous spaces. Expertise in CSS is not the same as expertise in accessibility, is not the same as expertise in React, is not the same as expertise in Angular 2.0, is not the same as expertise in Backbone.js. Being an expert Elixir and Phoenix developer does not make you an expert in Python and Django.
Another factor is that all good programming shares many of the same characteristics: for example modular code with high internal cohesion and loose coupling, favouring readability over cleverness, low levels of duplication, a high degree of automated testing. Skills and experience in these attributes transfers across technologies.
By our definition, a good Full Stack Developer is someone who is competent to work in the entire stack of a particular application. They have a good level of expertise in at least one of the areas. We even out the inevitable skillset differences with teamwork. Our teams:
- Spread knowledge and skills between members rapidly through collaboration and pair programming.
- Reduce the danger of losing access to information if a member becomes unavailable (aka the Bus Factor) through the same practices.
- Are able to support members who are weaker in some areas with the expertise of others who are stronger, both from within a client team and from the wider company team.
Mastery is not the same as competence and most of the time competence is all that is needed. When more expertise is required, a balanced team means that someone is on hand to provide that help.
That is why when you engage Cultivate, we do not provide individuals; we provide a team.