Hard-core multiskilled developers have always been a thing in the IT industry. In the beginning, they were a rare commodity and regarded as amazing talents. As the years progressed, such broadly diverse skill sets fell on hard times, however, with companies and employers generally looking for more individuals with more narrowly specialized skills.
Rather than fly away, however, these rare birds have merely morphed into what we now call full stack developers. Highly specialized programmers and developers still dominate the market, but so-called full stack developers are increasingly being called back into action. Varying definitions of this title exist:
For some, a full stack developer has knowledge of everything from front-end to back-end; to others, a full stack developer is one who has general knowledge of most stages of software development from concept to finished product. For many, a full stack developer is a largely fictional figure with a virtually unattainable skill set.
The way I see it, a full stack developer is a highly competent IT jack-of-all-trades. Old school full stack die-hards would consider a full stack developer to have specialized knowledge in all stages of software development. Thus, a full stack developer would be proficient, if not fluent, in:
- Server, network, and hosting environments
- Relational and nonrelational databases
- Interaction between APIs and the external world
- User interface and user experience
- Quality assurance
- Security concerns throughout the program
- Understanding customer and business needs
This rare breed of individual has the ability to interpret and assess each stage of the development process, so they can add their brain or weight to each of the subject areas as the process flows along. Such folks are becoming highly sought after in a world where specialization has, in my humble opinion, gone too far.
Remember when ... ?
At the risk of sounding like my father, back in my day, a full stack developer was just a good developer and the skill set of knowing what QA was, or knowing that support needed a portal to admin the software you were making, was just something you were aware of and accounted for. Developers learned whatever software they needed to, worked tightly with business analysts, and were VERY collaborative. A full stack developer was largely just a good developer.
In the highly fractured present, a developer who isn't only proficient in a certain language, or who interacts with the business or requirement-gathering sessions, is very rare. Such multifaceted gems have are what we now think of as being full stack.
The jack-of-all-trades aspect is exactly why development has left this methodology. That phrase had always had master of none appended to it, and it is precisely because of horizontal technology development that some full stack developers cannot be expert in just one skill. Most of those who claim to be full stack developers, alas, are just such artful dabblers.
If you have a look at a job search board, perhaps Indeed or Dice, you will see thousands upon thousands of job offers that want full stack expertise. In my experience, these job offers are looking back to the golden era of development when a developer could address all aspects of a development project, or at least understand them enough to add input and keep the ball rolling when team members had questions.
In my opinion, such hiring ads are asking for a skill set far more than describing a job. They want someone who can improve their entire base and are really looking for a functional development manager, one who can code, yes, but who can also oversee the entire development process.
Become a full stack developer
For those considering the field, you will naturally need a whole host of skills to become a functional, effective full stack developer. You need to be proficient in multiple programming languages, such as JAVA, PHP, C#, Python, Ruby, Perl, etc. These don't include the actual apps that you will be creating, as most of your core business processes need to be written in these languages.
Remember that whatever core application the company uses needs to be learned, as well. You will also have to master the language grammar, and to be very familiar with how to structure and design project, as well as with implementation and testing of the project based on one language or more languages.
For example, if you choose JAVA, then you need to master the object-oriented design and development, design patterns, J2EE-based components of the development, and so on.
I am a huge fan of soft skills and their application in technology today. So often we have professional technology people out there that are unable to talk to people, to marry their technical ability with the ability to have a conversation or discussion about a path forward in technology. You get this weird disconnect with what people want and wat they receive, leading everyone down a path where no one ends up happy.
If you weren't grandfathered into the old school of hard knocks development, then you will have a long uphill battle with learning to be a full stack developer. In keeping with Malcolm Gladwell's 10,000 hours rule, you should expected to spend at least 10 years mastering the front-end, back-end, and client-oriented knowledge content needed to be a full stack developer.
Therefore, the path to becoming full stack developer is by no means traveled overnight. In fact, I would add a couple years to that 10-year timeline. You should always be at work on laying a solid technical foundation, strengthening your core skills, and learning from whatever challenges come your way.
Expect to crawl, then walk, and finally run your way through the process. And don't forget your soft skills: Do some public speaking, or volunteer to act as host at various functions in the development world. After that, spend a lot of time understanding the development cycle and how it works, where the hand-offs are, and how to go through the application cycle.
Try to shoot for skill sets that will contribute to your becoming a manager of development and not a coder, per se. You need to be paid for your brain and not for your hands. Always be mindful of the big picture and not the small steps. Those will always take care of themselves.
As always, I wish you the best of luck, and happy coding!