Generalizing in Software
It's tempting early on to strongly associate with the tools you're using day in and day out. I feel really comfortable with React, so at time's I've thought of myself purely as a front end guy or a React guy or a JavaScript guy.
Ultimately, though, the people you serve need someone who is more versatile. Not that job titles matter, but the gig is typically "Software Engineer," not "React Dev."
As you develop, your problem solving abilities and sensitivity to creating systems transcends and particular tool. That's where the fun problem solving is, anyway. The tool is just a vehicle for speaking with the computer.
Chad Fowler in The Passionate Programmer makes a great case for this:
It's not about where you sit on the perceived value chain of project work (where the architects holds the highest spot of royalty). It's about how generally useful you make yourself...
To visualize what it means to be a generalist, it can help to dissect the IT career landscape into its various independent aspects. I can think of five, but an infinite number exists...:
- Rung on the career ladder
- Platform/OS
- Code vs. Data
- Systems vs. Applications
- Business vs. IT.
So many great dimensions through this lens. Platform/OS is a particularly juicy one. Full stack web dev can be balanced with mobile or desktop development. Developer and designer is another fun one, unsurprisingly common for front end developers.
The last point, especially, is worth noting. If you're with a startup ,the company is small enough where individual entrepreneurship and creativity play just as big a role as your technical skills.
Thankfully, the work is more fulfilling when you lean into generalizing.