Full stack development
A true full-stack developer is a unique project asset. They are very, very few and very far between.
Web development isn't just one job. There is a range of technologies and responsibilities to explore. The core responsibilities are split two ways, between front-end developers, who specialize in websites and applications, and back-end developers who work with servers and databases. A full-stack developer is one who oversees all aspects, or layers of the stack, of a project.
If it sounds too good to be true, a developer who can accomplish everything and anything, it often is. One project managers infinite resource, can be another's, spread too thin headache.
The description - Full Stack Developer - comes from the concept of a website or application being built on a stack of technologies, typically visualised as the layers of a sandwich or a burger. One technology builds on another, building a stack that delivers a final product.
However it is probably better to visualise the stack as being similar to a Russian matryoshka doll. The operating system sits inside the server, the server software sits in side operating system, the database and pre-processor / server-side scripting sit inside the server software, usually side by side. These all work together to deliver the html, css, and javascipt to the client side.
Much like the software used to run any digital device whether it be a desk top computer, television, video games console, or mobile phone, a server requires an operating system or OS.
- Linux
- Windows
- Mac
The software providers listed above are the main operating systems used by servers, with Linux the dominant server OS. When talking about a technology stack such as LAMP or WAMP the first letter is used to indicate the OS used, so LAMP would be Linux based. The OS manages the hardware first - the actual server itself, then the software applications used on it, providing common resources.
Knowledge of the differences between one OS and another is obviously a useful skill, but an in-depth skill set in anyone of them will be far more useful in setting up the application or website in the first place.
The server software, processes and delivers web pages to clients. Pages delivered are most frequently HTML documents, which may include images, style sheets and scripts in addition to the text content.
- Apache
- Nginix
- Microsoft-IIS
- LiteSpeed
- Google Servers
- Tomcat
Above is the top six in use server software applications as of October 2017 according to W3Tech.
This is the second letter in most technology stack acronym eg. LAMP (Apache), or WIMP (Microsoft IIS). This is the software that handles the incoming requests and sends out the necessary resources to the client side. Like the OS, knowledge of the differences between them is useful, but an in-depth skill set in one is probably much more preferential.
A database is an organized collection of data. A relational database, more restrictively, is a collection of schemas, tables, queries, reports, views, and other elements.
- MySQL
- Microsoft SQL
- NoSQL
Simply put this is where the content of a website, application, or CMS, is stored. This can be simply the content of the pages, through to the content, site defaults, user accounts, customer accounts, delivery records, store inventory etc. A website can be built with out a database, but without one, it will be severely limited in what it can do and offer.
The back-end which produces a response, customized for each user's request, to the website.
- ASP
- ASP.NET
- ColdFusion Markup Language
- Node.js
- PHP
- Python
- Ruby
- JSP
Server-side scripting, or pre-processing (or programming), is the means by which back-end content is compiled into the front-end content delivered to the client side.
At its most basic approach (with no database) server-side scripting can at the very least provide a dynamic and enhanced web experience compared to a flat HTML site. For example re-usable chunks of code (eg headers, footers, navigation) can be compiled, via the back-end, into the pages delivered. This will cut down on the actual file size footprint of the pages stored on the server, allowing more content to be stored.
Most of the back-end scripting or programming languages also provide features, that can be considered mandatory requirements (such as form handling and database integration),through to more complex methods and functions that vary from technology to technology, and can influence the decision of which one to use.
Combined with a database, this can be considered (without demeaning the role of the front-end, particularly when it comes to client side form handling and, other client side applications), is where the real "Heavy-lifting" of a website or application occurs. The server-side scripting can be used to create, read, update and delete the data on a database, something basic html websites can not do.
A CSS preprocessor is a program that lets you generate CSS from the preprocessor's own unique syntax.
- LESS
- SASS
- Stylus
- PostCSS
CSS pre-processors much like the server-side scripting, or html pre-processors, are the means by which css style sheets are compiled from sections, or components, of code.
Like a back end scripting program they can be given variables, and methods or functions (usually known as mixins), are compiled by a program or application into the css code delivered to the client's browser.
This is the code read, displayed, or handled by the client's browser. This is in effect the website itself, and the largest part of what a user will see and interact with.
- HTML
- CSS
- JavaScript
The front end is mostly focused on a trinity of technologies that can be considered as the content (html) - the semantic meaning of a website, application or page, the style (css) - both the layout of the content and the individual branding, and the scripting (JavaScript), the interactivity, and animation of the site or page. These three technologies can be largely considered together as UX / UI, and are discussed more in depth here.
The front end is not limited to html, css, and JavaScript though. There are other additional front end technologies that can enhance a website or application significantly.
- XML
- JSON
XML for example (EXtensible Markup Language), is a markup language (similar to html) that allows a developer to create their own tags to deliver and store data in a format that is both human and machine readable. JSON (JavaScript Object Notation) uses human-readable text to transmit data objects. It is a derivative of JavaScript, and is (generaly) seen as a more favourable alternative to AJAX (Asynchronous JavaScript and XML).
Sounds fantastic - why would I not want a full stack developer?
Where the issue of whether or not a full stack developer is a good idea or not is when you stop to consider if while looking for a polymath you can risk a "jack of all trades - master of none". Hopefully the above will have given you an idea as to the complexities of developing a fully functional website, application or cms. If your project is simple, a single, competant full stack developer, can accomplish a lot, if not the whole project. However, the more complex, the more the need for more than one developer, and even a specialist in each technology layer becomes required. Even if an accomplished full stack developer can deliver a polished final product a team of dedicated specialists will always be able to focus on individual elements and deliver at least quicker, if not a wholeheartedly better, final product.
This is where the concept of a Full stack developer falls over. The implication of this term is that no other developers are required, that one person can take a project from concept to polished final product. However it is virtually unheard of for there to be only one developer, particularly with larger organisations.
The blocks of the stack can also mean conversely, that no clear diversification of role can be achieved. Take the front end as an example, this whole term can encompass content developer or creator, social media manager, UX/UI developer, graphic designer, script developer, web developer, SEO manager etc. All these roles can not be viewed, despite the titles, as being "in a bubble". They all require cross technology skills, a script developer has to understand what parts of the DOM tree they are manipulating, a graphic designer has to appreciate their designs can be viewed on a range of device screen sizes, the social media manager has to ensure content can be shared properly and thus has to have a working knowledge of HTML and CSS.
In short modern web development has an emphasis on specialism, but also a requirement for cross technology skills. There is a fine balance between range of skills, and depth of skills.
Project manager V Full stack developer
So if you're lucky enogh to have a competant full stack developer (or developers) in your team the expectation is for them to take control of a project. However this is a role usually reserved for a project manager, and often for good reason. In the scenario of a team of full stack developers, each with their preferances and allocated roles, it will inevitably be a better use of resources to ensure that developers focus on development, that is get hands on with the coding. Where they are not doing this the focus should probably be on interchange and exchange of skills and knowledge with the other developers, whether they be recognised as full stack developers, front end, back end etc. A project manager's remit will often include other practical management issues, such as budget, resources, timekeeping and art-working.
It could be argued that a full stack developer should be able to pick up this role, and certainly to an extent one expects the full stack developer to have an over sight of a project, but how much of a potential waste of a resource is this? The requirement for a boundary between managing a project and building a project, again particularly in larger projects or organisations, is very clear, but it can bring an impression of a Victorian poor-house, with a project manager directing down to the developers.
This of course is not the case, developers will have significant input and involvement in the decision making process, directing the project manager in technology choices and options, and anticipated budgets, timings, and external resource requirements. Never the less the expectation is that a developer is there to develop, a manager is there to manage, and as much as it would be unrealistic to expect a manager to develop, it is not an optimal use of resources to have a developer manage (although - particularly full stack developers - they largely can and do).
Time V Resources V Budget
The defining argument as to why you should use a full stack developer, ultimately comes down to the same project balance, time, resources, and budget. If you've got time, an in depth team with a range of skills is best. If you don't have time a full stack developer will at least be able to create a product from scratch. If you've got resources, a project manager role will be required, but this can be a full stack developer, and with a lot of resources will come and exchange of skills that can be useful going forward. However if you have no resources you need a full stack developer to cover everything. Likewise, with no budget, there are a lot of roles that require filling, you need one full stack developer. But if you have budget you can specialise, and decrease your dependancy upon one resource.
The final case
Ultimately full stack developer is an old-fashioned term, it is not unreasonable in modern web development to expect range and depth of skill in a developer, the only question is what range / depth balance is appropriate to meet your project needs.
Arguments for a Full stack developer
- Holistic knowledge of the resources and technologies required to build a website or app
- Ability to step in or cover in a larger team as a temporary resource where necessary
- Cross technology skills are a necessity in web development anyway
- Expertise can be shared, and even full stack developers can have preferances and specialisims, so:
- Full stack developers can find specialised roles with in teams, but are capable of stepping in and supporting other roles where necessary
- They can also share their knowledge and raise the skills of the other team members
- Likewise, they will be able to pick up new skills themselves
- A full stack developer is product orientated rather than process orientated
- Their skill range will also likely cover analytical and investigative insights to maintain a final product
Arguments against a Full stack developer
- Lack of depth of knowledge could be an issue
- A project manager could be more appropriate for several reasons;
- Defining the goals of a project
- Non web related resources
- External suppliers / contractors
- If you have a single, competant, full stack developer you are utterly dependant upon them