A few weeks ago, my colleague Eric Shanks wrote a good piece called “So You Wanna Be A Full Stack Engineer…” In the post, Eric talks about some the things you can expect when you get into a full-stack engineering role.
You may be wondering what exactly a full-stack engineer is. It’s definitely a hot buzzword. But what does someone in a full-stack engineering role do? What skills do they need to have?
The closest definition I can find for someone who isn’t strictly a developer is “an engineer who is responsible for an entire application stack including databases, application servers, and hardware.” This is an overly broad definition, and it may include things like load balancers, networking, and storage. It can also include software development. The specifics of the role will vary by environment – one company’s full-stack engineer may be more of an architect while another may have a hands-on role in managing all aspects of an application or environment. The size and scope of the environment play a role too – a sysadmin or developer in a smaller company may be a full-stack engineer by default because the team is small.
However that role shakes out, Eric’s post gives a good idea of what someone in a full-stack role can expect.
Sounds fun, doesn’t it? But how do you get there?
In order to be a successful full-stack engineer, you need to get a full-stack education. A full-stack education is a broad, but shallow, education in multiple areas of IT. Someone in a full-stack engineering role needs to be able to communicate effectively with subject-matter experts in their environments, and that requires knowing the fundamentals of each area and how to identify, isolate, and troubleshoot issues.
A full-stack engineer would be expected to have some knowledge of the following areas:
- Virtualization: Understanding the concepts of a hypervisor, how it interacts with networking and storage, and how to troubleshoot using some basic tools for the platform
- Storage: Understanding the basic storage concepts for local and remote (SAN/NAS) storage and how it integrates with the environment. How to troubleshoot basic storage issues.
- Network: Understand the fundamentals of TCP/IP, how the network interacts with the environment,and the components that exist on the network. How to identify different types of networking issues using various built-in tools like ping, traceroute, and telnet.
Networking, in particular, is a very broad topic that has many different layers where problems can occur. Large enterprise networks can also be very complex when VLANs, routing, load balancers and firewalls are considered. A full-stack engineer wouldn’t need to be an expert on all of the different technologies that make up the network, but one should have enough networking experience to identify and isolate where potential problems can occur so they can communicate with the various networking subject matter experts to resolve the issue.
- Databases: Understand how the selected database technology works, how to query the database, and how troubleshoot performance issues using built-in or 3rd-party database tools. The database skillset can be domain-specific as there are different types of databases (SQL vs. No-SQL vs. Column-Based vs. Proprietary), differences in the query languages between SQL database vendors (Oracle, MS SQL Server, and PostgreSQL) and how the applications interact with the database.
- Application Servers: Understand how to deploy, configure, and troubleshoot the application servers. Two of the most important things to note are the location of log files and how it interacts with the database (ie – can the application automatically reconnect to the database or does it need to be restarted). This can also include a middleware tier that sits between the application servers The skills required for managing the middleware tier will greatly depend on the application, the underlying operating system, and how it is designed.
- Operating Systems: Understand the basics of the operating system, where to find the logs, and how to measure performance of the system.
- Programming: Understand the basics of software development and tools that developers use for maintaining code and tracking bugs. Not all full-stack engineers develop code, but one might need to check out production ready code to deploy it into development and production environments. Programming skills are also useful for automating tasks, and this can lead to faster operations and fewer mistakes.
Getting A Full-Stack Education
So how does one get exposure and experience in all of the areas above?
There is no magic bullet, and much of the knowledge required for a full-stack engineering role is gained through time and experience. There are a few ways you can help yourself, though.
- Get a theory-based education: Get into an education program that covers the fundamental IT skills from a theory level. Many IT degree programs are hands-on with today’s hot technologies, and they may not cover the business and technical theory that will be valuable across different technology silos. Find ways to apply that theory outside of the classroom with side projects or in the lab.
- Create learning opportunities: Find ways to get exposure to new technology. This can be anything from building a home lab and learning technology hands-on to shadowing co-workers when they perform maintenance.
- Be Curious: Don’t be afraid to ask questions, pick up a book, or read a blog on something you are interested in and want to learn.