Despite a constant battle with impostor syndrome, I feel I’m a fairly competent developer.
I know certain things fairly well. I also know what I don’t know, which is to say I know which technologies/techniques I need to practice and work with before I’ll be able to use them proficiently in a work environment.
When I gauge a new project, its through the lens of my own skillset, experience, and understanding. I’ll determine the approach I would take to solve a particular problem, pull together a list of tools, and perhaps document an information architecture plan explaining my goals and expected outcomes.
I do, however, recognize that my perspective is limited.
I don’t know everything
As I mentioned already, I know there are things I don’t know.
For example, I’m very experienced with tools like jQuery, and I can hack on vanilla JavaScript with the best of them. When it comes to other libraries like Backbone, however, I’m too green to offer much advice. I know what the tool is for and I know of several clean implementations. At this time, however, it’s not something I would feel confident using in production on a client site.[ref]I understand enough Backbone to work on existing code, but until I take some time to learn it more fully I would be hesitant to take on a Backbone-based new build.[/ref]
Because I don’t know everything, I like to surround myself with a team that represents varied strengths and skills. Often, someone with a different background will suggest an alternative – perhaps a new tool – that never occurred to me.
Collaboration on this level makes the team strong, makes our projects more efficient, and helps me to be a better developer.
You don’t know everything either
Unfortunately, it’s very easy to forget that we don’t know it all. We become accustomed to a specific toolset or approach and ignore other alternatives that might be a better fit merely because we haven’t used them before.
I’ve seen heavy NPM users disregard Bower as a potential dependency manager because “I already have that.”
I’ve seen jQuery users refuse to incorporate Backbone because “I don’t need that.”
I’ve seen PHP/Python developers refuse to use Ruby/Node in a project because “I don’t trust a language that new.”
We need to come together as a community and rather than take the stance that new is bad, say instead “I’m not familiar with that approach, let me think about it.” Taking time to actually evaluate team-proposed alternatives will:
- Demonstrate respect for the community
- Help build a rational, communicable argument as to why an approach/technology is a poor fit
- Perhaps teach us something in the process
You can only see your project through one set of eyes – you might have missed something easily seen from a separate perspective.