What does a full stack developer mean?
The term full stack developer means developers who are comfortable working with both back-end and front-end technologies.
A full stack developer doesn’t need to master all of the areas and technologies he needs to work it, because that just makes it nearly impossible, he just needs to be comfortable working with those technologies, and that’s a lot too.
A full stack developer is capable of performing tasks at any level of the technical stack in which they reside. It means:
- Working with systems infrastructure (knowing what hardware to ask for , what OS to install, how to prepare the system and dependencies for all software)
- Understanding, creating, manipulating, and querying databases
- API / back-end code in one or more languages, e.g. Ruby, Java, Python, etc.
- Project management / client work, e.g. gathering requirements, creating technical specifications and architecture documents, creating good documentation, managing a project timeline (e.g., someone who knows Agile/SCRUM/Kanban)
Layers of the Full Stack:
- Server, Network, and Hosting Environment.
- This involves understanding what can break and why, taking no resource for granted.
- Appropriate use of the file system, cloud storage, network resources, and an understanding of data redundancy and availability is necessary.
- How does the application scale given the hardware constraints?
- What about multi-threading and race conditions? Guess what, you won’t see those on your development machine, but they can and do happen in the real world.
- Full stack developers can work side by side with DevOps. The system should provide useful error messages and logging capabilities. DevOps will see the messages before you will, so make them count.
- Data Modeling
- If the data model is flawed, the business logic and higher layers start to need strange (ugly) code to compensate for corner cases the data model doesn’t cover.
- Full stack developers know how to create a reasonably normalized relational model, complete with foreign keys, indexes, views, lookup tables, etc.
- Full stack developers are familiar with the concept of non-relational data stores and understand where they shine over relational data stores.
- Business Logic
- The heart of the value the application provides.
- Solid object oriented skills are needed here.
- Frameworks might be needed here as well.
- API layer / Action Layer / MVC
- How the outside world operates against the business logic and data model.
- Frameworks at this level should be used heavily.
- Full stack developers have the ability to write clear, consistent, simple to use interfaces. The heights to which some APIs are convoluted repel me.
- User Interface
- Full stack developers: a) understand how to create a readable layout, or b) acknowledge they need help from artists and graphic designers. Either way, implementing a good visual design is key.
- Can include mastery of HTML5 / CSS.
- User Experience
- Full stack developers appreciate that users just want things to work.
- A good system doesn’t give its users carpal tunnel syndrome or sore eyes. A full stack developer can step back and look at a process that needs 8 clicks and 3 steps, and get it down to one click.
- Full stack developers write useful error messages. If something breaks, be apologetic about it. Sometimes programmers inadvertently write error messages that can make people feel stupid.
- Understanding what the customer and the business need.
- Now we are blurring into the line of architect, but that is too much of a hands off role.
- Full stack developers have a grasp of what is going on in the field when the customer uses the software. They also have a grasp of the business.
What full stack meant in 2000 and what it means now?
2000 was a long time ago, in that year PHP 4.0 was released. Yes, 4.0. Back then, a good web developer knew a little HTML, CSS and some procedural PHP, because proper OOP didn’t even exist until version 5.0.
The LAMP (Linux – Apache – MySQL – Perl/PHP) stack was all the rage in those years, with little or no alternative. In the early 2000s if somebody used version control they were considered either technological heretics or wizards. Today it’s unheard of and laughed at, not using one.
So, let’s try to break down and categorize the main technology stacks that are required from a full-stack developer today:
- Linux and basic shell scripting
- Cloud computing: Amazon, Rackspace, etc.
- Background processing: Gearman, Redis
- Search: Elasticsearch, Sphinx, Solr
- Caching: Varnish, Memcached, APC / OpCache
- Monitoring: Nagios
Linux powering most of the Internet, it’s a de-facto operating system in web development (not to dismiss .NET). In addition, a full-stack developer should know how cloud hosting works, Amazon / Rackspace or other providers and its APIs.
Search is an integral part of most websites – a developer should know how to set up and use search servers such as Sphinx or Elasticsearch.
Caching is also important, Varnish, reverse proxy, Memcached and opcode caching. He needs to know what each of these is and how to use it.
Web development tools:
- Version control: Git, Mercurial, SVN
- Virtualization: VirtualBox, Vagrant, Docker
Today, it’s unnaceptable not to use version control, even if you’re a solo developer.
With virtualisation tools, having separated development environments on a per project basis is really nice to have, and easy to set up with VirtualBox and Vagrant at least.
If you want to work with Vagrant you also need to know the basic syntax of Ruby and shell scripts as well.
- Web servers: Apache, Nginx
- Programming language: PHP, NodeJS, Ruby
- Database: MySQL, MongoDB, Cassandra, Redis, SQL / JSON in general
Apache and Nginx are the norm for web development. A full-stack developer should know how to set up these applications and serve the contents of his website.
PHP is what needs to be mastered on a high level, NodeJS, Ruby is nice to know as well.
In addition to web server and programming languages, database management is also a requirement for a full-stack developer which in itself is another beast.
Relational (such as MySQL, PostgreSQL) vs non-relational databases (like MongoDB, Redis or Cassandra) are differences the full-stack developer needs to know, along with knowing the syntax of XML / JSON.
- HTML / HTML5: Semantic web
- CSS / CSS3: LESS, SASS, Media Queries
- Compatibility quirks across browsers
- Responsive design
- AJAX, JSON, XML, WebSocket
Here comes the fun part. If you want to present your website, you’d better know these and all their quirks.
One should also know how to communicate with the back-end via AJAX or WebSockets.
- Converting website design into front-end code
For example if you want to set up Vagrant you need to know Ruby’s syntax, as simplified as it is or if you want to manipulate DOM elements, jQuery is a good to know technology.
One other category that deserves mentioning is mobile technologies. It’s a very dynamic industry and closely related to web development:
- Hybrid: PhoneGap, Appcelerator
One of the biggest disparities today is between web and mobile development, but the gap is rapidly closing.
A full-stack developer should know about these technologies as well.
Is it better to be a full-stack developer?
Being a full-stack developer means to have an open mind towards new technologies, having your hands dirty in each one and to have an understanding of how a web application gets done from a concept to design to the finished product.
The idea of a “full-stack developer” isn’t about being fluent in every possible technology there is, because specialization exists for a reason. It’s more about having an understanding in each of the areas above, to communicate intelligently between team members and to be a good asset if the situation needs it.
The full-stack developer will have an increasingly important role in the web development of the future, especially when development methods such as DevOps are becoming an essential part of software development companies, where the line between code developers and administrators who are responsible for code deployment and setup is getting thinner each day.