I recently spoke with a back-end developer friend about how many hours I spend coding or learning about code outside of work. He showed me a passage from an Uncle Bob book, "Clean Code", which compares the hours musicians spend with their instruments in preparation for a concert to developers rehearsing code to perform at work.
I like the analogy but I’m not sure I fully subscribe to it; it’s that type of thinking that can cause burnout in the first place. I think it’s great if you want to further your craft and broaden your skill set, but to be doing it every hour of the day isn’t sustainable.
To be clear, this isn’t another rant about how it’s all bad and everything is moving too fast — I love that technology is evolving so rapidly. Equally, I can appreciate how it can be overwhelming and have certainly felt flushed out myself at times.
Further Reading on SmashingMag:
- Dirty Tricks From The Dark Corners Of Front-End
- A Front-End Developer’s Ode To Specifications
- How To Prepare For A Front-End Job Interview
As far as I can tell, this is a two-pronged problem.
The first is that as a front-end developer you think you’re expected to have all of the following in your arsenal:
- HTML (writing clean, semantic markup)
- CSS (Modular, scalable)
- CSS methodologies (BEM, SMACSS, OOCSS)
- CSS preprocessors (something like LESS, SCSS, PostCSS)
- Modern CSS (Flexbox, Grid)
- Modern JS (ES6, Typescript)
- JS frameworks (Angular, React, Vue [insert latest here]
- JS methodologies (Functional programming, OOP)
- JS libraries (Immutable, Ramda, Lodash)
- Responsive Design principals
- Testing (TDD)
- Testing frameworks (Jasmine, Karma)
- Animation techniques
- Build tools (Grunt, Gulp, NPM Scripts)
- Asset Bundlers (WebPack, Browserify)
- NPM ecosystem
- Knowledge of different browser quirks
- Agile methodologies
- Version Control (Usually Git)
- Visual Design fundamentals
- Soft skills, time management
- A basic understanding of whatever back-end language is being used
And on top of that you’re either dabbling with or looking towards things like:
- Service workers
- Progressive Web Apps (PWA)
- Web Components
The second is that your day-to-day work probably doesn’t cover it all or give you time to learn it all, so how are you going to make sure you have all the tools at your disposal?
Now, as a consumer you might:
- Subscribe to a bunch of different weekly development newsletters
- Trawl your Twitter feed
- Attend a weekly catch up your Front-end team at work
- Have a Slack channel outside of work with a handful of devs that you also talk shop with
- Follow online tutorials (that hopefully aren’t out of date)
- Use a video course training site like Frontend Masters
- Buy web development books (that hopefully aren’t out of date)
- Attend meetups
- Attend conferences
- Attend training courses
As a contributor you might:
- Write blogs/magazine articles
- Dabble in speaking
- Run a podcast
- Contribute to open-source projects
- Have your own side projects
Recently I found my attention being split three ways, I was focusing a third on writing code, with headphones on half-listening to discussions about code whilst chatting on Slack about code. I decided enough was enough — every orifice was clogged with code and I was mentally drained.
Whilst that is certainly at the extreme end, I’m sure others of you have experienced something similar. On top of all this you probably have a full-time job, family, friends, hobbies. It’s no wonder that there are so many of us feeling burnt out and wondering if we made the right career choice.
Some of my fellow front-ends have expressed interest in packing it all in and switching job to one where they can turn off at five o’clock. But part of me thinks this job attracts a certain type of person and if we were to throw it all away and become an estate agent instead, you’d still want to be the best estate agent you can be. Attending estate agency meetups and tracking house price trends in your free time. Many moons ago I worked in finance and I was still studying in my evenings and reading around it to become the most skilled I could in my chosen field.
We’re not alone in this discipline, a lot of professions require a solid amount of dedication and learning outside of work. Maybe the thing with front-end development is that the technology evolves so fast that it feels like someone keeps moving the goal posts. It seems like every other day I receive an email saying "XYZ" technology is dead. Which I’m sure can’t be true because otherwise we'd have no tech left.
The ecosystem is in a state of constant change and I think that can be a good thing. Personally I love being in a role where I can constantly learn develop and push myself but that’s not to say I don’t get overwhelmed at times.
With that in mind, here are some things I try to remember in order to stop my head exploding as well as some general advice on how to avoid the fatigue.
We’re All In It Together
The developers I know, both at work and outside of it are amongst the smartest people I know. But they are all feeling overwhelmed. Most have some sort of wish list of technologies that they are trying to learn. There might be a handful of people who know it all and are on top of everything, but the majority of us are in the exact same position.
We’re all still reliant on Google and Stack Overflow to get us through the day and have far too many tabs open filled with answers to web related questions. You’re not alone!
Be happy in the knowledge that you’re not a bad developer just because you haven’t tried whatever the cool kids are using yet.
Yes, even the “web celebs” are in the same spot…
There’s no way you can know everything and the rock star developers you follow on Twitter tend to be really really good in a few areas each. You’ll notice that they’re the same areas they are famous for being knowledgeable about. Again there will be exceptions but they’re just humans like us. :)
Imposter Syndrome Is Real And We All Have It
I know several great front-end developers that won’t apply for roles because they’d feel like a fraud going for them without knowing all the things on the job description requirements. To quote one of them:
"90% of the JDs I see make me think "Argh, I’m so behind!" In fact, it bothers me so much, that I’m thinking about staying in my current role, and just trying to push for more money simply because I feel like I’ve "gotten away with it" here."
The fact is, most of those job specs are a farce. My friend Bård put together this great image that shows the difference between what front-end job specs say and what they mean.
Just remember, it will be ok. Every job I’ve had I’ve felt out of my depth to start with, but eventually you get used to their tools and workflow, you learn and become a better developer for it.
Don’t be afraid to learn on the job, the best way to pick up new skills is to be using them every day.
If you’ve got imposter syndrome, odds are you’re actually a decent developer because otherwise you wouldn’t be self aware enough to realise it.
Get Your Fundamentals Locked In
It’s easy to get distracted by the shiny and new but if your foundations aren’t solid then odds are what you’re building won’t stand the test of time.
As a good friend of mine said to me once:
"Focus on the fundamentals has always been my mantra. If you can build good sh!t and solve problems then that’s all that matters, how you solve them (the tools) has and will always change."
You Don’t Need To Learn Everything
This is really key. I don’t think it’s the new frameworks, libraries and modules that are killing us, it’s our own belief that we have to learn them all.
There are tons of other things on my list that I’d like to learn, but I try not to get distracted. For example, I would love to brush up on my accessibility knowledge, play around with Polymer and dive into some of the latest CSS techniques like Grid but if I start reading about too many different areas at once I won’t retain all the information. These other things aren’t going anywhere, I’ll get to them when I get to them.
Avoid rushing to try and consume everything on a given topic. Take your time and make sure you thoroughly understand it.
If you’re like me, you’ll have an ever-growing list, but don’t be afraid to cull items from it. Not everything is worth investing time in and you should try to recognize what is worth learning and what is likely to be gone in a couple of years. Taking time to learn programming design patterns and architectural techniques is always going to be more beneficial in the long run rather than leaping to the current hotness in framework land. You’ll only end up scrambling to play buzzword bingo again a short while down the track.
Most Companies Aren’t Using Bleeding Edge Tech
There is a lot of new stuff coming out, the web is progressing at a staggering rate but typically it will take a long time before businesses actually start adopting these new technologies. The majority of companies will wait for a technology to mature for a while and see it proven in the field.
Angular was created six years ago and I first started working at a startup who decided it was the framework for them three years ago. Reactjs has been about for just over three years and my current company started using it just before Christmas. I’m sure a lot of other frameworks have come and gone in that time. If I'd jumped on them all I'd be going crazy.
In CSS land, Flexbox has been available since 2010 — six years ago! Browser support is still limited. We started using it in production earlier this year, but I don’t see it being used much in the wild elsewhere.
My point being, there is no rush to learn all the things, whilst technology might move quickly your potential employers are moving at a much slower pace. You don’t have to be ahead of the curve, just make sure you’re keeping an eye on it’s trajectory.
The More You Learn, The More You Discover You Don’t Know, And That’s Okay
This is totally normal. When you first start out, you don’t know what you don’t know. Then you learn some stuff and decide you’re a genius. Then little by little that fantasy unravels and you start to comprehend actually how much there is out there that you don’t know.
Essentially, the more experience you get, the deeper into the void you go. You need to make peace with this, otherwise it will consume you. If anything, this feeling should give you the confidence that you’re heading in the right direction. Odds are in our chosen profession you’ll never comfortably be able to sit on a throne constructed from all front-end knowledge.
Don’t Spend All Your Free Time Learning
It’s easy to feel that you’re so far behind you need to be coding and learning every minute. This is a one-way ticket to burnout-ville. Set some time aside to develop your skillset, see if you can negotiate some time with your boss so it’s scheduled in and spend the rest of the time doing what you love.
I’ve had some of my coding epiphanies at the gym. Exercising is extremely important for your mind as well as your body. Try and do at least 20–30 minutes a day to keep your mind sharp and help prevent burnout.
Make time for your family and friends — try not to talk shop with them!
It’s A Developer’s Market
Don’t be worried about finding a job right now. At the moment we’re in a very fortunate position where there are more roles than developers to fill them. I don’t know how long this will last, but capitalise on it now!
You can get a job without knowing all the things. I’ve found that in the interviews I’ve carried out 99% of people are totally blagging it.
Worst case scenario, remember that there’s gold in legacy code. If you’re a developer that loves the old ways there will always be companies stuck on legacy tech that need developers to work on their software.
I hope some of these pointers have helped mitigate some of the frustrations you might be feeling. The worst thing you can do is reach the edge and become fully burnt out because once you are, it’s very hard to regain that passion you had for what you do and why you started doing it in the first place.