Concrete CMS started as a CMS used specifically to build websites for creative agencies and startups. These clients demanded pixel-perfect precision and exact fidelity to their intricate design. While web development trends may have drifted away from this since then, it is to Concrete's benefit that we started this way: there is no design that Concrete can't handle, and it makes no alterations to website markup, because it was created to fulfill the needs of an industry where these weren't tolerated.
With this in mind, it's no surprise that the suggested Concrete theming process shares a lot in common with the suggested web development process shared by mid-level web shops around the world. First, determine how you want your site or theme to work. This can be as complicated as an information architecture document or as simple as a list of pages on a sheet of notebook paper. Next, use Photoshop or your favorite web design graphics tool to create examples designs of your themes (hereafter referred to as "comps.") Some sites will have many of these files, others may just have one for the home page and a single comp for every other "detail" page.
Once you've got your designs, someone needs to chop those up as HTML. That's outside the scope of this document, but it's place in the process is very important: get a web production person to create HTML and CSS files for your basic layout. Don't worry about the content inside the theme just yet – you'll get to that later. But the header, menus, global footer and reusable chrome? You absolutely want to get that working now. Make a raw HTML archive with CSS and JavaScript. Mock up your menus. You'll make them work later. At the end of this process, you should have a theme archive similar to what you might download off of popular template websites. This won't be a working site, but you are ready to add it to Concrete.
It's at this point that you're going to take your raw HTML and web assets and turn it into a Concrete theme. This is a simple process and one that anyone who suffered through HTML can do.