23

Related: As a beginning programmer, should I favor building my own libraries over using 3rd-party libraries?

As an intermediate to advanced level PHP web-developer and a young one at that (15yrs.), should I build an entirely new CMS for my website or rely on pre-made software such as WordPress or Drupal?

I don't exactly feel that WordPress is powerful/scalable enough to be able to handle what I'm trying to do and after tinkering with Drupal quite a bit over the last few days it just doesn't seem up to par for my liking and also isn't well documented so I'm having a bit of trouble getting it to do certain simple tasks. I would love to use something such as ExpressionEngine, but I don't have the money to dish out for a commercial license which is currently at around $300, so that's a no-go.

I originally started coding my site as a temporary system so my users could purchase upgrades and other things such as in-game currency until I could get a new website up, but after I started on it I quickly realized that I needed to make it scalable, so from then on I coded with the thought of making it a full-functioning website in mind. It only took a couple of days but all of the basics are there (register, login, account modifications, etc.) and I believe it would be a great start for a private CMS.

The last thing I want to add is if I were to build my own CMS, should I make use of a PHP framework such as CodeIgniter, which I have quite a bit of experience with?

Maybe others developers could clue me in as to what I may be getting myself into.

Alex Bennett
  • 349
  • 1
  • 2
  • 6
  • 11
    Do not underestimate the amount of hours gone into making existing CMS'es what they are. You might be severely surprised... –  Jul 27 '11 at 17:22

9 Answers9

23

It totally depends on your situation. Great sites has been made with CMSs out there. I think we'd better first understand two concepts, CO, and TCO.

CO (Cost of ownership)

When you buy something, the amount you pay for that is CO. In case of WordPress, it's nothing, cause WordPress (or many other CMS software) are free of charge.

TCO (Total Cost of Ownership)

Imagine that you buy a PC for 10000 dollars. Then what? You should spend time for installing software on it (time is a valuable resource, thus you're kind'of still spending money on that PC), then you might purchase a webcam, another DVD writer and some extra cables. Then you need to learn how to use installed software. In other words, Total Cost of Owning a PC is not $10,000. It's much more than that.

In case of CMS software, their CO is really nothing to very low rates. But many experiences show that their TCO is not low at all. Big companies spend almost thousands of dollars to get a good site in Joomla, or WordPress.

Another factor is the level of customization. Sometimes you want to use a software as is without any change. In that case, WordPress, Joomla, Drupal or any other CMS could be a very good candidate, and you shouldn't write your own CMS. But there are times that you need a high level of customization. In that case, you really become frustrated to customize a ready-to-use CMS to suit your requirements.

I actually wanted to use ready CMS software, but after a spending a valuable time on learning different CMSs and finding weaknesses of each one, I ended up creating my own CMS. Thought Results is my personal site and is built via this CMS. I'm gonna publish it soon, so others can also use it.

Still another factor is extensibility. Believe me, it makes you old to take a CMS from static state to extensible state. Templates, modules, plugins, providers, database and storage, routing mechanisms, and almost any part in a Good CMS should be extensible.

At last, my personal suggestion is to start building a CMS, so that at least you learn some of the most fundamental concepts behind it. But also try to use existing ones. Good luck.

Saeed Neamati
  • 18,142
  • 23
  • 87
  • 125
  • Wow, excellent answer. Some of these things I have never considered but are really nice to know now. As you were saying with the customization, I _really_ need a lot of that, which is why I originally turned to Drupal because I had heard it was supposed to be great with things like that. In my case, though, I need to have a lot of interaction between multiple servers, PayPal, extensively customized registration, and other things that really aren't easily handled by something like Drupal. Many thanks for your answer, I really appreciate it. :) – Alex Bennett Jul 27 '11 at 09:43
  • I would also like you ask you though, would you recommend me using a framework such as CodeIgniter, or building my own as I go (maybe for the experience)? – Alex Bennett Jul 27 '11 at 09:47
  • 1
    Well, @Alex I'm glad that I could help. But I'm also sorry, as my platform is .NET and I'm not very familiar with PHP frameworks. But using a framework is definitely encourages. I use Entity Framework as an ORM, thus using an ORM in PHP can really boost your development. – Saeed Neamati Jul 27 '11 at 09:59
  • Alright, thanks anyway. The only reason I wouldn't want to use a framework is for the practice, but I believe it would probably be safer for me to use one in this case being that it is a production site and I don't want to have any stray vulnerabilities which may arise with me creating my own CMS/framework. – Alex Bennett Jul 27 '11 at 10:04
  • 1
    @Alex Bennett, One other thing, There are open source CMSes. If you get the source code. You could start with that, and then modify it to your liking. This would really accelerate building your own. It's like a hybrid approach. Who really wants to reinvent the wheel? – MVCylon Jul 27 '11 at 13:24
19

I am playing devils advocate here, however it needs to be said. Some of the most common problems with software developers:

  • Under estimation of time and effort involved in completing a trivial project, let along a big one
  • Complete lack of comnprehension of business reality
  • Overestimation of own skills and productivity.
  • Underestimation of complexity and subtle details
  • The belief that their problem is so unique no one has yet solved it.

Are you sure you are not making any of these mistakes, because even for a 15y0, $300 could be earnt in a few weekes, and what you seem to be proposing could take months. Think about what would happen if you got a paying job and bought ExpressionEngine with the money. Would it be delivered sooner, with even better features than a DIY job?

mattnz
  • 21,315
  • 5
  • 54
  • 83
  • 1
    I'm pretty mature for your average 15 year old, as I hope you can tell, and I don't believe I made the mistake of doing any of the things you listed. I've been spending a lot of time researching into possible solutions and have yet to come up with a good one for my situation. As for the money, my business makes over $300 in revenue per month (isn't much, but it pays for the dedicated machines) so I _could_ get the money, but I'm trying to play it conservatively and invest in things that are a must, such as hardware and advertising. Thanks for the answer though, I'll really keep it in mind. – Alex Bennett Jul 27 '11 at 10:14
  • 1
    I don't think you'd be really making a CMS as so much as a custom solution. If you make a true CMS, you could probably distribute/sell the CMS. I think you'd be a little over your head (as would I, but...) to go out a build a complete CMS. – HelloFictionalWorld Jul 28 '11 at 01:55
  • 4
    @Alex you need to consider that time == money, specifically your time. How much is it worth? If your CMS takes more that 30hrs to produce (@$10/hr) then ExpressionEngine is a better choice. Similarly if those 30hrs of work spent on other things generate more real value to your site than $300 then ExpressionEngine is a better choice. – CdMnky Jul 28 '11 at 10:36
  • 1
    This answer should probably also include considerations on the mantainance required and, possibly, also time-to-market. – Rad80 Sep 06 '22 at 08:21
8

There are two answers to this.

One is simple: No- don't reinvent the wheel. There are lots of excellent CMS systems and if you learn to use one well then if there are any things you need that it doesn't offer, you can focus more of your skill on creating a plug-in for that purpose rather than reinventing the wheel.

The second is slightly less obvious: Yes. If you want to understand how a CMS works and the problems encountered in the creation of one, there is no harm in building your own. It will probably never have the power and flexibility of one of the existing CMS systems and as there are approximately 100000000000 PHP content managment systems around the place, there is very little chance anybody else will ever be interested in it, but it also won't have the stuff that you don't need and it will probably work out a lot smaller and simpler than any of the bigger systems. It will take a lot of time, the results are unlikely to be as good and it won't make any difference to the rest of the world, but in terms of your development and learning, it could be a useful exercise.

In any case, before you embark on building your own, I would try the mainstream systems available just to get an idea of how they work, what they do well and what you feel they could do better. Having a good understanding of those may inform your decision on whether or not there is any benefit in creating your own.

glenatron
  • 8,729
  • 3
  • 29
  • 43
  • Thanks for the answer. Just to clarify though: If I built this CMS I would have no intentions of releasing it, that's not a market I'm in on. It would only be for me and would be built to do only the things I want/need. I have experimented with others though but I can't seem to find one that is documented well enough and does the things I need without forcing me to change up the core in some way, that's why I began considering just making my own. Another reason I want to build my own is for the practice, as I am working towards becoming a web-developer (or something similar) after college. :) – Alex Bennett Jul 27 '11 at 09:53
  • 3
    I write as someone who implemented a very small, very simple, very basic PHP cms a while ago and has used it for quite a few sites since. It does no more than a tiny fragment of what the larger scale systems do but it does everything I need for smaller sites and as it is flat-file based it runs pretty much anywhere. So I totally appreciate that sometimes you really do just want to build your own. – glenatron Jul 27 '11 at 11:11
5

If you have never tried programming a CMS, then this might be a very good opportunity to do so. You will learn quite a lot, and regardless of whether you finish it you will have a very good idea of e.g.:

  • What is hard to do and what is easy
  • How to internationalize and localize your pages
  • How to handle users and roles
  • How to handle maintenance of underlying datastructures instead of requiring SQL update-statements.
  • How to handle multi-part pages.
  • How to efficiently handle static content.
  • How to scale to multiple computers and high load.
  • How to provide API's for user customizations and themes.

Some of these you might even find that you've learned how not to do it. That experience is important too.

Personally I've reached a stage where I've learned that the "how hard can it be" only covers a few percent of the work actually needing to be done to create a high quality product, and if I was to choose a CMS I would look for a popular one with an accessible accessible code base and good documentation, and a good plugin architecture allowing me to just write suitable plugins, and then update the base CMS when a new version comes out.

  • Thanks for the input, I've already had quite a few how _not_ to do it experiences. E.g. I write 30 lines of code to do a simple task and then 2 days later review the code and find that I could shorten it into like 10 lines. Those experiences, however annoying they may be, definitely help the learning process as they tend to make things "stick" more. – Alex Bennett Jul 28 '11 at 03:09
  • @Alex, this "how _NOT_ to do it" experience scales with the size of the code base of your project. But, I guess you need to do it at least once to appreciate it :) –  Jul 28 '11 at 14:44
3

This is only slightly an answer to your question. I've assumed you're into php and you're not going for the pre-made CMS way. Welcome to the club! Many of us have gone the same way. Some piece of advice that might ease your load.

I've started out building my own CMS, MVC implementation, internationalization (i18n) handler, session handler, some way of database abstraction layer, some way of form handlers, etc. And then I found out that what I was doing was actually done before, but in a better way by frameworks. So, this means you don't have to reinvent the wheel completely, but just where it fits your needs. Frameworks make your life easier, but they do require a lot of effort to read into, and to learn. It took me a year to really master Symfony, and I don't regret it any second.

And you're in luck, because right now there are many more high quality frameworks than before. To name a few :

  • Symfony: Today they released version 2.0 stable, it's exciting stuff. It's loosely coupled which means you can use either components or choose to use everything as an integrated package. It's got good documentation and an active user base. Otherwise the now outdated 1.4 version is also still very reliable and useful. It's got many powerful plugins to make your life easy. (Bundles)
  • Zend Framework: Some claim it's not really up to date (not all the brand spanking new 5.3 features), but it's been around for a while now, and it's basically a set of useful components (again loosely coupled, not an all or nothing game). I use it as a toolkit to do things like searching (zend_lucene) and generating pdfs. But it also has a commonly used MVC controller set. You should look into it if you have not done so. Very well documented.
  • CakePHP: Used it a long ago, and could not get through the documentation. Apparently this is now better and probably worth your consideration.

  • Yii: Haven't used it, but there's a lot of fuzz about it lately, probably worth your attention.

  • CodeIgniter: Heard many people praise codeigniter for its easy learning curve and ease of use. Haven't used it.

If you want to give python a try, many people also praise Django, and of course ruby on rails.

There are probably more, but this should be useful to you. If you don't wish to use them you can still learn lots from these frameworks. Good luck!

babttz
  • 105
  • 4
Arend
  • 131
  • 1
1

The answer largely depends on what you are trying to achieve.

If you are intending to develop your skills, learn about content managment, etc. Then yes by all means develop your own. Similarly if you want to learn a framework use it.

However if your focus is the game you mention and its players then the answer is almost certainly no. Your time is a finite, and hence expensive resource. Time spent developing a CMS is time not spent developing the game, and it is the game that generates revenue. So ask yourself the question. Is the time spent developing this CMS rather than procuring one going to improve my players game experience more than time spent developing the game? If the answer is yes then develop it, otherwise don't.

Similarly the decision of open source CMS over ExpressionEngine should boil down ToC as Saeed says. Simply put if Cost(Wordpress) > Cost(ExpressionEngine) then spend the $300. Here cost is purchase_cost + (hours_to_customise * your_hourly_rate).

CdMnky
  • 91
  • 3
1

Find a CMS that fits with 90% of your needs and modify it over time to add functionality it doesn't supply.

This will allow you to launch early and adapt as your and your user's needs change.

Supermighty
  • 103
  • 1
  • 7
1

I fully encourage you to build your own CMS. It is by far the best way to know the ins and outs of such a system with regards to customization and security. But I have to question just how intermediate to advanced you are with your PHP skills. This is not in regards to your age, believe me.

The flag for me was "I don't exactly feel that WordPress is powerful/scalable enough to be able to handle what I'm trying to do and after tinkering with Drupal quite a bit over the last few days it just doesn't seem up to par for my liking and also isn't well documented so I'm having a bit of trouble getting it to do certain simple tasks."

The plethora of books and sites on customizing Worpress and Drupal, not to mention the high profile sites that run on these, prove you have to know what you're doing do get sites like these. Not to mention, entire budgets are set aside to run these sites.

Links for example:

http://drupal.org/cases

http://wpmu.org/wordpress-showcase-20-high-profile-sites-running-on-wordpress

This is not to discourage you in what you're trying to do, by all means go for it. I just want to make sure that you don't put in too much of your time (reinventing the wheel) and get frustrated at a certain point and just say "eff it", when you can stretch your talents and show people, employers included, what you've got with the tools currently available. In the real world and the current economy, time is money, and businesses and organizations don't have the time and/or budgets to continually deal with creating projects from scratch.
Information today moves at the speed of light, which is why programmers who can separate the noise and create purposeful content/apps/systems in appropriate turnaround time are in high demand.

A. Edwards
  • 11
  • 2
0

Only you can answer whether Wordpress or Drupal can do what you need a CMS to do, but if you want to try them out, why not use a virtual machine from Turnkey Linux, such as the one for Wordpress, Drupal, Joomla or any of the others with the Content management tag.

Assuming you already have VMware player or VirtualBox installed, within a few minutes of downloading any of these appliances, you could be trying out the software yourself, with minimal time investment.

Mark Booth
  • 14,214
  • 3
  • 40
  • 79