Defining, describing, and drawing you a picture…
I’m going to use the most popular example to define a full-stack developer. If there’s one person who wore many hats in his lifetime, it’s Leonardo Da Vinci. He was a painter, scientist, mathematician, cartographer, geologist, astronomer, historian, musician, and sculptor. People believe that diverse experiences fed into his creative genius, making him a nonpareil innovator.
If this extraordinary Renaissance man was a programmer today, he would be what we call a “full-stack” developer. Murky picture becoming a little clearer, I hope.
Until about a few years ago, a well-planned and perfectly functional website required just two kinds of people to be up and running: a web designer and a web developer. Cut to the present day.
Developers now identify with over 24 such specific job titles, including front-end web developer, back-end web developer, mobile developer, and desktop developer. Understandably, nomenclature is becoming increasingly complex to work with. It is often restrictive (and unfair) to have one job title to describe your distinct skill sets. For instance, consider the findings of a 2015 survey by Stack Overflow: for the third year in a row, a majority of respondents (30%) identified themselves as “full stack developers” when asked to categorize their occupation.
So who are full stack developers? No, they aren't mythical creatures who are magically endowed with expertise across the software development terrain.
Full stack developers are ordinary mortals like the rest of us. Michael Wales of Udacity describes a full stack developer as one who can work cross-functionally on the full “stack” of technology, i.e. both the front end and back end. In layman’s terms, they are jacks of all trades and masters of one (or many, as opposed to none).Source
Gone are the days when developers got by knowing only one programming language. Today, designers and developers share a greater area of the product development Venn diagram. They are more equipped to work with myriad technologies starting with the back end to the front end.
It takes them years of rich practical experience to earn their stripes as good full stack developers, which is why many consider them a rare breed of talent and commitment. Despite the concept having its fair share of naysayers, these wizards are still sought after by smaller companies and startups in the fledgling phase where their diversity and versatility are highly appreciated.
Looks like your cup of tea?
If not, here’s an interesting video where Microsoft’s Scott Hanselman could well change your mind.
Taking a quick look at the basics…
For full stack development, you need to understand
- Hosting systems (the computer; the OS; and supporting services like DNS, SSH, email, and Apache)
- Application stack (web server like Apache or IIS; relational database like Oracle, MySQL, and PostgreSQL; and dynamic server-side web languages like Python, PHP, NodeJS, and Ruby)
That’s a whole bunch of “stuff.” Reeling? I’m not going to be dwelling on those terms, you guys.
This isn’t a tutorial, you know! However, I’m going to be…
Talking about some key skills full stack developers need to have…
Over the past few years, the full stack has become “fuller.” In simpler times, a stack was rather straightforward and consisted of LAMP (Linux, Apache, MySQL, and PHP) or MEAN (MongoDB, ExpressJS, AngularJS, and NodeJS). But with the advent of tooling, cloud services, design, data, and networking, full stack developers now have to deal with a whole new ball game.
Every full stack developer is different and has his/her unique combination of skills suitable for specific startups. The first step is to decide where one's core competencies lie (back-end vs. front-end) and where it is enough to know just the bare necessities.
What is a front-end developer responsible for? The architecture of immersive user experiences and user-facing code…
A full stack developer whose skill lies in the front-end has to write consistent and maintainable code that translates into a hassle-free user experience devoid of eyesores and unnecessary clicks. On top of scripting capabilities, a full stack developer who can also play around with typography, color and layout, is a coveted resource.
A web designer and a front-end developer are essentially different, with the later not required to actually design how websites look. But they can leverage their creativity. Converting website design into front-end code deals with user experience (UX) and user interface (UI).
- The expertise of an UI designer will include mockups, graphics, and layouts; design principles will focus on visual design, and visual strength will be colors and typography.
- The expertise of a UX designer will include wireframes, prototypes, and research; design principles will focus on human-centered design, and visual strength will be task flows and scenarios.
You can take a look a great diagram in this post from Ben Melbourne, a Brisbane-based digital strategist, to understand the roles better.
You can also see companies asking for Ajax skills. If you have very little idea about libraries like LESS, SASS, and Media Queries, then it’s time you did something about it. How about AngularJS, Bootstrap, Backbone, Foundation, and EmberJS—frameworks that you need to create successful web applications?
FYI: A front-end developer assembled all the copywriting, the photos, the graphics, and everything you see on this page into “web speak.”
How has your user experience been? Let us know.
For the user-facing part of the website to exist, some poor soul (albeit a brilliant one) needs to build and maintain a server, an application, and a database. Back-end developers “develop and maintain the core functional logic and operations of a software or information system” (Technopedia). For instance, as a backend developer, you can use ASP.NET, an open source web framework, which mandates a Windows server, and it works with a language like C#.
For the lay person, it is the back-end developer who makes pulling values from the database possible when you use a drop-down menu.
If a full stack developer's forte lies in the back-end, it is imperative to understand basic server-side scripting and the art of providing dynamic responses to client requests. There is no dearth of server-side languages, but Ruby, Java, and Python are popular.
Full stack developers are expected to be able to create, query and manipulate databases with ease. There are several to choose from, ranging from SQLite to MongoDB to Oracle. The one to learn will depend on the project you're working on. A hosted database will save the full stack developer the time and effort that comes with managing it. Big projects have dedicated database administrators.
It will be great if you know some frameworks, specific PHP ones, like Zend and Symfony or Django for Python, or Ruby on Rails for Ruby; version control software like SVN or GIT; and Linux.
The back-end developer also needs to learn about caching and key value stores, queuing systems, search engines, and other tools like Carrierwave or Refile.
FYI: Each time you return to a site and login, a back-end developer makes calling your stored data possible.
Beefing up your portfolio with these non-technical skills
Apart from hard-core technical skills, a full stack developer must be the glue that binds different teams together. It is hardly enough to be a multidisciplinary polyglot if a developer is not capable of speaking at the same wavelength as the front-end and back-end teams. It is the best way to eradicate silos from the workplace and everybody on board moves quickly to get the product rolled out on time.
Full stack developers should be aware of the business dynamics they work in. This means that a deep understanding of customer needs must be the perpetual guiding force behind the design of the product.
As with every kind of programming job, soft skills are imperative to sandpaper the overall personality of a developer. Strong communication is no longer an exception — it is vital for full stack developers to help them bridge information gaps between the front-end and back-end to build a product they will be proud of. A tireless quest for new knowledge and of course, an open mind toward fresh ideas, (a success mantra all leaders swear by!) define a full-stack developer.
In conclusion, those who understand the stack in its entirety are poised to build applications that best suits customers' requirements. So the next time somebody calls a full stack developer a generalist, please disillusion him.