There are four main types of solutions you will encounter when choosing a website solution:
- Build the entire system from scratch (in a language like PHP)
- Use a framework (like Yii, Laravel, Zend etc)
- Use a Content Management System (like Joomla, Drupal, etc)
- Use a script made specifically for the problem at hand (like Wordpress, Magento, Moodle, etc)
I wish it was as simple as saying these types are ranked from best to worst but this is not always the case. In order to say which one is "best", you need to define what makes a solution "good". For most people it ultimately boils down to a combination of the following factors:
- Cost: Is the solution affordable?
- Development Time: How long will it take to complete the project with the chosen solution?
- Ease of Use: Can the users of the system do what they need to do without hassle?
- Security: Is the solution safe to use?
- Performance: Will the solution be fast?
- Aesthetics: How good will the final product look?
- Uniqueness: Will the final product be unique?
- Web Standards: Will the solution, W3C compliant, SEO Optimized, Responsive etc?
Based on these factors you will see that no solution will ever score full marks in every category. For example, building something from scratch might mean that you get a lot of speed because you eliminate any bulky components that may come with a solution that's not built from scratch, but it comes at the cost of a significantly longer development time. More development time also means a higher cost because there are more man-hours that need funding.
This means that those looking to build a website could become frustrated with the amount of solutions out there and ultimately not know where to start. So let's try to analyze each potential solution and figure out when each one is most appropriate. In order to do that you might need to buy into a rule that may sound obvious, but I still find many people (including myself) breaking this rule every day:
1. Do not re-invent the wheel.
It seems obvious, right? The problem is in software development it isn't always obvious when you are busy re-inventing the wheel. For example, you might be presented with the task of building a blog. The most obvious and most popular solution available is Wordpress, but if you didn't know about Wordpress, you would probably start by building a solution from the ground up or perhaps using a framework like Yii, Laravel, Zend or some other technology that you have been exposed to. There are cases where doing this is valid, but generally, you will be wasting a lot of time building something that already exists.
Re-inventing the wheel isn't just bad because of development time lost. Building something from scratch could also result in building something less effective. Wordpress, for example, was initially built by less than 10 people but there is an entire community of developers out there that also contribute to it and constantly help to improve it. No matter how good your team of developers may be, it is unlikely that they will be able to build a blogging system more robust than Wordpress, purely because no team can beat the man-power behind a system like Wordpress.
"Re-inventing the wheel" also ties in with another rule that, if broken, could have far more dire consequences than just the time wasted re-inventing the wheel.
2. Never use software for anything other than what it was meant to be used for
There are exceptions to this rule, but generally if you are building, for example, a "cutting-edge" online shop using Wordpress, there's a good chance you're going to hit a wall after a while. Wordpress was designed to be a blogging platform and yes, there are thousands of plugins out there that allow you to do many weird and wonderful things with Wordpress, but ultimately what you are doing is trying to change its original purpose (blogging) and use it for something else (e-commerce). You might be able to setup your shop, load a few products and maybe even manage to do a few sales, but the moment you try to scale up, or perhaps require a custom feature like calculating shipping based on a formula, you could very well end up wasting more time trying to get Wordpress to behave a specific way, than you would have had you used the right software to begin with. Also keep in mind that one of the main reasons why Wordpress sites get hacked is because of badly coded plugins. Is it really worth using the wrong tool for the job when there are so many risks involved and potentially so many better suited solutions out there?
The tricky part about this rule is that there is only one way to know which one is better for a specific task: experience. Someone might tell you that X is the best thing for the job, but without actually installing X and spending time working with X, you may never know if X is in fact the best solution. That is why it's important to team up with clued up professionals that have experience with a vast range of technologies who won't force a solution down your throat because it's the only one they know.
That, however, brings us to another problem. If not even qualified web developers know of all the solutions, then how are non-technical people supposed to know which are the best solutions for them? A good development company will usually have very good explanation for suggesting a specific solution. Always ask:
- Is this the absolute best solution for my company?
- Why did you choose it over alternatives?
However, it helps a lot knowing the difference between the types of solutions when presented with options. So let's look at the pros and cons of the different types of solutions to understand what might work better in different scenarios.
Pros and Cons of The Four Types of Solutions
|Build the entire system from scratch|
|Use a Framework|
|Use a Content Management System|
|Use a script tailored for the problem at hand|
Let's identify when these solutions should be considered.
Use a script that is tailored for a specific problem
This is usually ideal if you are trying to do something that many have done before and for which there are already popular solutions available. Wordpress is an obvious example (although many might argue that Wordpress has evolved into a Content Management System). Very little has happened with regards to blogging that would require someone to build something from scratch. If you just want a basic blog, Wordpress will solve that problem. It also has countless plugins that will allow you to get many extra features on top of the standard ones, but when it comes to filling the need of blogging, Wordpress has you covered.
However, Wordpress is just one example. There are countless other solutions for problems out there that you can try for free. Need to send e-mail to subscribers? Try PHPList. Need chat software? Try phpFreeChat or X7 Chat. Need eLearning software? Try Moodle. Want to run a message board? Try phpBB, or SMF, or punBB or many of the others out there. Need an online shop? Try OpenCart, or Magento, or Zencart or one of the many other solutions.
It should be clear that being aware of other solutions is the key here. If you have a small budget, aren't too fussy about the software doing exactly what you want it to do, then using a script can be your saving grace. Just be aware that should your site grow, there might come a time in the not too distant future where you might have to scrap the entire solution and build a completely new one.
Use a Content Management System
Drupal, Joomla, Typo3, phpNuke, Xoops... the list goes on. Content Management Systems are not something that's hard to find. What is hard to find is the right Content Management System for the problem at hand. Here at Namhost we've become extremely good at developing solutions using Drupal for the simple reason that Drupal isn't quite like your typical Content Management System. Most Content Management Systems, as the name suggests, focuses on managing content. In other words, you often have the ability to add "Pages", "Forms" and perhaps "Sidebars" and so forth. Drupal has all these features of a conventional Content Management System, but it's true strength lies in its ability to define data from the ground up.
Drupal and other Content Management Systems are generally a great solution if you intend to build a website that doesn't require a great deal of custom or advanced features but has a fair amount of content that will be added or changed on a frequent basis. Most websites can be built using some or other form of a Content Management System, but it can become complicated when certain custom requirements arise. However, the low cost of developing a website using a Content Management System as well as the wide range of features that are inherently available is often what makes it so attractive to use. Not to mention the large amount of community support, free upgrades (open source), extendability and many other features.
Use a Framework
Frameworks offer a very high degree of freedom to design the system as you want to while still decreasing how often you "re-invent the wheel". For example, most Frameworks will have features that deal with Database Management, Sessions, Forms etc, but you will still have to hook those components up and turn them into a website. You will also need very skilled developers to put it all together.
Frameworks are ultimately more secure than Content Management Systems, provided the developers know what they are doing. With Content Management Systems anyone can download the codebase from the internet and see exactly how the system works. With Frameworks, although the core of the system is available online, a much bigger part of the system is custom code and security is highly dependent on the developers of the system.Frameworks should be used when:
- The system requires a lot of custom code
- Speed is extremely important
- There is enough funding to build as well as maintain the product
- You want a truly unique solution tailored to your business
Build the Entire System from Scratch
This is usually a bad idea. Apart from wasting a lot of time re-inventing the wheel by building things that very rarely change across systems (e.g. Database Management, Sessions, Forms etc) you are basically saying that you can build something better than what thousands of programmers have already tried and tested and proved to work. If you are building something from scratch, you probably didn't do enough research to find the best tool for the job.
That said, there are some cases when building something from scratch does make sense:
- You need a very simple one-pager with very little programming
- You are building something that has never been built before (but even in this case, starting with a framework could still make more sense)
The extra development time and therefore cost involved in building something from scratch almost never makes it a viable solution.
The most important thing to take from this blog post is that there is never a one-size-fits-all solution, but understanding your options can save you a lot of time and money.
Drupal and other Content Management Systems can usually work great for most websites out there, with Drupal being particularly good for building websites because of the level of detail you can go into when building a site with it. However, if you have the budget, and you want to build something truly versatile, professional, fast and that requires far more custom work, then you should look at the likes of Yii, Laravel or Zend. There are many other frameworks, but those are among the most popular, with Laravel being a really good option if you don't know where to start. Building something from scratch is rarely a solution and using custom scripts will limit you in the long run. However, both can be very valid temporary solutions, or work well when combined with a Content Management System or a Framework.
Work with professionals that try to get you the best solution possible for your money, rather than someone trying to sell you a once-size-fits-all solution.