Full-Stack Engineering Starts With A Full-Stack Education

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.

Three Years to #VCDX

“Two roads diverged in a wood, and I— 
I took the one less traveled by, 
And that has made all the difference.”
Robert Frost, The Road Not Taken

“Life is a journey, not a destination.”
Ralph Waldo Emerson

It’s good to have goals.  It’s good to have goals that seem like they might just be a little out of your reach as they force you to challenge yourself and grow.

On Thursday, I completed the goals a set of personal goals that I had set for myself at the beginning of the year – achieve my VMware Certified Professional Certifications on the Data Center and Desktop products.  I passed my first VCP exam in August at VMworld.  I passed the VCP Desktop exam Thursday morning.

This was actually the second time I took the Desktop exam.  The first time I took it was on the last day of VMworld.  I hadn’t actually planned on taking the test, but I had some time to kill before my flight.  I barely missed a passing score on that exam, which I thought was pretty good considering that I had not prepared for that exam in any way and was rushing through it at the end.  After a month of reviewing Jason Langer’s VCP5–DT study guide, I was ready to sit for this test again.

So now that I’ve achieved these two certifications, I’ve been trying to decide what’s next. It didn’t take long to set a new goal –  to become a VMware Certified Design Expert, or VCDX, within three years.

For those who are not familiar with VMware’s certification tracks, there are four levels.  Although the analogy might not be 100% accurate, I’m going to relate these levels to the different types of college degrees that one can get.  Those four levels are:

  • VMware Certified Associate (VCA) –  a new entry-level certification track.  Does not require any classroom training.  Think of it as an associates degree.
  • VMware Certified Professional  (VCP) –  The primary VMware certification.  Requires a 5–day instructor-led classroom training and proctored exam.  This certification is required to attempt any higher level certifications.  Think of it as a Bachelor’s degree.
  • VMware Certified Advanced Professional (VCAP) –  The level above the VCP, and a VCP is required to try for this certification.  Does not require any additional classroom training, but it does require in-depth knowledge of the products you are being certified on.  Under the current programs, there are two VCAPs that you can get for each product track – Design and Administration. Design focuses on the planning and design steps of implementing the product, and Administration focuses on actually running it once it is implemented.  This is equivalent to a Master’s Degree. 
  • VMware Certified Design Expert (VCDX) –  This is a PhD of VMware Certifications.  In order to even attempt this certification, you need to hold both the Design and the Administration VCAPs for the VCDX you’re attempting.  Anyone aspiring to this level needs to submit a design for a VMware environment.  If that design submission is accepted, they will need to defend that design in front of a panel of VCDX holders.  Some people have spent over 500 hours on their designs or gone in front of the panel multiple times.  Like I said…it’s the PhD of VMware Certifications.  (For the record, the two certifications that come closest to this are the soon-to-be-defunct Microsoft Certified Architect, which was a very expensive certification that required learning from the programmers of the Microsoft system followed by a panel defense and the Cisco Certified Architect, which requires a CCDE and a panel defense).  There are only around 125 VCDX’s currently.

My goal for acheiving this, as I said above, is three years.  This seemed like a reasonable goal because:

  1. I have two take two advanced certifications before I can even attempt to submit a design for the VCDX.  Depending on what products are released in the next couple of years, I will have to recertify to keep current.
  2. I want to get a lot more real-life experience, especially in the design area.
  3. The design work for the submission will take a significant chunk of my time.
  4. Baby Massey #2 is slated to arrive in early April. 

I have put together a plan that will get me into position to meet all of the prerequisties of the VCDX within a year, and I’m starting to build up my home lab so I can really dive into this.

Now, I may never reach this goal.  This is a very difficult road to go down.  But there is no harm in not making it to this destination as this road is also filled with the rewards of knowledge and growth.

Another Great Article on Career Development…

In my last post, I mentioned that I follow a few blogs through Google Reader.  One of those blogs is the Ask the Directory Services Team blog on Microsoft Technet Site.

Normally, this blog is filled with answers to some very technical questions on Active Directory and related technologies.  One of their more recent entries, however, was focused on the author’s career development philosophy

This would be a great read for any college student entering the work force, and although some of the tips may seem like common sense, a lot of rookie (and sometimes experienced) IT pros can sometimes have trouble some of these basic tips. 

For instance, I know that I have trouble filling the that conversational dead space while working with others.  This is obvious when I work with other introverts.

I’ll also add that admitting your mistakes gets easier as you get older and gain confidence.

The blog ends with a truism that applies to any career: “I used many synonyms in this post, but not once did I say “job.” Jobs end at quitting time. A career is something that wakes you up at midnight with a solution. I can’t guarantee success with these approaches, but they’ve kept me happy with my IT career for 15 years. I hope they help with yours.”

Skills Development and IT

A good friend of mine recently wrote a blog on how to get hired.  Most of the blog posting talks about the interview process and his reflections on the experience performing mock interviews with college students studying IT. 

The main point of the article can be summed up with this sentence near the end of the post:  “Want to know what outdoes a Masters degree and a 4.0 GPA?  Pure, raw, f*cking talent.”

Talent is rarely raw and pure.  It is something that is honed through patience and practice.  It’s not just the successes and failures on projects and teams but applying those lessons you learned.

What everyone does have, though, is potential.  Potential is like a lump of clay or a block of marble.  To the average person, it appears to be nothing extraordinary.  But in the hands of a skilled artist, we get amazing works like Michelangelo’s David or the Venus de Milo

When you think of talent in terms of a career, I often think of job skills.  IT is a career path where one can easily keep their skills sharp and develop new skills.

There are a couple of ways that one can easily develop their technical skills, and anyone coming out of college with the intent of having a career in information technology should be doing some of these early in their career.

One of the easiest ways to expose yourself to new technology or improve your knowledge of existing technology is to read about it.  There are hundreds of books and blogs about every area of information technology.  There is a ton of information that can be gleaned from spending twenty minutes a day reviewing your RSS feeds.

I have 132 blogs in my Google Reader account.  Most are technical blogs.  I know that sounds like a lot, but once you filter through the obvious marketing posts from sites like TechRepublic, there is a lot of good content, and you can usually get through everything by spending 20 minutes per day.

A large chunk of those are also Microsoft blogs.  It seems like every product team at Microsoft has at least one official blog, and unlike many other vendor blogs that I’ve followed, the content usually seems to be geared towards technical readers.  Two good examples are the Exchange Team blog and the Ask the Directory Services Team blog.

Aside from vendor blogs, there is a lot of good community generated content.  I could list off a large number of blogs by other systems administrators that I consider good sources on a variety of topics, but then this would turn into a blog about other good blogs.

Another good source of content are sites like Server Fault and Stack Overflow.  Server Fault and Stack Overflow are a pair of websites that are geared towards IT Pros and programmers where users can turn to for community advice by asking questions about problems, projects, and how to handle different situations.

Technology certifications are usually offered by vendors to certify that someone has a level of familiarity with their products.  For an experienced IT professional, it proves that you know something, and it can help round out your knowledge of a particular product.  For someone just entering the workforce, it can give you some hands-on knowledge.

Entry-level certification often involves one of two paths:  self-study or classroom.  I tend to focus more on the self-study, and this is usually the cheaper option for someone who doesn’t have a company paying for a week-long bootcamp.

Hands-on Experience
When I say hands-on experience, I don’t mean the kind of experience you get when someone is paying for your time, or when you are volunteering for an organization.  I mean the kind you get when you experiment on your own time.  In my opinion, this is probably the best way to learn about technology. 

The nice thing about IT is that you can easily get experience on enterprise-grade hardware and software.  Dell offers decent entry-level tower servers for $500-$600.  A Microsoft Technet Plus subscription runs about $150 for the lowest level package, and VMware and other vendors offer free versions of their enterprise software that allow a user to learn the basics of the system even if they are functionally crippled.

And you can’t forget about Linux and the other open-source *nixes and software packages.

It basically comes down to this – if you want to be a database administrator, you should be learning about databases by building them.  If you want to be a Linux administrator, you should be setting up Linux servers.  It pays off when you can go into an interview and explain a complicated problem that you solved on your personal network and what it taught you.