Last week I read Chris Coyier's essay, "The Widening Responsibility for Front-end Developers," and it hit me hard. It reminded me how the career I enjoy so much is also one of my biggest sources of anxiety.
Let me be clear: I love that being a web developer means I'm always learning. I'm finding new ways to solve puzzles and be creative. Even better, I can set the pace of my learning, so I'm not pulling all-nighters or freaking out over exams. It's satisfying to look at code I wrote a year ago and see the different ways I'd write it now. I can see all the progress I've made, especially as it relates to my growing specialization of accessibility.
But the root of that push to improve is feeling insecure in my knowledge and helps in small doses. I even wrote on my blog about how I turn my insecurity into the rising tide that lifts me.
That feeling is bad when it grows to the point where instead of learning, I'm questioning if I can handle this career. This essay reminded me how the wider those responsibilities get, the more my insecurity turns from a rising tide into a tidal wave. It makes me feel like I'm drowning in "everything I should already know." My career thoughts are tainted by worries about how I'm going to keep up. Especially when I'm already behind, and what I need to learn is increasing exponentially. What's the hope of catching up?
How the Tidal Wave Hits Me
Let's get into some specifics. About halfway through the essay, it shows a webpage design and a list of questions a front-end developer would usually ask after seeing it. They cover layout, color schemes, repeated patterns, image optimization, typography, etc.
I already know I have this kind of front-end mindset, even if I don't fully understand all the topics it listed. Someone I know recently showed me a website they made for a college course, and right away I started inspecting it on my laptop for accessibility issues, possible CSS refactors, and responsiveness. The person didn't ask me too, and I was so engrossed I couldn't see their reactions. But I assume people always like it when I offer piles of unwanted website criticism. It's the best gift one can give, as I tell myself.
Then I went further to the second batch of questions from the same design.
- Managing API requests and their source.
- Dealing with complex or shared state.
- Client and server-side rendering options.
- Any JavaScript frameworks and their related configurations.
I already felt like I was drowning in it all.
It was extra rough since they made me think of the many new questions and topics I've tried to answer at my current job. It's been tougher to give my growing accessibility specialization the attention it needs, even as the company tries to invest more in it. These new questions are about:
- How can we best use Ember's Glimmer syntax in new services and controllers?
- Can I figure out the rhymes and reasons for using TypeScript? How do these rules get adjusted in an Ember app?
- Can new components in a Rails application be made better as React components sprinkled onto the main page? In what way are those assets configured?
- How are new API endpoints added on a Rails app with GraphQL? How does that information get sent to an Ember App using Apollo? Are they checked right with TypeScript? Do the client-side fairies approve? Do they watch me as I sleep?
These all lead to the biggest questions of all, and the most painful ones.
- Did I overestimate my intelligence or love of learning?
- Am I not learning this at a fast enough rate?
- Am I cut out for this if I can't go fast enough?
- Will I be a burden to the rest of my team?
- Should I keep trying?
Takeaways for The Younger Developers
I can't claim to have gotten past all this myself. If I did I probably wouldn't have written this blog post, and I'd be spending much less time curled up on my couch eating pita chips. But when I've felt the tidal wave starting to pull me down at times, I found some reminders to bring my head back up for air.
Don't Let Perfectionism Freeze You
Perfectionism is the ice that's spent months creeping up my back when I tried to write something new. It froze my hands over the keyboard, saying I couldn't write something if it wasn't 100% original or creative. It's kept me from reading as much about new code languages or tools — I knew learning meant making lots of mistakes, which my mind couldn't handle.
To that, I remind myself: I am human. If I was a perfect robot, I'd be the one executing the code instead of writing it (as I plan to destroy all humans). I should give myself a break and take pride in being better than I was yesterday. If a person dismisses me for having a hard time swimming up after a tidal wave hits me, it's not a problem with me. It's a problem with them and their expectations. They need to remember we can't become better without failing first.
I had to remind myself of this lesson so often, I engraved it onto a piece of wood.
You may ask me, "Well Max, I like this quote, but why did you pair it with random artwork of Pokémon Sword's fighting-type gym leader? Especially when you played Pokémon Shield and never fought her yourself?" To which I say, the reader who is disturbingly informed about my video game history, why not?
Put the Fundamentals First
Most shiny developer tools come and go with time, situational needs, or when the links to their GitHub repositories get rusted shut. The basic tools and skills are going to be around a lot longer, maybe even forever. Investing in those gives you a strong foundational value to build specializations on. Under the tidal wave of new responsibilities, fundamentals are the boogie board that helps pull you back up. These include:
- Becoming fluent in a good text editor
- Understanding Git or another tool for version control
- Getting used to the command line
- Talking to humans as well as computers
- Building a fast typing speed
- Find answers in online documentation and APIs
The Pragmatic Programmer is my go-to recommendation for anyone who wants a full understanding of the core of programming. I think you should read the whole book yourself, but if you're strapped for time, I have notes on the broad concepts and ideas from the Pragmatic Programmer here. Just know that, at the time I'm posting this, the notes are a work in progress.
Remember Your Love of Coding
Lastly, the essay started with what makes front-end development unique and awesome.
Front-end development is at the intersection of art and logic. A cross of business and expression. Both left and right brain. A cocktail of design and nerdery.
I felt similar when I took a college coding course out of curiosity and it changed my career (alliteration!). I loved learning new things in my course but was frustrated by how abstract they were. Coding was the first thing I found with a real bridge from intellectual abstractions to pragmatic reality. We took ideas about the Document-Object Model, CSS style inheritance, and the insane world that is JavaScript, and brought them to tangible life with that sites people could use to share their thoughts, donate to food aid, or play major roles in destroying civilized democracy.
I've worked more on the server-side these last few years, and the disconnect between it and what we see in the browser has brought back the familiar frustration. Being able to see and play with my code right in a web browser is what makes front-end development feel so "real" to me. It's what makes me feel like my job is fun, challenging, and has a purpose. That's pretty rare and shouldn't be taken for granted.
So when the tidal wave pulls me under again, it's easy to question if any of this is worth it. But I remember how much joy I get when my head is above the water, and it makes swimming back up worth it each time.