The question might be a little too broad for StackExchange, since it invites discussion, but, what we do is as follows:
Our design team works within their own space, using Jekyll to generate a static site on pages and modules. While creating modules they determine the CSS/SASS (and JS/hopefully TypeScript one day) necessary for those individual modules to work.
They have a build process (currently Grunt) that compiles minified CSS and JS for the entire site (collection of almost all modules). Those assets are deployed to Azure as a versioned (/yyyy/mm.dd/...) release, and they let the dev team know.
We have a project layer module (Xxx.Project.Common
, since our websites share the outer wrapper) that defines the main layout(s) and adds the base CSS/JS includes within those layouts.
We then have a Xxx.Feature.Yyy
module for each individual component that the designers develop. We take advantage of the Sitecore.Foundation.Assets
module from the Habitat project in cases where we want specific JS (and eventually CSS) to be included when the module is added to the page. These are tied to the module in Sitecore, with the path to the asset on Azure/CDN entered into the corresponding field in Sitecore.
This allows our designers to work with HTML, CSS, and JS, without having to get deep into the code itself. The modular approach they're taking also makes it easier to create these as Helix-based modules.
Another big benefit of starting with flat HTML components is that it makes it easier for these to be ported over to WordPress as well as static sites.