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.