Review notes on a whitepaper about full-stack roles22 Sep 2019
I recently read an interesting whitepaper about the myth of Full-Stack Engineer/Developer,
published by Annual DevOps Enterprise Forum this year.
Below is a set of notes I took while reading the whitepaper:
Who is a Full-Stack Engineer/Developer ?
The answer varies but in this whitepaper it is defined as someone who has experience in all aspects of a software stack literally “from chips to CSS”[sic].
Origin of Full-Stack Position
Organization want to ship product fast. They look to avoid having too many teams with specialized skills. But instead replace them with much smaller groups with concentrated knowledge to expedite action.
This propels the company to hire developer who posses greater set of skills ranging from frontend web development to back-end middleware/databases/networking/security etc. In addition to this, they also need to know how to configure and use CI/CD systems, monitor and respond to metrics and alerts, comfortable working with virtualization, orchestration technologies on top of Unix/Linux environment.
There is an interesting distinction between DevOps principle which is to help organization speed up development/delivery of high quality software via effective communication of teams/fast feedback etc and the unreasonable expectation of one person able to know everything about all the layers of the software stack.
This is detrimental to the organization because over a period of time these full-stack engineers are given the status of “unicorn”/ “rock stars” and it causes a negative effect on others who perceive themselves as not meeting this standard and can dampen their drive. This is applicable to existing employees and also someone who look to apply for the open position in the company.
What is Full Stack ?
The person should be familiar with below:
- user interface
- services / API’s
- data storage systems
- integration tooling like message queues
- Source code control systems like git etc.
- building, releasing and monitoring and troubleshooting application in production
Problems with Full Stack Developer
Few example job listings on Full-Stack Developer position are given and using the StackOverflow data on number of developers who self-identified themselves as Full-Stack Engineers, only 0.04% of surveyed population matched the desired profile of a Full-Stack position.
It is not clear if bootcamps are closing the gap between demand and supply.
Studies show men apply for a job if they meet only 60% of the job requirements. Women only apply if they meet 100% of the job requirements. It is likely that organizations are discouraging women from applying.
How does it affect an Engineer who is hired as Full Stack Developer ?
Too much cognitive overload result in lower quality, heroics, burnout and health problems.
Loss of energy - the individual feel stressed and exhausted.
Loss of enthusiasm - the individual feel the job as a burden/chore.
Loss of confidence - the individual is not motivated to do the job.
The paper outlines an interesting solution. Instead of focusing on an Individual, focus on the Team. The organization should build Full Stack Team, that has combined skills for designing, building, deploying and operating software.
Rotational Engineer - Each team member rotate and play the role of designer, front-end engineer, back-end engineer etc. Coaching between the team members is strongly encouraged.
Matrix Example - This calls for embedding functional teams within product teams and have each team member reporting to managers from both function and product team.
T-shaped team member - Expert in one skill but have a basic understanding of other skills needed to run the product. Rotate members and teach others.
Teaching - Everyone in the team teach their area of expertise to others in the team. Senior Engineers have greater responsibility of teaching/coaching others.
Growth Mindset - Team members are open to develop additional skills and learn best practices from others.
No Silos - Focus on creating teams that are incentivised by communication, empathy, and knowledge sharing.
Horizontally Partition the stack - With the evolution of capabilities offered by cloud based solution, partition the stack into Application Code, Cloud Platform, Virtualized Infrastructure. In that way, Both Cloud Platform and Virtualized Infrastructure can be outsourced to Cloud vendor or In-house DevOps team and the development team can concentrate on Application Code.
By switching from being a Full-Stack Engineer to being part of Full-Stack Team, you as an individual developer are avoiding being a single point of failure, or having to indulge in hero mentality and burnout.
This is my notes after reading the whitepaper and anything that I have misunderstood or misconstrued are entirely my fault. Read the original paper here - https://itrevolution.com/book/full-stack-teams-not-engineers/