@user3443146 For some general background information about how Magento 2 serves front-end assets, check out Alan Storm's excellent article: http://alanstorm.com/magento-2-frontend-files-serving/. I'd encourage you to check out all his his articles that relate to the type of Magento 2 work you're doing.
Next, relating to
developer mode: In this mode, Magento 2 will try to generate the various types of code that this system generates, and it does so on each page request. There's a lot of action going on regarding code generation and code symlinks, which go beyond a simple answer. That said, Magento 2 will always be looking in pub/static for static content, that's just how the system works. If it has already transpiled any Less files into css files, it won't try to transpile them again (unless you manually delete them, or clear the static cache in the admin panel, or use grunt, etc, etc).
production mode: In this mode, Magento 2 does not try to generate the various files that this system generates on each page request. Instead, in production mode, you're engaging the cli to do all the static content generation at one time, and then the resulting files are stored in pub/static. So this mode is mainly meant to be used as you're setting up your site to be used in production (hence the name).
500 error: This class of error code is always a server-side error. You need to take a look at your server logs to see what the error details are. Or you can enable php error output, if the error is php related you'll see the output on the frontend. Most likely, based on my current work with M2, it's probably permissions/ownership related. Due to the fact that Magento 2 does set permissions/ownership on the content that it creates, the webserver might not be able to write to directories that Magento 2 created (this depends on how you've set up your permissions/ownership).
Check out this docs for suggestions on how to set your environment up: