Knock backs and Becoming a Senior Developer

I recently got knocked back for a job that pretty much looked like my dream job. It was a startup with a team of four - two senior devs, a junior and a lead/architect.

My interview was with the lead/architect, there was a simple code test that I did in about 2 mins and passed with flying colours. The rest of the interview we just talk about code, some things I'd done that I was happy with and a few questions about design patterns that I felt pretty comfortable answering. It went well, they liked me and asked me to do a second stage code test.

But I was in a strange position. This start-up use NodeJS almost exclusively and I've probably written 100 lines of NodeJS in my life. I don't know NodeJS, but I know code, I know Javascript, I'm confident I'll pick it up very quickly. But here I am saying I'm a Senior Developer and want a salary to match but I don't know the core technology.

So the code test comes along which requires both a server and client side app in NodeJS. Because it was NodeJS I had to come to terms with NPM, quickly read up on ExpressJS, async, PugJS and request just to get the job done (such is the nature of the modern Javascript environment).

I submitted my pull request and a few days later got a 'reluctant no' that they had agonised over but decided that I wasn't senior enough (at least with NodeJS) to justify the salary. Fair enough, but disheartening.

I pressed the recruiter for more feedback. He got back to me with the list of the sorts of things they were looking for and which I hadn't shown enough of:

  1. Does candidate show an understanding of SOLID principles?
    • separation of concern
    • open close
    • substitution
    • inversion of control
    • dependency injection
  2. Are there any noticeable design patterns?
    • factories
    • wrappers/decorators
    • strategy
    • adapters
  3. Were there any tests written?
    • unit-test
    • bbd (functional) test
  4. What notable architecture style was used
  5. Was there a package manager used for the client side and server side?
  6. Was there a build process?
    • how well was it used
  7. Code style
    • Was the code self documenting and easy to follow
    • Was there a code sniffer/linter used

Of course the one that stands out to me is 'Were there any tests written?' No, there weren't. I didn't have time to write them because I didn't have time to find the Javascript Testing Suite that I liked best and then learn it on top of the five or six other packages I had to familiarise myself with as well, not least of which was NodeJS itself.

The task specifically said "please do not spend more that 2-3 hours on this task. If it takes you much longer than that, there is something fundamentally wrong with your approach."

So I dropped TDD which I'm pretty sure is what cost me the job. If it had been Python or PHP the first thing I would have done would be to set up my tests.

I wanted the job because I knew it was an amazing opportunity to learn a lot from a really talented and experienced lead in a small team.

I've been employed as a Senior Developer for years now and as such, haven't had any mentors. I know I'm a good developer but I know I can be a much better one and still have lots to learn. It's what I love about coding, one should always be learning.

I learn by doing. I need to have an opportunity to implement an idea for it to really sink in. I'm reading blogs and watching videos all the time. If the blog or video is 'this is how to get setup with ReactJS' or some such then I'll absorb it all easily. The concepts are familiar enough and I can see solid enough examples that I get a lot out of them.

But when I read an article or book on a design pattern or other high level concept, while I'll often understand it intellectually, I find it hard to put that knowledge to good use. Which is what I was hoping for out of this job. Someone to mentor me with lots of experience in things like design patterns to be able to say 'hey, nice code, but why don't you try using a decorator there instead.' Which is why I wanted this job.

I'll keep reading though, and let you know here if I have any 'ah huh' moments.

And don't worry too much about me, I got accepted for another job the following day.