I posted in the December thread and was contacted several times over the next 6 weeks. Here is my learning from this:

* Be unique. As a JavaScript developer I mentioned that I will not work on Angular, React, or other big frameworks. This immediately tells 90% of hiring companies to not waste their time with me and I am also not competing with many other people.

* Be patient. I grew impatient and jumped on an opportunity outside of software.

* Be careful what you wish for. The same failings and faults that apply everywhere else in software hiring will happen here too. Always be skeptical of the process, and ask good questions.

* Keep your experience in mind. Mostly what software companies are looking for is experience. Education is a nice to have, but it isn't required to be a developer. Education is never a certification no matter how much you wish it were or how expensive it was. If you have no experience you should expect to start as a junior developer.

* You don't need to be hired to obtain experience. Nothing is preventing you from writing open source software personal project and making mistakes that you are learning from. As somebody with a masters degree you are in a stronger position for advancing quickly compared to most other developers. After 20 years of writing software I am convinced that there are only 2 difference between a novice developer and an expert: writing skills and an advanced appreciation for data structures. Those are both skills that take practice to develop and the results a self-evident when reviewing code.

Just curious, what's the vanilla JS niche? Is there any particular reason a company would go with it instead of frameworks like React, etc (not saying I agree with those decisions, just an observation based what's happening on the job market)? Do you do server-side or client-side JS?

I can not speak for other peoples' opinions. Here is the reason I would pitch it in one word: scale.

An application written with original logic directly to the requirements provided will be smaller, execute faster, and require less overhead to maintain than something written with a giant framework provided your developers know what they are doing. One of the biggest selling points to using a large framework is precisely because many developers don't know what they are doing and many businesses are not willing to invest the money in training and documentation.

There are also specific demands that require original code that a framework is not ideal for. One of the employers that contacted me from HN was wanting me to write and maintain a Jabber based chat client that runs the browser with high concurrency like a high volume IRC room. Performance was critical and so they didn't want to deal with the overhead of a large framework.

Also, large frameworks are generally there to supplement developers' insecurity with the DOM and general architecture in the browser. That doesn't solve for writing a Node.js application.

As for myself I do both client-side and Node.js work. I enjoy working with Node more because that space is less opinionated. Developers' have all kinds of irrational opinions that they are willing to bet their careers on when it comes to working in the browser. Compared to most of that foolishness I am a 10x developer, and its not because I'm great at writing software.

What is super frustrating though is talking through these concerns during a job interview and dazzling the interviewers virtually ensuring my selection for the position. This is super frustrating because it isn't my intent. I am not trying to impress anybody when I go down that risky path of laying all my cards on the table. I am trying to voice my concerns as directly as possible to ward off a future bad relationship. Then once I get hired and go to work on the team sure enough all my apprehensions that I attempted to illuminate during the interviews are present ensuring that everyday at work will be a slow death trying to sprint though an ocean of tar.

Do you write your own dom/data/event binding systems in vanilla javascript or simply not use that approach? Genuine question, I have written a ton of ground up code across multiple languages but couldn't imagine reinventing that particular wheel for what we do.

Yes. Reinventing the wheel in this case is far less work than it sounds. You aren't really reinventing anything. Here is my current project where everything is vanilla.

* Code: https://github.com/prettydiff/share-file-systems

* Demo: http://mailmarkup.org/sharefile/demo1.mp4

The video demo is a few months old now, but in the current code I have broken network sharing during a refactor. The GUI and local file system still work well though.