Hey Brendan,
There are three or four areas of expertise in Drupal development and it’s probably the same with WordPress, Joomla, EE, etc… They are:
1) Configuration: Knowing the way the CMS works and what combination of modules, features and settings will provide the most efficient use of the system. I inherit one or two Drupal sites a year that have been developed by some poor soul who hasn’t taken the time to learn the ins-and-outs of the system and just stats throwing heaps of modules at it hoping something sticks. Often the site sort of works but it’s sluggish from module bloat and inefficient design. If you know your way around Drupal, you’ll come to recognize certain swiss-army-knife like modules that can satisfy a multitude of your website’s needs. These are modules like: views, ctools, token, pathauto, and context.
2) Theming: This is the part where your design is applied to the site and this is so often overlooked by developers. You can Theme in Drupal several ways; get a free theme, sub-theme (extend a parent theme), build a theme from scratch. I tend to build themes from scratch because I know it produces the least amount of markup and server-side code and I can control exactly what gets sent to the browser. I’m a bit of a theming nerd and I would have to say about 99% of the custom themes I run across (including the first ones I built) suck.
A theme should be concise and specific to the site you’re building. Last year I inherited a website for a large national organization and it was obviously put together by someone who was learning Drupal on the job (working for a flashy big ad agency). The theme has no less than 30 CSS files and some of those span into the thousands of lines. It also contains 20 template files, plus the usual theme.info file. The thing is that the design isn’t that tricky and I could rebuild it with a fraction of that number of files and templates. It’s a subtheme of another theme so it has a bunch of bloat right from the get-go. If I were to create it from scratch it would consist of perhaps two page template files and two or three concise CSS files, plus the info file. That would make maintenance and extending it a breeze compared to the existing situation.
3) Coding: Often when you’re developing in Drupal, you need to write some code to introduce some UI magic via jQuery or on the server with PHP to manipulate the page’s output. This is not module building, this is just a little tweaking with the Blocks area or in a custom views field, header or footer. It requires some knowledge of the API and how to effectively use it within the various levels. The Devel module comes in really handy at this point.
4) Module building: Module building is the next step up from coding tweaks. It’s not all that complicated once you wrap your head around the API and what you want to do. I have a half dozen simple helper modules I use for modifying the login or user profile forms as well as a couple of wysiwyg helper modules I use to refine things. Once you’ve made a simple module it gets much easier to do something a bit more complex.
A good book for getting started is Using Drupal: http://shop.oreilly.com/product/0636920010890.do
A more advanced book is Drupal Pro Development: http://www.apress.com/9781430228387
Andrew
Edit: [I]To answer your question, I think you will save time/money in the long run if you find someone very good to develop your site, make sure they understand exactly what you want right down to the fine details and then have them develop the site. Get references and have a look at as many sites that they’ve built to ensure you have the right people. If you want to manage the entire site in-house make sure thy understand that and have them customize the admin pages to suit the way you’ll need them to be set up. Also get them to have you involved in inputting the content early on in the project. That way you’ll be able to become familiar with the system while the project is evolving and you’ll cut costs by doing that part of the work.
Any large site will require maintenance so make sure that you either have your developer on retainer to do the typical updates or have them show you how to do them. For Drupal Core update, you might want them to do that. It isn’t a huge deal but it can be nerve wracking if you haven’t done that sort of thing before. Also for a safety net, get the Backup And Migrate module setup to do nightly database backups. I set all of my sites to do that and they keep a 7 day cache of backups. [/I]