Disable setup:di:compile

You don't need to run it. You can simply delete the directories under var/generation (or under generated/ after 2.2). Be careful not to the delete the .htaccess file. You only really ever need to do this when you create a new constructor or change or reorder the arguments being passed into one of your class constructors.

For 2.2 and onwards, Magento documentation suggests using this command:

rm -rf <magento_root>/generated/metadata/* <magento_root>/generated/code/*

You should not run setup:di:compile in developer mode!

This command need only for production mode.