The second biggest hurdle I faced as a web developer was making the transition from a beginner to an advanced developer.
Today, I wanted to talk a bit about what’s involved, and how I’m trying to help others make the same transition.
Big picture coding
As a beginner, you tend to be hyper-focused on the minutia of code. The words best and right way get tossed around a lot.
- What’s the best method to use for this task?
- What’s the right way to structure this code?
- Is functional programming better than OOP?
- Should I use classes or traditional prototypal inheritance?
- Are function declarations better than function expressions?
- Do I use
Advanced developers know that the answer to all of those questions is, “it depends.”
Development decisions are always a series of tradeoffs.
Becoming an advanced developer means taking a step back and looking at the bigger picture. It means thinking about what your code needs to do—today and in the future—and letting that guide your decisions.
- Am I the only one working on this, or will a team need to use it?
- Might it be used in contexts beyond the narrow use case we’re thinking about today?
- Will I need to extend it for other applications in the future?
- What are the coding standards already in place on this project, and how does this fit in with those expectations?
- What should browser support look like today? What about 3 years from now?
Every one of these questions (and so many others) will affect how you build your project and write your code.
Countless little details
As you become an advanced developer, you coding choices become more guided by the big picture.
But the big picture is influenced by countless little details that have less do with code and more to do with people.
- How do I make sure that people with disabilities get the same experience as people without them?
- How do I balance broad browser support with ease-of-development and availability of resources?
- How do I make sure your project is resilient and still works even when parts of the code base fail? (What happens if a JS file times out or has an error?)
- What kinds of things might my team need to do with this code in the future? How do I account for things I haven’t thought of?
Becoming an advanced developer means learning how to balance developer convenience, user experience, accessibility, and business needs. It means taking a variety of needs and use cases deciding which tradeoffs you want to make for your project.
There are no right answers, just different priorities.
(There are definitely wrong answers, though. Choosing to ignore accessibility, performance, or fragility for “developer convenience” is a wrong choice.)
How do you learn how to make these decisions?
From practice, experience, and making mistakes.
But getting there is hard. I’m working on something to make it a bit easier.
I’ve had so many students ask me about it that I’ve started working on an Advanced Academy program.
The program uses the same learning format as the original: a few short lessons and a project every other day, with office hours and a Slack channel for support.
Unlike the original, this program gives you less instructional information. It focuses more on strategic decision making, accessibility, and building robust plugins that can be extended beyond their original purpose.
Some specific topics include:
- Working with dates
- ARIA and accessibility
- Advanced data structures
- State-based UI
- Progressive enhancement
- Creating extensible plugins
- API-based applications
- How to write your own polyfills
- User experience
- Working with third-party code
I don’t have a specific launch date for the program yet. It’s still in development.
But if you get my newsletter, you’ll be the first to find out when it launches (and you’ll get an exclusive discount).