Custom development vs. open source

I’ve done custom PHP apps with a company for the last couple of years. However, lately I have become frustrated because I feel that many of the clients we work for would be better served with an open source application like Wordpress. It’s free, it’s packed with features, and it has great community support. Contrast that with our CMS which is custom, extra features are charged at an hourly rate, and nobody at our company seems to want to maintain it besides me.

I’m currently taking a break from this company, so I’m looking to do some freelance PHP work on my own. However, I’m at a crossroads. Should I embrace the open source apps (even though I feel they are coded poorly) and start offering my services as a Wordpress developer? Or should I start trying to market myself to higher end clients who really need custom work (and actually have a budget for it)?

How do you justify your custom work in an age when there are plenty of free, “good enough” apps out there that do virtually the same thing?

Any advice would be very much appreciated.

I do a lot of corporate stuff and as a result I know and will admit wholeheartedly that my edginess meter is skewed however it doesn’t take much looking around to find non-run-of-the-mill websites built on big name CMS’s (my choice is Drupal):
http://buytaert.net/tag/drupal-sites

Yup… MVC and some better engineering of how to optimize the use of modular code would help with any of the big 3 (Drupal, Joomla, WP) but I have run Drupal successfully on less than optimum servers quite handily, including Windows Server 2003 and Server 2007. Load balancing and caching hasn’t been an issue, mind you we’re talking about sites that aren’t under huge volumes of traffic; only around 5,000, 8,000 visitors a month so I’m not sure what would happen if they really had to scale like the site at whitehouse.gov which is built with, you guessed it… Drupal.

I’m sorry but that is a cop-out… If the CMS is a modular framework with hooks, then it’s up to the developer to write the code and integrate it with the CMS. However clunky you, I or your organization feel Drupal may be, it does have a well documented and standardized API. It’s been my experience that if you can write a custom feature as a standalone app, you can write the same feature as a module or custom code for Drupal but you need to know the framework in order to do it.

See above… That’s not the CMS, that’s the developer and I’m sure some of my sites look like WP, Joomla or Drupal sites because I haven’t pushed the boundaries but that doesn’t mean they have to look that way. Given knowledge of the CMS and it’s theming engine, you should be able to make it do whatever you want.

All that said, I hear you… Popular CMS’s do try to be everything for everyone and as a result are bloated, can be difficult to really customize, etc… however if I were to build a custom app or community or portal, whatever, I think it would be a benefit to build it on top of a well supported CMS at least to begin with and then migrate it over to a custom MVC or whatever framework once the specification had been hardened. That would be version II.

That’s just my 2 cents anyway.

Interesting… It seems that a major point has become lost in translation and it could be that not everyone is aware of what can be achieved with today’s CMS frameworks…

Today’s popular CMS’s (Drupal, Joomla, WP, EE, etc…) are built to aid and enable custom development. The CMS is the foundation which provides the basics of content management, PDF/CSV generation, emailing, contact forms, members/roles, etc… You, the developer can write as much or little code as you like for your custom app.

  • You want to do something specific like authenticate users against a custom remote authentication system that’s fine… Just write a web service on the remote system and write a module to consume it on your CMS.
  • You want to build a specific type of ordering system without all the bells & whistles of an off the shelf solution, develop it and integrate it with the CMS.
  • You want to consume some XML data and produce a graphical representation… Write the code and integrate it.
  • You want to allow visitor generated content, create the interface and expose it to the public. Today’s CMS’s have built in methods for moderating content.
  • Custom search, build your own and add it.
  • Online auction, build it on top of the CMS
  • etc… etc… etc…

My point is that the CMS becomes a blank canvas and instead of starting from scratch you leverage the basics of the CMS and build your custom application on top of it.

Note: If you are going to use a CMS as described above, you have to learn it… Skimming the readme files won’t cut it… You have to actually choose one and dedicate yourself to learning it inside and out. The good ones are built in such a way that they have internal standardization of how things work. Hooks to the core are standardized and the internals are protected via a layer of abstraction that simplify repetitive task like database calls, object retrieval and data handling but… You have to know what your doing, otherwise you’ll do things the hard way (I’m speaking from experience about doing things the hard way).

This is a very interesting thread.

Open source is the way to go.

Open source what? Frameworks, CMS, plugins, etc… Trying out plugins for hours that don’t quite work can be a huge time waster. I agree that it is definitely worthwhile to use Open-Source where its applicable, its not always the most appropriate solution. Sometimes it can be a very helpful part of the solution.

Exactly, so wordpress set up may take 6 hours including theme installation and a few bits of misc config, then implementation of a non-trivial feature into it may take 16 hours. I don’t think some client’s would appreciate why the “whole site” costed 6 hours while a comparability smaller feature costs 16.

If you reuse a custom code-base it doesn’t need to take more time. In fact it can take less if your CMS is designed to handle certain tasks.

Simple Websites
Its amazing how many curve balls a client can throw you. With open source products, it can be very difficult to nimbly handle requests in an elegant way.

Versions
One thing that concerns me with Open source CMS systems is I would want to fine tune anything I used. Optimize it for SEO, get the toolbars right, clean up the dashboard, etc…
Prepare an optimized package. Every time a new version comes out the package would need to be re-optimized. What happens when a key plugin doesn’t work with the upgrade.
Etc…

While the concepts of Open-Source sound compelling, there are many hitches that can end up creating an awkward product and pitfalls that can be huge time-wasters.

Amount of time required to test and optimize custom code is often not worth it unless the client has a massive budget. By starting off with an existing CMS framework and customizing you will be giving the customer something that is easier to expand onto in the future (tons of other programmers contributing to the code). Also many additional features are already built into the system and are proven. Sometimes it’s not in the customers best interest to start from scratch.

A little late to the party, but here’s my two cents: it all depends on the project you’re going to do. I’ve had quite a few projects over the last couple of years which were simply impossible to do with any open source project: the requirements were very custom, and the customer wanted applications rather than “a website”. The open source CMS’s are very specific at what they do. If a customer wants an application which simply can’t be done based on an open source CMS: then don’t.

That said; writing those custom applications means that I now have “modules” for stuff like authentication, authorisation, generating PDF files, sending e-mails, and generating forms for an optional backend. Starting to write an application for me means selecting the appropriate modules, and do the coupling.

I’m also in the market of “simple websites”, and it appears that’s what your question is about. In that case, I’ve selected wordpress as the base, and I simply install or write plugins for extra functionality the customer may want to see. I wouldn’t write a custom CMS for those websites; that’s an investment me and my accountant wouldn’t be all too happy about. Why bother? Wordpress is pretty flexible, although the code quality isn’t what I’d want it to be. Programmers tend to be purists and shoot down an open source project only because the code doesn’t look like the way they work. If you want to make money and deliver simple websites on time and in budget: use an open source CMS.

So, it’s what the customer wants and how well it maps to the possibilities of existing open source projects, I think.

Open source is the way to go. In many cases open source will not have 100% of your requirements covered. The trick to find good code base and well organized open source project and extended to your own needs.
After that, be ready to maintain it and continue to improve

Yeah i understand. Many projects will do just fine with wordpress or similar.

Rather than being frustrated I’m actually glad that all these plug n play cms systems are coming out. Most webmasters i meet today don’t know how to do anything but plain html and wordpress or some other cms. These webmasters are limited wordpress. Yes it makes it easy, but someone hasn’t already developed it…they can’t do it.

It’s easier to find a niche that isn’t dominated this way. I see more and more and more blogs, and less and less and less custom sites.

Sell your customers a cms, they won’t know the difference. Just be sure to charge real money for custom work, and explain to them why.

I know this is an older article, but I just stumbled across it. I think websites built these days really need to be using a CMS, as opposed to custom code or even a framework. Here’s a more detailed blog post on this:

If you are in the business of making money, then having as many paying customers as possible use a single code base is just good sense, and you can’t get much DRYer than that.

Sometimes you have to think like a businessman not a ninja if you want to make money.

I’ve been in your shoes. I had developed a custom CMS for almost 12 years for my current employer and others. I have since migrated to WP and Drupal for a number of reasons.

In the end while there are valid reasons to go either direction for me it comes down to how I can best serve my customers in the long term. In this case when they are no longer a client they will still have a website that can serve their needs for years rather than months.

This article I read some time ago makes a pretty good case against custom built CMS’s. Some of his 6 points don’t apply if you’re using a framework of course.

That is a pretty wasteful idea and really slaps Object Oriented coding right in the face. If you cannot figure out how to write a CMS framework that can bend to any number of clients then why would one even be in the programming market?

MVC pattern is probably the single best pattern you can have for a CMS.

If you build an Administrator Controller that extends a framework’s basic Controller class and offers CRUD features then you can then build a CMS by an associative array that wraps the table fields you specify + helper key-values that help along the Model/View and dataflow problems.

Build a friggin’ Form Generation Library or ‘helper function’ for some frameworks then you can in fact build an entire CMS every time from the code out and never have to build it from a CMS canned product.

Now I understand there is a market for canned products that offer custom fields and also a market for WP and its brethren. But an agile programmer who DRY’s out their code can have the best of both worlds.

Couldn’t agree more. This is the exact issue I have with using open source software, wholly because the standard of code and common requirement to trace through line by line to find out where something is happening just make maintenance a nightmare.

Also, would you charge your client a modest fee to set up wordpress then charge them probably close to 3 times that to add any non-trivial feature 3 months later? I don’t think the client would understand the price difference.

Charge them a normal web development rate per hour. I hate giving hourly rates, mainly because clients hate them too. So I just estimate and give them based on a rough hourly rate.

Exactly, so wordpress set up may take 6 hours including theme installation and a few bits of misc config, then implementation of a non-trivial feature into it may take 16 hours. I don’t think some client’s would appreciate why the “whole site” costed 6 hours while a comparability smaller feature costs 16.

If I can take a moment to defend the questioner, I think that’s exactly what makes it the perfect question to ask here. If it was a yes / no, true / false question, you could look it up online or in reference documentation. The entire point of forums is to help fill in the gaps when those resources fail or your question (just like this) is subjective.

I think in most cases you’re absolutely correct. Open Source software has its share of quirks and sometimes isn’t as stable as I would like. However, in general the open source projects which grow large have done so because they’re well built and “on target” with useful features. In contrast, Microsoft may be the most successful for-profit software company, but look what the last several versions of the .NET framework have brought us… several major advances have been web server controls which are supposed to replace XHTML and LINQ / EF which are supposed to eliminate the need to write SQL. REALLY? That’s what the think the development community is looking for? Screw new features, just change the way you do things and call that progress? If the web server controls gave you more power and control than just manipulating XHTML with C#, I might be on board; but what a complicated mess that is.

I would just point out that this isn’t what allspiritseve was asking. Purchased software can frequently be inferior to open source software, but virtually all packages, purchased AND open source are not aimed at developers. They’re aimed at people who can’t build their own websites… that’s what makes them the major players because developers are such a small audience. We know what works well for developers. I’ve heard a number of guys in PHP rave over CodeIgniter. An XML specialist I know swears by oXygen. If someone took away my Notepad++, I might go into sales and marketing I’d be so depressed. But the big packages necessarily automate a lot of stuff and take control away from you, they do things for you, they “make your life easier”. And if your part of the mass public then having the CMS do all those things for you is an acceptable loss of control, since you couldn’t do it yourself. But for a developer, they’re a pain in the backside.

I would take issue with this point. While there are things that CMS systems do well, this is certainly not one of them. Just because you can jury rig a customization, doesn’t mean the system performs well. Developing CMS plug-ins takes much longer than producing equivalent functionality from scratch. The advantage of 3rd party software in general is that it eliminates construction and gives you functionality with only setup time instead of coding time. The price is that customization and maintenance are a @#^@#$%. And unfortunately this is the most expensive part of development though it’s spread out over a much longer time. That’s why typically CMS systems usually perform best for non-developers who can’t produce funcationality themselves. For a developer, it increases the time and complexity of virtually every task you do because you have to work inside the sand box you’re given. And while I haven’t worked with Wordpress specifically, I think I just just cite…

to demonstrate that I’m not the only one who’s found CMS systems ridiculous to deal with. Here’s just one example that’s not even a complicated coding / customization / plugin issue. If I want to change the font on an entire website that I’ve created, it takes me two minutes in a stylesheet: one minute to change, one minute to upload. The other day a client asked me to fix one particular webpage on a Joomla site so it would display one consistent font throughout. It took me an hour to get all the adjustments right, and there is still an inconsistency that causes FF to display one paragraph in bold. And I can’t even tell where it is because the XHTML output is such a mess.

As a developer looking for 3rd party material, I want to build my code base not glop together a bunch of incompatible packages. So I gravitate to things which do that. jQuery is a code library, it adds to my code base. I can use it to execute a solution but it doesn’t get in my way if I need to do something outside it’s built-in capabilities. The .NET framework (as much as I bash it sometimes) let’s you ignore all the garbage and use the good parts that work for you. As long as you work programmatically in your language of choice, there’s not really any limit to what solutions you can create or how you can go about doing them. That’s what makes a code library and some frameworks different from a CMS which takes control away from you and makes you do everything through an interface. For someone who doesn’t know anything about web development, that may be really helpful, but by the time you learn CSS, it’s pretty much just getting in your way.

@allspiritseve

We had a similar problem. You basically have to see what benefits your client.

Charging your clients 80 euros per hour per developer is not something that should be done likely. I hate to say it but most of the things you require can quite easily be found on one of the three open source popular content management systems (WordPress, Drupal, Joomla) for free.

You will find that 90% of the time, an open source CMS would do just what you want. For the other 10% you can either write your custom code or get somebody else to write it for you.

We were in a situation were our in-house CMS was so bad we could not compete with open source. Eventually the company had to plunge their content management system and use Joomla. The funny thing is their CMS cost well over 3 million euros in salaries alone.

Should I embrace the open source apps (even though I feel they are coded poorly) and start offering my services as a Wordpress developer? Or should I start trying to market myself to higher end clients who really need custom work (and actually have a budget for it)?

Would you say the Whitehouse.gov, or the Onion newspaper, or even The Economy are small clients? All of these people use an open source CMS. In fact there are few people out there who want complete custom solutions because they want to save money and trust open source more than in-house.

Cheap and cheerful sites can get you constant work, but if you want to offer professional sites you will have to go for the mid-range sites. I have produced some cheap and cheerful sites (not proud of it). The only problem is most people don’t want professional solutions. Many just want to spend 400 pounds and get their site. The ironic thing is those clients try to save money by buying their domain and hosting packages, but they have no idea what to do with them … :lol:

I know I tend to plug endlessly for MODx, but you really should check it out if you haven’t already. It is part slick CMS and part highly extensible PHP application platform. The latest version, “Revolution” (2.0), was two years in the making and is very well thought out. Not sure what you would think of their programming standards; my own skills are not far enough advanced to critique theirs. I know they have done things like using xPDO for maximum flexibility.

i was going to open up a similar thread… What is with Open-Source vs Custom Coding… I prefer to custom code; and use my own application and software for projects, you know your own ****, you don’t need to wait for community support and the hours spending on research, adapting to the software learning the screwed up hacked job of coding, you can just end up building your own application.

I work for a marketing company and they had me work PinnacleCart which they purchased for $900 + source code. I could’ve built an eCommerce site with more features and better coded in the time i spent trying to figure out their system.

As a programmer… Its better to custom build your own application and focus on the clients that will pay for the service. Alot of clients out there are only going with the marketing they hear wordpress so they say they want it, but don’t know what it is nor will they ever use it. Once you install that application and set them up; they’re going to want a bunch of crap the Open-Source app doesn’t have. that’s real life experience. I couldn’t tell you how many times i installed an open source app and or even a purchased app and the customer wanted something it didn’t have. BAM 20hours of research and testing, and waiting on the community board to answer my question.

Magento, while originally built on the ZF, almost complete rebuilt their framework. The structure is similar but it’s very annoying you can’t rely on stuff that would be automatic for you on the ZF. So in the end it’s another completely new system to learn…