Some consider a full stack developer to be a versatile commando who, in addition to coding, should also know the basics of quantum mechanics, construction, and Mandarin. A lot is required from a full-stack, but let's not exaggerate
Undoubtedly, there are skills without which it is difficult to think about being a full-stack. You can do without some, but having them can be a significant asset. This applies to both hard and soft skills. Therefore, in this article, I will describe them all, with examples of specific technologies and explain why they play a more or less important role.
The most important hard skills for a full-stack developer
I consider the skills listed below to be essential. They are relatively few, given the total number of subsections in the article; however, they are by far the most relevant to the modern full-stack developer.
Back-end language and framework
Front-end language + HTML and CSS
Version control system
Examples: Git + a remote repository, e.g., GitHub or GitLab
There is practically no choice in the matter. To work as a full-stack (and as a developer in general), knowledge of Git is mandatory. Furthermore, it is worth learning one of the methodologies for working with Git, such as Gitflow. It is used by virtually all software houses and other companies that develop software. It's safe to say that a significant number of developers start their working day by taking a peek at Git. It allows you to restore previous versions, track any changes you make to the code, and check on the progress of other team members.
Examples: SQL + one of the databases: PostgreSQL, MariaDB, MySQL (open-source) or Oracle, SQL Server (commercial)
Admittedly, there may be times when particular roles in a development team do not require working on databases, but knowing them always gives a significant advantage. It helps us understand entire systems and the relationships between their components.
So, if you are serious about being a full-stack, try to familiarise yourself with them.
Hard skills worth possessing
The following list is about skills that can be a trump card for many recruitments, but no programmer should have trouble finding a job without them either. I have sorted them from most to least relevant to the modern developer.
Project management methodologies - both agile (Scrum or Kanban) and traditional (waterfall)
Although project management methodologies such as Scrum, Kanban, or waterfall are used in almost every software company, I decided to include them into the "nice to have" category for two reasons:
- A lack of knowledge of these methodologies shouldn't be an obstacle to finding a job for novice programmers. It is time-consuming to master them, so companies do not pay much attention to this aspect when hiring juniors.
- The experienced ones, on the other hand, have already dealt with them in 99% of cases.
Framework for testing
Examples: depending on the technology, for example, JUnit, Enzyme, Jest
The use of automated code testing tools is very common among software companies. An understanding of this procedure or the actual writing of automated tests can be an important asset.
Containerisation means encapsulating an application together with its environment in a unit called a container. It allows it to be freely portable and run on different machines and operating systems (with additional software). It is much like the logistical standard of size and rules for transporting containers on ships (hence the name); it is a generally accepted method and definitely worth familiarising yourself with.
Fundamentals of network protocols and computer networks
Examples: HTTP, REST, Public Key Infrastructure
A simple relationship - most of the products you create rely on HTTP and a few others to a far lesser extent. One can use them for years without a deep understanding of how they work, but, in a sense, they are what allow the software we create to exist. Becoming familiar with them is another element in understanding the totality of the projects you are working on.
Basics of cloud technologies
Examples: AWS, Azure, Google Cloud
The critical issue here is the distinction between Infrastructure as a Service and Platform as a Service. The division here is that in the first case, we are talking about renting virtual machines that provide computing power, and in the second, about a cloud-based application deployment platform.
Continuous Integration Systems
Examples: Jenkins, Travis CI, GitHub Actions, GitLab CI (the latter three have free minutes)
These systems enable continuous code quality control, automated testing and change integration. The solution is somewhat unusual in small projects, and during the programming learning process, so we usually encounter it while working in an agency or a larger company. Nevertheless, knowing them can be very useful and valuable. One can use the latter examples to get to know them, as they have free packages.
NoSQL (Not Only SQL) databases
Examples: MongoDB, ElasticSearch, Redis
Non-relational databases are less common in the market than relational and used for something slightly different, but many companies still use them. Conceptually, they are simpler than relational databases, so learning the basics will take less time. Still, it is worth knowing that they exist.
Creation of documentation
The ability to write technically or create documentation is rarely required of novice developers. However, if you want to be considered an advanced full-stack professional, it is essential to possess these skills.
Basics of UX/UI
A comprehension of the simplest rules that govern UX/UI facilitates communication, understanding of guidelines, and the roles of specific elements in the overall puzzle. It is unnecessary, but it can make your work easier and sometimes even allow you to shine with an accurate observation or correction.
What soft skills should a full-stack possess?
Possessing a range of technical skills opens a myriad of doors in the world of software development; however, it is often these soft attributes that determine whether you secure a position. The modern developer increasingly needs to go beyond the geometric confines of a 16:9 monitor and prove him or herself in other ways. So, what should one be capable of in this respect?
Attentive listening and effective communication
Being an active participant in the overall process allows you to solve problems and wrap up tasks much faster. It is impossible without the ability to communicate effectively and, above all, the willingness to listen and share one's thoughts. Maximum fluidity in such processes has a measurable effect on efficient code development.
It does not only apply to teamwork. Developers are increasingly in direct contact with people on the client side, even in the form of presentations to larger numbers of people. Therefore, experience in public speaking can be a significant asset in some job recruitments.
Adaptation to changing conditions
Working in software houses often involves the need to change the project you are working on quickly. The ability to adapt, learn quickly or even learn new technology are essential assets for a programmer and tremendous value for any agency.
Understanding business needs
Code writing always runs more efficiently when you know its purpose and the importance of each element. The ability to understand a client's business also often allows you to identify potential risks or strategic mistakes. With extensive knowledge and work on many projects, advanced developers often become excellent business consultants who create code and make products realistically better. For this reason, the recruitment process usually involves the end customer of the software house, who is interested in programmers familiar with their industry.
Excellent knowledge of all teamwork tools does not yet make us good team players. Through empathy, listening and understanding the needs of colleagues, a good atmosphere is created, and in such an atmosphere, the best code is created.
Last but not least
The last skill I would like to mention will disrupt the pyramidal order of the article, as it is absolutely the most important - good oral and written English.
The lack of English language skills closes a considerable number of opportunities in the world of software development, both for communication and educational reasons. Apart from the programming languages themselves, a significant proportion of tutorials, training courses and useful forums are only available in English. A lack of language skills, therefore, means a lack of development. So, this is always the place to start.
And on that final note, I will finish. Thank you for your attention!
Full Stack Java Developer with German