Full-Stack Development: Myth & Reality

Specialization is the most important aspect of technical staffing in contemporary software development. The use of the term “full-stack developer” has evolved over time from a semi-mythological basis to a fairly common practice. It is still considered to be more efficient to employ teams of specialists in Agile project management rather than to rely exclusively on the services of a single full-stack developer, even if they are considered a ninja, Jedi, or rock star. This article will discuss the benefits of using a single full-stack developer for programming and managing the launch of new projects versus the advantages of Agile teams working in remote collaboration with expert contract workers leading the design, development, and production operations of applications. Although every project is unique, we believe that the efficiency and reliability of Agile teams are better than relying on a single “10X” developer, especially for maintaining code over time and implementing the best practices for software innovation.  

Cloud Software: Increasing the Need for Specialization

In most website and mobile application development projects, there is a common division of work between front-end designers, back-end programmers, and systems administrators.
  • Front-End Designers: This group includes graphic artists who create logos, icons, themes, and layout designs for websites or mobile applications. Front-end specialists usually have expertise in Adobe Photoshop, Illustrator, and wire-framing tools. Some front-end specialists code HTML, CSS, and JavaScript to build custom themes or templates for websites across a wide range of development frameworks and scripts. Front-end JAMstack frameworks include React, Angular, Next, Nuxt, Vue, Gatsby, etc.
  • Back-End Programmers: This group is composed of skilled programmers specializing in coding new plugins, modules, themes, and application code for web/mobile development requirements. These specialists are expected to know SQL for database management with programming languages like PHP, Python, Golang, C++, Java, C#, Objective-C, Ruby, etc. Many backend programmers work with WordPress, Drupal, or ASP.NET, where their output also requires knowledge of HTML, CSS, and JavaScript.
  • Systems Administrators: Traditionally tasked with web server configurations and network maintenance in a data center, systems administrators have now become DevOps specialists in the cloud era. Some of the responsibilities of Systems Administrators not shared by other technicians are Apache, NGINX, Kubernetes, OpenStack, VMware, and other DevOps tools used in CI/CD or version control.
It is not altogether realistic or possible to find individuals who are operating at the expert level in all of the requirements of each of these specializations. Programmers with HTML, CSS, and server configuration experience are the most common “full stack developers”, but many businesses are forced by staffing limitations, costs, and project requirements to build a team.  

Agile Software Development: Use of Expert Knowledge

Because it takes years of training and professional experience to acquire the knowledge of full-stack development, most business owners employ a team of experts across the three sectors of specialization to build software applications with Agile project management. For the requirements of staffing, it is often cheaper to contract a Photoshop specialist for web design mock-ups, a PHP programmer to build a custom theme for WordPress, Drupal, Magento, etc., and systems administrator for web server management, rather than searching for a 10x developer. Creatives and engineers often have different personality sets that are mutually beneficial to a project’s success. This places a major burden on project management leaders. Hiring for a web design or mobile application development project involves evaluation of the specializations of each employee. The project manager may or may not have hiring authority depending on the organization. Adding artificial intelligence, machine learning, and event-driven architecture like Apache Kafka or Pulsar to a project adds an extra layer of technical expertise. If your project involves all of these elements, it may make more sense to adopt a microservice approach to application development rather than rely on monolithic CMS or DXP apps. Low-code solutions rely on APIs with microservices and make full-stack development a process of coordination between third-party services, custom code, branding, and GUI design. A Software Architect may be hired or elected to direct the process of finding the best experts or specialists in each category of development required to make a software project a success. By using the resources of a team of experts collectively, businesses can more effectively build apps with better functions and features than a single full-stack developer is usually able to manage.  

Remote Teamwork: Design, Development, & Deployment

Because of the complexity of cloud-native software development and the profusion of requirements that underscore enterprise-level applications, the sightings of a real “10X Dev” have become about as rare as the search for a Yeti or the sighting of Bigfoot in the wild. It is not that the “10X Dev” does not exist. Many PHP programmers are capable systems administrators for whom working with HTML, CSS, and JavaScript is commonplace. While it would seem that seeking out and hiring these experts is best, remote teamwork is often better. Relying on a single person to do every aspect of a project may work for some organizations, but it introduces a single point of failure. Not only is there no peer review of code before going live, new employees may find it difficult to understand the programming logic when onboarding. Remote teamwork assigns a specialist to each role in the software development process to diminish the reliance on a single developer. Often, this leads to a higher quality of work by employing specialists in each division than is achievable by a single expert, however talented. Distributed, international teams coordinated through sites like Upwork provide qualified candidates at different pay rates and levels of experience for front-end, back-end, and systems administration work. Agile project management is used to implement industry best practices. Modern software development requires extensive teamwork, where code testing by security frameworks can be automated as part of version control pipelines. If your “10X Dev” leaves the project, will new employees be able to understand and maintain the code posted to GitHub?  

Avoid Single Vendor Lock-In with Agile Teams

Many CIOs have been forced to adopt multi-cloud architecture to avoid single vendor lock-in and secure better pricing on cloud services over time. The same logic applies to full-stack development projects. Relying on a single programmer can make the project difficult to upgrade or manage long-term if the key developer leaves the project and does not document the code. Agile project management places the focus of responsibility on team members to document their code so that it is more easily understandable and upgradable by future programmers. Even in CMS plugin, module, and theme projects, we see the same problems with undocumented code repeat over and over when the development team changes and new upgrades are made. If you are considering adding artificial intelligence (AI) or machine learning (ML) functionality to your websites, industry best practices and well-documented code are even more important. Many projects waste time correcting errors, debugging issues, or deconstructing programming logic when taking over a project that was built by a single individual, i.e. full-stack developer.  Agile team members are more easily replaced when new employees can join a project where the code is fully documented from the start. Project managers can ensure that best practices for long-term maintenance and security testing of code are implemented from day one. Full-stack development with Agile teams allows you to hire the best experts for each framework and easily bring on new team members as the project grows and expands over time.  

Distinguish Low-Code from Full-Stack Solutions

Most content management systems (CMS) like WordPress, Drupal, Joomla, and Magento rely on full-stack development, but are built through collaboration with thousands of professional coders from around the world. Over 500 programmers worked on the latest WordPress release, with only around 15% from Automattic. Thousands of others build custom plugins and themes. After buying a custom theme and installing the script on shared hosting, web publishers can use CMS scripts with very little need for coding experience at all. The web server runtime is managed by experienced datacenter engineers from a third company. The plugins and themes are built under open-source licensing, but can be installed for free with a single mouse click. Many developers make a few CSS changes to the theme, add some PHP snippets to pages, install third-party modules for JavaScript frameworks, and then claim they are doing full-stack development when they configure the DNS settings for the domain on the web server. While this may be true, full-stack development in Agile teams is far more advanced and demanding. The latest trends are towards decoupled or headless CMS frameworks that rely on API queries or GraphQL rather than SQL to make monolithic systems more efficient as microservices. With API functionality, you can either build your own or use a third-party service. In the current marketplace, it is not common for developers to have the complete portfolio of experience to build microservice apps for enterprise organizations that scale with Kubernetes individually. Taking over undocumented and outdated PHP code for a CMS site from another developer or team can be problematic in migrations, upgrades, or modernization of legacy systems. Companies do not want to lose access to their historical data and content. Most code published through open-source frameworks like WordPress, Drupal, and Magento has been already peer-reviewed for security. Other custom code for these scripts has not even been pen-tested. Websites discussing full-stack development with open-source CMS frameworks do not usually address the web server “stack” layer or programming with the platform tools provided by public cloud hosting companies. Modern application development needs to be coded with support for containers, version control, CI/CD, and database compatibility with Kubernetes node clusters. It is important not to confuse open-source script hosting on managed servers with full-stack development, even if this is the most common definition found on the top Google sites today.  

Web Server Software Stack Requirements

Since the decline of the Sun Microsystems mainframe server in the DotCom era, Apache has been the most popular web server solution on Linux hardware. Apache HTTP Server competed with Windows Server in various versions for most of the last 20 years. The emergence of NGINX challenged both projects, which also competed with legacy Java or UNIX servers. It is important to consider the web server stack in any conception of “full-stack development”. This is even more important in the cloud hosting era where infrastructure is considered as code (IaC) and Platform-as-a-Service (PaaS) solutions are widely adopted. Some of the most popular web server stack combinations used in web/mobile application development are:
  • LAMP: Linux, Apache, MySQL, & PHP. This stack can support any Linux server distro like Debian, Ubuntu, RHEL, CloudLinux, SUSE, etc. Some web servers will support Perl, Python, Ruby, and Node.js along with PHP as extensions. MariaDB is a drop-in MySQL replacement and many hosting providers also offer PostgreSQL support for databases.
  • WAMP: Windows, Apache, MSSQL, & PHP. Although Apache is compatible with Windows Server software, many systems administrators use IIS as an alternative. These servers are widely deployed for ASP.NET development with C languages. The Microsoft SQL database replaces the MySQL option (now owned by Oracle) of LAMP servers.
  • LEMP: Linux, NGINX, MySQL, & PHP. NGINX is a Russian company that launched a web server platform that outperformed Apache for some time, mostly on the basis of reverse-proxy caching, with its own stack requirements for running PHP & other scripts.
  • MERN: MongoDB, Express.js, React, & Node.js. This stack is more of a marketing term and reflective of a change of methodology in cloud-native app development. The stack is platform agnostic and uses a NoSQL database solution with JavaScript development tools. Express.js is a web app building framework based on Node.js & RESTful APIs.
  • MEAN: MongoDB, Express.js, Angular, & Node.js. A MEAN stack is basically the same as the MERN stack with Angular as the JavaScript front-end development package. It can be compared to the MEVN stack which uses Vue.js for the interface instead.
  • JAMstack: JavaScript, APIs, & Markup Language. This is the general term for the entire change-over from monolithic LAMP/WAMP stack software to SSG-driven JavaScript frameworks like React, Angular, Vue, Gatsby, Next, Nuxt, Ionic, etc. Note that APIs are the critical element in both low-code and microservice solutions. Markup replaces the HTML generated by PHP in other stack configurations, with no MongoDB dependencies.
All of these stack configurations relate directly to the methodologies by which database-driven web and mobile software are authored. The full-stack developer’s task is to be a master of all these trades. Over 90% of the time, this is not realistically possible. Consequently, full-stack development is best done through Agile project management teams, rather than “10X Devs”.