To begin the understanding of what a full stack developer is, let us first step back and define what the opposite is. Someone who is not a full stack developer, is then, a specialist in a particular area. The specialists are, in general, categorized based on work areas which are familiar to everybody. The categorization usually starts at “front end” and “back end”. This is by default misleading, because even if you have a the “front end” and the “back end”, you are still missing 3 core components from the equation: database, deployment and devops.
Let’s look at the scenario from another angle. You are building a web app. A web app has the following basic criteria, which makes it a web app:
- It’s accessed through a web browser, by going to a URL.
- It has front end presentation – this is what the user sees – the buttons, text and input fields.
- The user creates, retrieves, modifies or saves data, so it must need:
- A web application server to handle the connections.
- A database to store all the information.
- The server needs a physical space to exist, so you deploy it to the cloud (see what I did there?).
- It needs to run, be stable, be updated.
- The stake holders need to understand its value.
Each of these points can be further broken up into more steps, depending on how complex the system is or how fast it needs to get developed. So here are the general skills necessary for each of the above points:
1. Web URL
This one is easy – register a domain and map it to your hosting plan. So far so good.
Although self explanatory, there are a lot of details to this point. To develop a beautiful front end, you must know about UX (User Experience), UI (user interface), user flow, user stories, SEO, graphics, some basic color theory, latest trends in design, design patterns for the programming part, UI testing, A/B testing, responsiveness to mobile devices (and probably more). And for most of these points, there are hundreds of different ways to achieve the same thing. Notice how I did not mention any actual programming skills; that is because I believe the programming languages/technologies can be picked up easily, it’s the concepts that are harder to master.
3 and 4. Web Application Server
This is the other major known part of an application. The developer must know best practices for server applications. How is the communication handled? Is it secure? Is it encrypted? Is it as safe as possible from attacks? If the application supports real time messaging, how is it handled? What kind of design pattern should be used and how will the app architecture look like including load balancers, firewalls and databases? What happens if a node goes down? What happens if the connection is lost half way in a transaction? These are only some of the questions to be asked when developing the Web Application Server side of things
5. A database
This is yet another big chunk of the system. Which type of database to use? And why? When considering this, a lot of factors must be taken into account, including cost, performance, future expansions and so on. The developer must be at least familiar with the difference between relational and non-relational databases, store procedures and db locks.
This is another skill our full stack developer needs to have. In very large projects, this is usually handled by a completely different team, but in today’s world, the full stack developer needs to know how to set up servers in the cloud or in house such that the application will run smoothly.
7. Deploying, Testing, Availability
Other key role in the lifecycle of an application are deployment, continous testing and availability. This require skills such as creating VMs or Doker containers, testing frameworks for continous integration and knowledge about distributed systems and availability. Another criteria which falls under this category is data consistency. I watched a speech about availability vs consistency of data, and in the speech there was an example about hotel booking systems and how in their business model availability trumps data consistency. For example, they allow the possibility of 2 people booking the same hotel room at the same time at the cost of the service being available. This is due to their business model – they’d rather overbook the hotel and deal with this at the counter (they all have a few rooms always available for these scenarios) than have you book a room in another hotel.
8. Relaying value to the stake holders
This, to me, is by far the most important skill to have. For everything I wrote above there are books. Hundreds of books, forums, stack exchange answers, Quora questions, university classes and so on. But for explaining the value to a business owner, for that there are no books. It’s all about the experience. And the only way to gather experience is by doing. And the best way to gather experience on this subject is to create, from scratch, your own social network application. This is the real “hello world” application.
So that’s what a full stack developer should do. But specialization has their own merit and it exists for a reason, so where do they [full stack developers] fit?
The most common answer is: start-ups! This is true for multiple reasons. A full stack developer is a very good asset in a startup – given the skills above. They can pretty much create a system from scratch, get it up and running and maintain it until it takes off.
And you don’t need to be a database expert to do this (and you shouldn’t). It is pretty self explanatory that you shouldn’t use an Oracle set up for your database before you have a prototype to your product. And if the prototype can be done using a free open source db (such as MongoDB) then just do it!
There is however, another place where full stack developers will be used a lot in the future: in big corporations, especially in traditional ones such as banking and finance. More on this another time 🙂
So in other words, a full stack developer should be able to put together a social network type of site (in terms of complexity), including mockups, layout, choosing color schemes, do all the development up to a working beta, and explain to the stakeholders, in plain english, the advantages of using the technologies of choice.
I learn by reading and having conversations with people about different subjects. This is a hot topic in the tech world right now and I would like to get your opinion on this so don’t hesitate to comment!