T-Shaped
Dammit, Twitter, you got me.
Chris Coyier recently wrote an article—The Great Divide. It’s good. You should read it.
In the article, he makes the observation (generalization) that front-end developers have divided into two camps. One focusing on JavaScript and complex programming tasks, while the other focuses on things like document semantics, design, and accessibility.
In What Universe?
I certainly don’t believe it’s that simple, but I do think there is some truth to the general idea. My viewpoint aside, there were some negative responses on Twitter. Whatever, we all have opinions. But… I think some were overly harsh. Maybe even hostile. I don’t want call out specific tweets, but some implied (actually said very plainly) that it’s not okay for someone to focus their time and energy primarily on HTML and CSS. Tell me, in what universe is it not okay for someone to do what they love?
I do believe the best developers see the whole picture. The best developers will learn as much as possible and embrace all the tools necessary to build the right thing. But, is there a general expectation that all front-end devs should, by default, be experts in HTML, CSS, JavaScript, accessibility, design systems, performance, and more? Each of these subjects have depth. It’s a tall order. If you can do everything, and do it well, then good for you! Honestly!
I Can Speak For Myself
I’ve been building websites and apps for some time. I’ve spent countless hours learning as much as I can about all of these things. I think I’m pretty good at it. I consider myself to be well rounded and capable of delivering quality products.
But am I really good enough on my own? No way.
I could never reach the bar I want to reach without a team. There’s simply no time to be as good as I want to be when you consider the range of necessity and technology churn involved in web software.
Specializing Is Good
I want help from others. I need help from others. We, collectively, can build great things, but there is a lot to juggle. I don’t think it’s realistic to expect all front-end devs to be great at all things. People have varying interests that drive their passions. It’s a-ok to be passionate about design/UX and it’s a-ok to be passionate about programming. The disciplines are not mutually exclusive, but rarely do people excel at both. Some do. Some think they do.
However, this is not a binary issue. There is a thing called the T-shaped developer. Simply put, it describes a person who is capable in many respects, but more capable or specialized in one specific area. It might be an over-simplification. Most of us probably have all sorts of hills and valleys in our personal skill graphs, but the general concept of being T-shaped is something I believe in.
I want to be good at all the things, but I also want to work in the areas that I find most exciting. It’s the best way to get good at something. I’m more than happy (thankful really) to lean on other folks who fill in my gaps so we can collectively ship quality products.
If it weren’t for specialties, I’d be required to know the following things very well and be able to execute on all of them (just a short list off the top of my head):
-
HTML / Accessibility
- Semantics
- Forms/Inputs
- Meta Everything
- Aria
- WCAG Standards
- Screen Readers
- Focus Management
- Document Structure
- SVGs
- Responsive Images
-
CSS
- Selectors
- Combinators
- Specificity
- Positioning Contexts
- Functional CSS
- BEM
- Flexbox
- Grid
- Sass
- Media Queries
- Custom Properties/Variables
-
JavaScript
- ES Language Features
- Web APIs
- Design Patterns
- Data Structures
- Frameworks/View Libraries
- Type Systems
- Context
- Scope
- Higher Order Functions
- Async Everything
- Error Handling
- Polyfills
-
Performance
- Page Loading Strategies
- Browser Rendering Cycles
- Framework Optimizations
- RAIL
- Client-Side Caching
- Service Workers
- Image Compression
- gzip/brotli
All of these subcategories can, and should, be broken down further. The rabbit holes are many and there is plenty of room for specialty.
This doesn’t even include the additional overhead of:
- Documentation/Communication
- Modern Build Systems
- Compilers
- REST/GraphQL
- Versioning/Distribution
- Cloud Functions
And at least having minimal understanding of even deeper layers:
- CI/CD
- HTTP/TCP
- Scaling
- Databases
- Containers
- DNS
My Take
Front-end development is hard. I’m thankful for the CSS gurus and accessibility experts out there. I will continue to learn and work toward a complete understanding of all the facets of web development, but I will never reach perfection. I hope I’m surrounded by a team of T-shaped developers for many years.