I am planning to begin working on my first personal project this June: a community about students. What I want to have is a wiki, full with information about universities, a forum where people can discuss and a blog with news, articles, etc, all three of them integrated to eachother.
Now, the way to go seems like wordpress+mediawiki+some forum software but I have been having these thoughts about giving it a try and writing my own CMS. I have some RoR and PHP knowledge but certainly not to the point where I can write my own CMS, especially entirely from scratch.
How much time do you think it would take me to achieve it? I think/estimate I can spend 3 to 5 hours daily working on it and I want the whole site up and running by the end of August (which gives me about 300 hours of work, as I am also planning to spend some time just…doing nothing! :P).
The question is, is it worth it? Is it going to help me improve my programming skills?
What you shall do is up to your own discretion, but what you should do is implement something like Drupal.
Drupal is a CMS which is intended to be used for community sites. It’s not the easiest system to understand and use, but it’s very customizable.
Whenever you have to choose between writing something for yourself and using existing software there are four key pieces of information you need to account for.
- How Complex will it be?
- How closely does an existing system match my needs?
- What would it cost to implement an existing system Vs write your own
- How soon do I need it?
If it’s not very complex, nothing else really matches your needs well, it would be cheap to create (in time and money) and you don’t need it immediately then go ahead and do your own thing.
Otherwise, jump on board one of the existing open source CMS’s and start contributing there. Not only will you get great feedback from experienced programmers, but you’ll be part of some really awesome software.
Judging from your goals it seems like it’d be easily accomplished in Drupal with minimal work.
Forums and user blogs are built in and I’m pretty sure I saw a wiki module somewhere.
However, if you’re going for a learning experience – doing it yourself will be quite the learning experience. Whether you actually accomplish it or not you will understand RoR and/or PHP better by the time you’re done.
roll out your own 🙂
you will gain experience (which is priceless), and on top of that you will end up with something thats not bloated…
I’m in a somewhat similar situation, albeit at a smaller scale. I need a blog software in ,net, but the existing ones aren’t really that good, so I’ve started my own. Here are my thoughts:
- Don’t try to make 1:1 copies of something. Rolling your own gives you the chance to implement only what you need and leave out everything else.
- Start small. WordPress and Mediawiki have years of coding behind them. Trying to duplicate that on your own is not going to work.
- Blogs and Forums are incredibly simple at first, but get incredibly complicated once you deal with stuff like WYSIWYG Editors, Anti-Spam techniques, Browser compatibility issues and the like.
- This is a great way to get serious experience with your language and “Enterprise” technologies, but if you’re inexperienced and on a deadline, you’re should really look at extending something already on the market first.
If you are willing to cut some corners at the beginning, I think that building a CMS in 300 hours is certainly feasible. But then don’t start thinking about stuff like a Plugin Architecture, great User Experience for the Admin and Documentation – these points are really important if you want to release your CMS to other people, but not that much for internal use.
“Don’t Reinvent The Wheel, Unless You Plan on Learning More About Wheels”.
I’d focus on learning about each of the tools and how you can integrate them together, instead of writing a CMS.
As a true developer, you will have desires for large amounts of customizations. A lot of pre-packaged CMS/blogs have plugin systems, but to me they all feel a little odd when I have to register my code with the system via a database entry.
To be honest, I’ve had my blog in wordpress, rewrote my own in PHP, and I’ve since then rewrote it twice in Django.
Each time gets faster, each time you want to do something more, and each time you learn yourself about all the usability and security issues that the people who created the very large projects have to go through.
The rewrites were a valuable experience, and I would never take the “Don’t reinvent the wheel,” argument. I feel as though I can look at a wheel and tell you what is wrong with it, considering I personally invented it =P
Its possible in that time frame depending on how good you are with ruby on rails and php.
However, I would just use what’s out there. Is it really worth all that time to make your own?
I would say consider why you are doing it, if it’s to further your knowledge of programming and learn something new then go for it and build it your self, otherwise I would just use available tools to put it together.
As for time frame? I am crap at estimation for my own skills, so have no chance of estimating yours 🙂
If you want to go at it for the learning experience then I think you should. Phil Haack wrote a good blog post called Rolling Your Own Blog Engine with a good list of issues you’ll run in to.
It’s not as easy as many try to make it sound. The truth is that you can write a very minimal blog engine in a few hours (some will say minutes, but following along with the Rails video doesn’t really count as your own development time), but it wouldn’t be much use to anyone but yourself. Other users are going to demand more features.
Just make sure you leave yourself enough time to bail out and go with Plan B (wordpress+mediawiki+some forum software) if you need to.
I think you’ll find similar answers to Good resources for developing a Bug tracking tool?
As I said there, it really depends on your ultimate goal.
While I agree with what many have said already – why reinvent the wheel? – an answer that is going to be useful to you is going to depend on what you are trying to do.
If [you|your company] just need a CMS, there are numerous tools out there, free and otherwise, high quality and otherwise, why program your own?
If you are looking for a learning experience, looking for some something to learn [ChoiceLanguage] with, and/or just looking to learn more about wheels, there are a number of articles and there are a number of open source projects you can peek at the code to see how they work (or not as the case may be).
I’ve found that sometimes starting with an open source project helps me at least get a large chunk of code out of the way. I have taken a Classic ASP forum package and morphed it into a CMS – but it took a year or so and I was getting paid to do it. YMMV
In the end:
If the latter is your ultimate goal, then by all means, read the articles, do the research, and code away.
If its the former, you might want to look at something thats already been done – unless its going to be your businesses core competency.
Ultimately, the answer you get is going to depend on the question you ask. Being clear from the get-go will go a long way. 😉
The how much time factor is impossible to answer, as we frankly, do not know how good you are or what resources you have. I will say though, every example you cited probably has atleast a thousand man hours behind it, and that is being very very conservative.
As to if you should develop your own? Well, that really depends what you want to accomplish. Want to be efficient in your usage of time? By all means, NO! Use a pre-existing solution. Want a case study to learn better programming? Thats a completely different scenario.
To create something of the same quality as wordpress+mediawiki+some forum software would take many thousands of hours.
But if you’re just building it for yourself to use, there are a lot of “good enoughs” you’ll come across that’ll save you time. So I would say… under 1,000 hours. That sounds kind of vague doesn’t it? I’ve been programming 14 years and I’m still horrible at estimating time for projects, lol. Of course the definition of the project is pretty vague too.
To answer the question if it’s worth it is really a question for yourself. If it’s something you’re excited about doing then it could be a great learning opportunity. About 7 years ago (before the days of Google Analytics) I wrote a fairly powerful web traffic tracking & statistics engine. It was a great learning experience for me and I don’t regret doing it. Of course on the other hand, just like myself, you will be pouring a whole lot of work into something you’ll have little chance of making any money from.
It seems to me that these days successful community web sites are purpose-built. They don’t have a lot of extraneous junk, are easy to navigate and are fun to use. StackOverflow is a good example here. For your web site to be successful your user interface will be very important.
If you want ultimate control over your user interface, then your best bet is to build it on your own. You can start with the code base of something that you like, or at least use it as a working example.
Fortunately, as long as you have reasonable programming skills to begin with the web tools that are available these days can make you very productive after a reasonable learning curve is surmounted.
At the end of the day, if you build it yourself, you’ll have a web site that is very flexible, and looks exactly how you want it. If you use someone else’s code, the you’ll get the web site up faster and with more features, but it won’t be as flexible and you’ll probably have to make some concessions on look and feel.
I have to stress barfoon’s comment not to reinvent the wheel. There’s plenty a learning experience to be had in taking someone else’s CMS and learning how to use and develop against it.
Additionally, you will learn a great deal if you take an open source project and look through how they decided to design their product. Then, upon understanding how theirs works, you can either contribute to the project or even branch out on your own, but this way has several advantages:
- You know what you’re getting into (CMS can be a big task)
- Depending which one you choose, there’s a good amount of community support for existing CMS products which is valuable
- You will have likely learned a good approach by seeing their code
- Learning their product/code takes less time than building your own, so you’re less likely to lose motivation than if you started building one from scratch
That said, I personally recommend you take a look at Magnolia. It has community support, it’s Open Source, and it’s a quality system.
I’d go with WordPress myself for the scope of the project that you’d defined. Simple Press Forum is a robust, full-featured forum plugin for WordPress and it’s fairly easy to integrate MediaWiki. There’s also a WordPress wiki plugin project that could use the hours it seems like you’re willing to commit. WordPress can do everything that you’ve described in a weekend.
You don’t need to re-invent the weel to gain experience.
I’d go for WordPress.
I’m using it for my website (www.norwegianfashion.no), and I believe I have a fairly advanced website. I’ve certainly increased my PHP programming skills.
I’ve tried getting my head around Drupal as well. It is very good CMS, but a pain in the ass to learn.
Even with 5 years of developing on other CMS systems (.NET), I was not able to master Drupal after 1 month of trying.
I’m no hardcore programmer, but I believe an CMS should be fairly easy to use.
So I’ve chosen WordPress.
It has it’s limitations, but you can create your own plugins to compensate for this.