I have done some minor changes in CSS, but it's not reflecting on my frontend even after flushing Magento cache. To see the changes I have to hard refresh my website everytime I reload.
Take a look at How to force flush CSS cache on client side?
Assuming that merge css is enable in
System -> Configuration -> Developer -> CSS settings -> Merge CSS Files
To Flush css goto
Note : Depending on your server cache setting, you may need to clear your browser cache or reload in a private session. Also if you add, remove or change the name of your css files then you may need to clear the other caches.
To see the changes i have to hard refresh website everytime i reload.
This would be expected if you have set far future headers on your CSS.
If you are developing a store, the browser will naturally cache CSS as it is instructed, so if you set future expiry times, then the browser won't attempt to revalidate its cached content unless either this expiry time is hit, or if you hard refresh your browser cache (Ctrl + F5)
I presume you're working on Magento 2 using the default LESS, and in a development environment in developer mode.
How to compile
The easiest (and slowest!) way to compile LESS is to enable client-side compilation, to enable this go navigate to
STORES > Configuration > ADVANCED > Developer > Front-end development workflow > Workflow type and change it to client-side.
How to display your changes
If your CSS isn't updating you'll likely need to delete
pub/static/frontend. Then clear your browser cache and refresh the page.
Yes this is a huge pain, and creating your own workflow will save you a lot of time and hassle.