Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I am building a PHP application for a client and I'm seriously considering WordPress or a simple framework that will allow me to quickly build out features like forums, etc.

However, the client is adamant about having "full access" to the database and the ability to "mine the data." Unfortunately, I'm almost certain they will be disappointed when they realize they won't be able to easily glean meaningful insight by looking at serialized fields in wp_usermeta, etc.

One thought I had was to replicate a variation on the live database where I flatten out all of those ambiguous and/or serialized fields into something that is then parsable by a mere mortal using a tool as simple as phpMyAdmin.

Unfortunately, the client is not going to settle for a simple backend dashboard where I create the custom reports for them even though I know that would be the easiest and most sane approach.

share|improve this question
6  
Charge them for it. If what they're requiring is going to be extra work for you, make sure they understand this and charge them for the work. They probably won't be as interested if they understand that what they're asking for isn't trivial. Better yet, choose a framework which uses a real database schema and just give them access to the data, like they're asking. –  meagar Dec 7 '12 at 2:36
    
I have to say that from the sound of it the client doesn't really know what they want, or if they do they don't know how to articulate it to you. I think you need a good long sit down with them to find out what it is they think "full access" and "data mining" really mean. –  GordonM Dec 9 '12 at 12:15
add comment

8 Answers

up vote 3 down vote accepted

Gather Requirements before even thinking of * how* As has been stated - gather requirements. It may be that they mean just what they ask; SQL dumps. (Which I'd build in anyway for back up purposes)

Then consider how to achieve these requirements. It may be as simple as a Wordpress plugin, I'm not too aware about the technicalities of the Wordpress API, but this should be possible.

It may even be possible to knock up a seperate app for this kind of functionality. CodeIgniter has a pretty extensive database class - I rigged up a CMS w/ blog and database statistics in around a day. Plus it takes a lot of extra concerns out of your hands; using its extensive list of helper functions.

It may be useful to develop some helper classes yourself for this purpose. They may complement your existing toolkit and be useful in the future.

I understand the time benefits of using an off the shelf solution such as Wordpress, but this may be negated if you're building something like a forum in to it. I can't help but think that is going to bite you in the long term..

share|improve this answer
add comment

Determine what your client's requirements and grasp of technical concepts. Additionally determine what the timeframe and what they are willing to spend. This information might possibly lead you to a few decisions:

  • Use an out of the box approach like WordPress or some other CMS(-esque) system that is fairly easy to develop for. The caveat to this is you have precious little you can do about the data model used. Perhaps writing some documentation would help alleviate the pain. This approach will be fast, cheap, but a bit harder on the "data mining" side of things.
  • Develop a custom system on some framework like Symfony. This gives you the maximum control of what and how your data will be stored. This allows you to be more flexible and allows you to give your client exactly what (s)he needs. Of course this approach is going to be more time consuming and costly. Of course rolling your own can also be more fun than working with something like WordPress.

Of course one thing to always consider when dealing with a client with odd demands is how much is this client worth. Some people can be poisonous with odd and ill-informed requests that turn into more hassle than is worth dealing with.

share|improve this answer
add comment

In my experience there are some customers which can't see reason. I don't know if your customer fits into this group or not based on the information at hand. I'm guessing its possible given the overtones of your question. That being said the rest of my answer will focus on how to deal with this group of customers.

I have had a couple of occasions where I fought the good fight and tried to reason with customers who had unrealistic expectations such as this. In the end I of course "lost" since the customer is always right. Once they got what they wanted however, they inevitably saw at that point (whether they wanted to admit it or not) that I had been right and that I wasn't just being controlling but that my recommendations really had been in their best interest.

I think you hit upon a good point whether you meant it or not when you quoted "full access" in your question. I think the answer here is to make them think they have full access or at least as much access as you can possibly give. Depending on how technically savvy they are you can get away with this at varying degrees. There's nothing wrong with giving them read access. Unless they have technical capability/training, they're going to get in there and quickly see that you were "right." If you give them read-only access but tell them they have "full access" and they come back and say no you didn't, you can always play dumb and "double check" the permissions. I don't think they would know they didn't have full access unless they tried to write to the database which they really shouldn't be doing anyways as they'd be risking bringing WordPress to its knees.

In short my answer is to "give them what they want"... or other words make them think they're getting what they want.

share|improve this answer
add comment

I would let them access PHPMyadmin, but put up a clause, that any data loss will not be my responsibility, as wordpress manages data differently like you said.

share|improve this answer
add comment

Open the port the mysql server is listening on, and create for them a read-only user that they can connect to it with.

share|improve this answer
add comment

I would ask about reporting requirements - if it really is a concern that the app data be in a specific format, you may need to pursue a slightly different path (e.g. A custom Plug In, etc.). See what requirements they have in that regard.

Other than that, you could just let them have DB access.

share|improve this answer
add comment

The Easy Way - as stated, just do it. Move ahead using a tool you understand which is probably not the best tool for the job, get paid, and potentially leave them in a crappy situation. This is how the majority of freelance web developers behave.

The Hard Way - take a step back and forget Wordpress. If you actually want to provide good solutions for your clients, you'll need to actually listen to their needs. Hopefully your skill set is wide enough that you can do this while still doing the actual work for them. You've already recognized using a canned solution is going to behave how they want, but it doesn't meet all of their requirements.

Ask them why they need database access. Most people will ask for things because they are nosey, not because it provides any actual business value to them. If it does, then you're going to need to invest a lot more time and energy into a solution which may end up costing 10x more. If they realize that, it'll either shut them up, give you much more interesting work, or they'll find somebody else to do it for them the easy way. They still lose, but at least that loss isn't your fault anymore.

If you manage to keep them and continue with proper planning, then it really opens up the discussion. For instance... Do they need database access to interface with other applications? Open up an API instead. Not only does this change your data model, but perhaps it adds complexity to your architecture as well.

As a few others have hinted at... always make sure you cover your ass as well. If you give them data access, make sure you are each accountable for your actions independently. Perhaps you hand off an application and they deal with the database. You can easily prove they changed something from your latest release to them. Or, you activate some sort of logging to track them. Or better yet, you give them limited access so they can't screw anything up.

share|improve this answer
add comment

If you are thinking wordpress you might as well play to it's strong suit and use a backup plugin so your client can have a copy of the database on demand. Makes them happy and they really can't do any harm at the end of the day insofar as they can't easily pave over the app, just play with the data offline.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.