Wednesday, November 7, 2018

For those who if they keep hearing "DevOps", "Python ", "Automation" are gonna kill somebody... read on.

Career-centric posts seem to be liked here judging by the average level of comments/upvotes VS other types of posts, probably due to the fact that career = $$$.

Anyway, I've recently changed jobs and I wanted to give my two cents when it comes to "up-skilling" oneself and what one should focus on, especially in today's environment.

Some of you seem to believe that a network engineer + automation (whatever that translates to for you) is not yet "worth the time" or that it's "just a fad", at least from a perspective of what's the salary difference?. It's true, you're probably not gonna earn double your current rate just by knowing some python. What is also true is that the ground is shifting, and while knowing some "automation" is not a kill-or-be-unemployed kind of situation (yet), it will get there with time.

Where I come from

A few months ago I passed my CCIE (R&S). I was working for Amazon for about 2 years as an NDE. As anyone that has worked in Amazon can tell you, a CCIE is pretty worthless in the sense that you're hardly ever gonna use any cisco-specific stuff. I did it because I had it among my goals ever since I got into networking.

Amazon is doing tons of recruiting for network engineers, they never seem to have enough. As a NE yourself, after about 6 months you are placed on the interview rotation as an interviewer, be it phone screens or on-sites. As you can imagine, generally people "throw themselves" to get into Amazon, yet the % of people that pass all interviews is miniscule. Rejections are the norm even after ~3 phone-screens and a 6 hour on-site. A few months before I left we got a directive where now scripting / coding or automation-oriented mindset is a mandatory requirement - before it was just a "nice to have" and while it was tested, you couldn't really be disqualified just because you don't know some python.

This change happened even though our rejection rate is already thorough the roof... and you can imagine what that number might look like now.

I wanted to move on from Amazon and explore something else, so I did some job searching. One thing I realized recently: NETWORKING IS IMPORTANT., and I don't mean the tech kind but the people kind. While before I couldn't give two shits about what other people do, never participated in any networking event, etc, I realized that that was a terrible mistake. Yes, I am still not as chatty as I'd like, nor can I really care about others, but forming relationships is important, especially when you are looking for a new job.

As an anecdot, I was talking with an ex colleague about the fact that I was looking for a new gig, and he immediately let me know that they were "kinda looking" for somebody for a position for which he's the hiring manager. This job was an 18-months contract with double the salary I used to have in Amazon, and since I had worked both with him and the project's tech lead, they were happy to skip formalities and start immediately. No interview, no anything. Mind that there was no way I was getting this offer from some website like Indeed. This role was never publicly published (which is reserved for a last-resord kind of thing in many companies) ( I later on decided not to accept, as the gig was very Cisco ACI-heavy and that's not something I want to focus on at this point in my career ).

After some other calls, I had two offers in my hand, one from a Fortune 500 company, and one from a smaller, leaner company. The F500 company's offer was 30% higher what they had in mind to pay as "the top" ( I got wind of this from a person I know which works at the same company ). They tossed this up to "it's extremely rare finding someone with both network and "automation" skills".

In the end I accepted the offer from the smaller company, mainly because:

  • I've been in big companies my whole carrier and wanted to see the other side
  • Money is not a big part of my life at the moment, as in, it's not my absolute number 1 focus when job-hunting (as long as it's on my minimun acceptable)
  • Connecting to the point above, learning is my number 1 priority job-wise, and in my current role I can deal with Docker / Ansible / Jinja2 / YAML / Python / Jenkins / AWS / Azure / GC and more and I spend most of my day writing in python or fixing Ansible playbooks / jinja templates etc.

When you come from a company like Amazon, the use of free/open-source tools which form knowledge that you can then bring anywhere else is really refreshing. I am also relatively young, so knowledge/experience acquisition is my main focus at the moment.

After the first month on the job at my new company, I got into recruiting other network engineers, since we need more and quickly. We had the same requirements as Amazon (notice a trend?), the only difference is that, after 10s of rejections (and we rejected 100s without even an interview just because the CV didn't fit), we relaxed our search to somebody that has rock-solid networking experience and an automation mindset.

I've mentioned this before in the text, so what does having an automation mindset mean? It doesn't mean you know Docker or how to program in Python, nor that you know what an Ansible playbook is. What it means is "can this person in front of me think programmatically and would he/she be able to and is motivated to learn tools / languages?". Basically, if I ask you "how would you configure a description on the same interface on 10,000 devices?" your answer better not be "I open 10,000 SSH connections and multi-input the config on all at the same time". Having the ability to at least write some pseudo-code or describe how would you approach and resolve a problem programmaticly is crucial.

Is there a premium paid because you know Python / Ansible / Jinja / TextFSM / whatever ? The answer is YES. This generally comes in various forms:

  • It's your foot in the door for positions for which you would have been otherwise not even considered

  • You generally get a 10-30% premium in total comp

  • You generally spend more time in "high level stuff" than "low level stuff", or it's at least a combination of the two. This makes sense if you think about it - these companies want you to automate away boring stuff or build tools that remove the human from the equation (auto-remediation tools, config-generation / validation / deployment tools, etc).

Is there a learning curve? Absolutely. Are certifications dead? Far from it, but you better supplement with something else. Once I finally passed my CCIE I didn't just rest and stopped. I always like to remind myself that if you're not improving today in some way, then that means you've just gotten worse. What brought you till here won't bring you any further (God I sound like a motivational speaker...). (Sidenote, I still have plenty of INE tokens from my CCIE lab days, feel free to PM me if you're interested).

Look, you're not gonna be out of a job just yet, we all know it. 10 years from now you will probably still find job postings for "normal" network engineers. Many of you came into networking because "not much changes" over years. BGP is BGP, TCP is still the same TCP from 30 years ago (minus some improvements).

I doubt TCP will radically change in 10 years (for that, I doubt that IPv6 will globally catch on in 10 years too), but our interaction with network devices, how protocols are configured, how devices are monitored, etc is gonna change (it has already in many networks).

On learning new skills

Here's the deal: you don't have to learn 100 technologies / tools / languages top to bottom all in 1 week. It's extremely easy to get overwhelmed when you look at what should I learn now?. This is especially true if you, like me, just finished with a major "learning block" recently (e.g CCIE). The beauty of a certification program is that the requirements and sub-requirements are all listed there, you go through this list and poof, you can go and give the exam and you have a piece of paper that proves you "worked on this". It's much more difficult when everything is self-directed. You could choose to learn anything, but how do you know what's important and what's a fad? How do you know what skills will you need 5, 10 years from now VS skills which will become obsolete the next round of the hype-cycle?

If I've learned anything about learning any subject is the following:

1) Learn very well the basics, because anything you're gonna build on top of those foundations will make or break you (and your career). If you don't know how ARP works, forget about Python or Ansible or whatever. Go read some RFCs or some books. If you're 10 years in your career and still don't know all the TCP flags, I have bad news for you.

2) Don't follow hype / (pre)sales speak / vendor speak. You know what I can be reasonably sure of in 5 or 10 years? That BASH will still be here. It's also extremely probable that Python will still be here. Will Jinja2 be the templating standard 10 years from now? Probably not. When deciding where to move next, you probably will want to move to technologies or skills that will come in handy on the long run. Ansible is built on top of Python. If you knew Python, don't you think you'd be able to pick up Ansible very quickly? I'm not even suggesting you need to learn Python, but you should develop a programming mindset and exercise it in whatever language you want.

3) Don't forget. Impossible? Yes, remembering 100% of everything may not be possible nor desirable (do you really need to remember that last episode of GOT?) but you can achieve 90-95% for your most important information (you know, information that actually makes you money... ) and that's what you want. What I'm talking about is spaced repetition, which comes in the incarnation of a software called Anki (there are others, but that's what I use). This method of remembering works wonders especially for our field, where information is generally "certain", as in, there's a document specifying what's the intended behavior. You can apply this to both network engineering info and programming (generally you want to memorize some of the most used and useful base libraries of your language of choice). Have a read here for how one guy applied Anki to programming (but it can be generalize for almost anything).

4) Take it one step at a time and be reasonable. You can't learn everything at once - prioritize and chip away at it over a period of time. Knowledge compounds like compound interest. The more you know about something, the easier it is to learn something different but somewhat related because you already have references in your knowledge base to the underlying subject. If you know how a python dictionary works, then you can learn how to read a YAML file and make use of that data. If you know YAML or Python, then you can already correlate that to why Jinja2 allows you to access variables with the $PARENT_KEY.CHILD_KEY.SUB_CHILD_KEY construct or with $PARENT_KEY["CHILD_KEY"]["SUB_CHILD_KEY"] (which is the same thing).

Look, I'm not here to tell you that I have all the right answers or hell, even a majority. Like I said, I'm pretty young and my opinion might radically change in 10 years. What I am saying is that you should probably stop making excuses on why today you've not learned 1 more thing. I've seen plenty of network engineers that like to kind of "coast" and live off only of their current knowledge. These are the people that write in the resume "10 years of experience" when in reality it's 1 year of experience repeated 10 times.

Don't be one of them.

Cheers.



No comments:

Post a Comment