Buzzwords in the software industry arise and then die off with startling frequency. Ambiguous terms such as “growth hacker”, “sales engineer” and “rockstar developer” trip a developer’s spidey sense that the person saying them is just handwaving. However, occasionally a new term is created to articulate a programming skill set based on demand due to changes in the software development industry.
In 2013 the search term “full stack developer” took off on Google Trends and began appearing in numerous tech startup job postings. In this term’s case there are several real trends driving developers to invest in learning and identifying as full stack developers.
The usage of the full stack developer term is driven by several larger trends in software development. First, the maturity of open source projects allows more code reuse than ever before. Second, the proliferation of web APIs grants developers access to significant functionality for a fraction of the cost to build those services from scratch. Third, infrastructure-as-code and hosted on-demand servers allow developers to accomplish tasks that would have previously required a dedicated operations team.
Let’s take a deeper look at the reasons for the trend, define the term, and look at how market demand is driving the need for full stack developers.
Open source project maturity
The increasing quality of major open source projects’ documentation helps developers become productive with those projects faster than previously possible. Clear documentation and tutorials drive open source software adoption, which creates a positive feedback loop to continue creating and maintaining high quality documentation. For example, the Django project in the Python ecosystem places high value on documentation contributions. The project continuously updates and expands its documentation as the project builds towards versioned releases.
Documentation is considered part of the project’s code base and is actively maintained by contributors instead of being an afterthought as was common practice for open source projects ten to fifteen years ago. The source code for a project and associated documentation are also readily available to clone off GitHub and viewable for reference through a web browser. Open source projects’ maturity in documentation and accessibility is improving in design as well as back end code libraries.
Creating user interfaces for applications is easier today than in the past because of frameworks and resources written to teach non-designers about application design. Front end frameworks such as Bootstrap and Foundation combined with free or cheap templates are excellent user interface starting points.
The maturity of open source projects reduces the difficulty of building early iterations of software projects. Developers take advantage of the reduced difficulty by combining reusable code libraries with their own custom code.
Web API proliferation
The proliferation of web APIs also contributes to the trend. Several years ago integrating payment processing outside of PayPal could take days to weeks for a developer. Today companies such as Stripe and Balanced provide APIs with detailed walkthrough tutorials and open source project examples in a wide range of programming languages.
APIs also make simple what was previously impossible just by writing code. Ten years ago sending a text message or making a voice call required knowledge of esoteric telecommunications protocols and integration with ambivalent carriers’ operations. Today Twilio (full disclosure: I’m currently a Developer Evangelist for Twilio) allows any developer to sign up with a credit card, buy a phone number programmatically and begin sending text messages a few minutes later. Full stack developers know how to discover and integrate these APIs to create functionality that otherwise would have taken weeks, months or even years to build.
Deploying to cloud-based infrastructure is a particularly important capability available today that did not exist ten years ago. However, even after Amazon Web Services and similar cloud infrastructures were available there was lag time before the full stack development mindset became possible.
The missing pieces now available to today’s developers are mature platforms-as-a-service and quality configuration management software such as Puppet, Chef, and Ansible. Ansible in particular opened up deployment to a new programmer audience because of its easy learning curve and low barrier to entry. Puppet and Chef are both amazingly capable infrastructure-as-code projects. However, they are geared towards technical workers with systems administration and operations backgrounds instead of application developers. There’s a need for all of these configuration management tools but simplicity is critical for full stack developers seeking to quickly deploy the first iteration of a software application.
Systems administrators and operations specialists are still necessary for ongoing operations at established companies. However, their value kicks in after the initial production application proves successful rather than during the software’s first iteration.
Getting a clearer idea of what a full stack developer is
The larger software industry trends of maturing open source projects, proliferation of web APIs and infrastructure-as-code are creating demand for full stack developers. But what is a full stack developer?
A full stack developer is a software developer that focuses their career on being immediately productive at every layer of a specific software ecosystem. Being a full stack developer comes with tradeoffs as with any approach to a software development career.
Full stack developers identify their lack of knowledge across software layers and spend time mitigating those weaknesses, rather than delving deeper into areas already known. For example, a developer who’s spends most of their time working with databases would spend the majority of their learning time in the front end working with CSS, HTML, and designing good looking webpages.
Three general attributes define how a full stack developer spends their time:
- evaluates new open source libraries and web APIs to determine how they can be used to build new projects faster
- develops and deploys projects seeking to learn the full software application lifecycle from conception through maintenance
- relies on the knowledge of a specialized developer when a problem is too deep in a specific area
Market demand drives the need for full stack
Software developers constantly make tradeoffs between learning new tools and more deeply understanding an existing technology in their tool belt. The depth versus breadth tradeoff are partially influenced by perceived demands for certain skills in the software development job market.
Tech startups in particular are looking for software developers who can handle more than just a single horizontal slice of an application. Comments such as “I’m only a backend dev; I can’t code front end templates” may be acceptable in an enterprise IT shop. Those comments do not hold up in environments where revenue is not yet being generated. Shipping the initial release is the most important goal, even if it means developers must step out of their comfort zone to work on a different layer of the stack.
The demand from tech startups for developer comfortable in many software layers is clear based on the increasing numbers of “full stack Python/Ruby/otherlang developers” job postings. The “full stack” moniker is currently the clearest articulation that tech startups seek developers with a breadth of experience in as many layers of the software stack as possible. The mindset to jump into any layer and immediately contribute is invaluable to building, deploying and launching applications.
Developers interested in working for or founding tech startups are well served by addressing layers where they lack knowledge and by building a portfolio that demonstrates their capability to work in any software stack layer.