I am working on my first web application, and can't figure out whether I should use a CMS like Joomla or Wordpress, or have the site built from scratch. For some background, the site will be sort of a smorgasboard of features in a healthcare related industry, with a directory attached. I don't want to ever be limited by what i can do as far as design, or development, and have many more features planned, but nothing technologically ground-breaking by any means.
I am interested in a CMS because I understand that building certain parts, (logins, registrations) things like that, go much quicker. However, aren't there sort of "out of the box" scripts for things like this that can be used even if I build from scratch with PHP? I am also interested in a CMS because from what I've read it seems that it will be easier to bring on new developers and have them know what everything does and understand the code, but aren't there ways I could build from scratch and just maintain a clean code base that is well commented and not run in to the problem of confusion from future developers?
Ideally, I would like to build from scratch, I just want to make sure I am not losing the 2 benefits of having out of the box solutions for quick building, and an easily maintainable and scalable code base. Any advice on which I should use?
EDIT: I am fairly technologically savvy, have a strong grasp of html/css/javascript and ftp
I would suggest you look into learning a framework.
There is a 'scale' between starting from scratch and building on-top of an existing application and each end of the scale has it's pros and cons.
Building from scratch
For popular PHP frameworks, see Symfony, CodeIgniter, Zend, CakePHP, Laravel, FuelPHP and Yii.
Alternative view: Beyond devolving into a CMS vs Framework vs Language choice, I would offer the following views:
This sounds more like a market validation effort than an architecture effort (nothing wrong with that, btw). Since CMS'es - Joomla / Drupal et al. - all have mature directory components, why not just put together a sprint project and see if you can deliver the desired functionality with that? Then show it to your intended customer base and get their feedback.
Worrying about "easily maintainable and scalable code base" is premature at this point - getting something in front of a prospective customer for validation is more important.
I can also argue about frameworks vs CMS vs Languages - but getting business traction and then revisiting the technical decision when you have specific (vs smorgasbord) requirements will be an easier task.
Good luck with your effort.
I would take a look at something Like ExpressionEngine.
It's a CMS, without being a 'website manager'. This means that instead of 'pages and posts' you can create custom datatypes. You can then create custom entry forms for each (eg image, file, bool, ...) and do manipulations (eg create thumbnail). This means you can have a completely different data model for 'authors' and 'book'. And just bring them together in a single view. Real separation of content and layout.
ExpressionEngine is built on top of CodeIgniter framework so you can simple write new parts when (if) you need them using all the framework functionality (eg the login modules etc).
Downside is, it's not free. But definitely check it out and see if it fits your datastructure.
http://expressionengine.com/ To get a glimpse at how the development proces works, this is a good beginner example:
http://www.train-ee.com/courseware/free-tutorials/category/building-a-portfolio-site
You can approach this issue in a number of ways. Most importantly, you need to look at costs. Always remember, you can have something 1) fast, 2) cheap or 3) correctly done, now pick 2.
If you want something fast and cheap, a CMS is great, but it might not be correct for your businesses.
If you want something fast and correctly done, a custom solution might be your answer, but it won't be cheap
If you want something cheap and correctly done, it will take time.
etc.
If you have a clear vision of what you want this to do, then I would always suggest a solution that involves customization. A framework is nice, but has it's own set of rules and restrictions, to a point. The most flexible solution is one that is built from the ground up.
IMHO, if I was looking at this solution, I would look at several things:
Hope this helps, do let me know if this is unclear.