Thanks for the suggestions, but a lot of the things you dislike were choices made very purposefully.<p>1. POJOs are ugly and you must revert back to using Object.create() for inheritance, breaking the design pattern of using ES6&#x27;s class syntax.<p>2. PascalCase class &lt;-&gt; camelCase instance &lt;-&gt; underscore_filename &lt;-&gt; underscore_tablename is a standard borrowed from Rails and easily managed through the npm inflect module (i).<p>3. It&#x27;s just a shortcut. You can use normal CommonJS require(), you&#x27;ll just have to resolve the relative path yourself.<p>4. Thanks! :)<p>5. Models can exist without database connections and with manually defined schemas. If you check through the commit history, I used to keep database and model completely separate but there was way too much code reuse &#x2F; smell (passing in a db as a parameter on every function call).<p>6. The alternative is setting properties with ClassName.prototype.value = &#x27;xyz&#x27;; or ClassName.value = &#x27;abc&#x27;; Static methods provide an easy to read + concise way to do this for you (and take care of additional functionality). Also borrowed from Rails.<p>7. Chose that pattern because it is very explicit &#x2F; ordered. How do I determine what order the routes are hit when I specify them per Controller? And if I define them on the Controller, that means I need to load all Controllers globally on Application start.<p>8. I&#x27;m happy with how clean the code is now. :)