Hiring a programmer or tutor or mentor (PHP/MySQL)

A client has asked us to do a project that has elements just beyond my current abilities. Not too complicated so that I couldn’t figure it out, but enough so that there will be a learning curve. Recent schedule adjustments suggest the timeframe is now more compressed than we’d like.

What to do? Hiring a programmer outright is an option, but given the nature of the client (nonprofit) funds are limited, and segmenting just the programming that’s beyond me may be difficult. I’ve used message boards to ask specific programming questions before, but while I don’t want to abuse the system and come across as a leach, I’m fairly certain that a handful of well thought out questions could pull us through. Given that what they want is fairly straightforward, what I’d really like is to find a programmer who will help guide/occasionally look over my shoulder to point me in the right direction – but if it’s more than answering message board questions, it’s likely to be a compensable arrangement. But if so, how do I figure what’s the ‘right’ price and ‘right’ arrangement?

For background, if it makes a difference:

With no knowledge of PHP and a basic amateur’s knowledge of Access, I taught myself to write a series of survey pages with text, memo, dropdown, and combo boxes. These shunted the data to a simple MySQL database. When I needed information from the database, I either wrote a query in the MyPHP interface or exported data for use in a local Access database. While the survey pages were publicly accessible, the data was for our internal use in preparing our report (hence no Web programming to manipulate the data).

The client wants a simple, publicly available library of documents and an internal content management page. The library is small (less than a hundred PDFs), as are the number of searchable fields. Four fields will be dropdown boxes and limited to one selectable criterion each (e.g., region, subject). They also want it to be searchable by keyword, likely a limited set of keywords they supply, but there is a chance that they’ll change their mind and ask if it the text itself can be searchable.

For the content management page, they want to be able to upload (and possibly delete) a document, and in doing so choose it’s field descriptors and add keywords. They haven’t yet asked for it, but I’m assuming they’ll want the ability to modify a document’s fields if errors are made or keywords should be added.

I realize I’m making one heck of an assumption that this is simple, so feel free to dispel me of this and suggest otherwise.

Thanks,

Rhythm

My advice (sorry, I know this is GQ) is to stop right there and hire someone.

You’re right that “segmenting just the programming that’s beyond me may be difficult” - it’d be a waste of time. What’s also a waste of time is writing half of the code and turning it over to someone else, especially if you’re a newbie because your code might be convoluted. Whatever the case, it’s usually harder for someone who’s proficient to take half the code and finish it than it is to let them do it from the ground up. Especially with databases - someone with a lot of proficiency is going to make a much better db than someone without one, and that’s the base of your project. It’s the most important step.

So, swallow your pride, put a listing up on Craigslist and/or RentACoder, and offer to pay them either 100% of what you are making (make up for it by maintaining and troubleshooting the site in the future) or take 10% or something.

Learning PHP and MySQL, while not impossible, is not the best way to spend your client’s money. Hiring someone to do it right the first time and in half the time that you could do it, is the best use of their funds.

Plenty of reasonably-priced coders out there. Cast a line.

I put together a similar project in the past, and can recommend you some things off the bat:

  1. If you’re comfortable with object-oriented programming, I would recommend using a database abstraction layer such as this:
    MDB2
    Though it does take some time to set up, it simplifies code a great deal, and has methods for common things you would have to code yourself (for example, the autoexecute method: Manual :: Automatically prepare and execute SQL statements )

  2. For the search, I’ll point out that MySQL has some nice text searching functions built-in, provided you index the appropriate column(s). It allows you to sort by relevance among other things. Details here:
    http://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html

Whoops, didn’t see this when I first replied. Yeah, I’d had to agree with ZipperJJ. You are better off hiring someone else.

You’ve gotten good advice here, I can only second or third it.

I’ll try to – not tackle this questionm but – give some kind of wild-ass perspective on it.

First, the caveat: I was an Oracle (relational database stuff) and Hyperion (Essbase, multidimensional database stuff) independent consultant. I have little experience with the software you are dealing with.

That said, in my field, and leaving out hideously expensive places to go on a temp basic (downtown Manhattan/San Fran/etc.), I usually billed between $70-100 an hour…and I worked pretty damn cheap. You could get offshore support for less, but then you’re talking about language and business comprehension problems. YMMV.

It’s a quick hit, though. The consultant does the job and gets out. Not a year-long project from what I gather from your description. Consultant pays his/her own transportation, living expenses, insurance, and on and on. Then he or she is done.

Really, I feel very strongly that this is your very best and cheapest option. Just don’t forget to include in the deal some documentation and knowledge transfer. DO NOT get left with unmaintainable code!

What kept me from either turning this down outright or starting the whole process with a programmer is that I can’t (yet) see what’s overly complicated. I have with other projects — I’m aware of my limits — but I’m not there (yet) with this one. What am I missing?

Database Creation/Normalization
I can’t see this needing more than two tables linked in a one-to-many/inner join relationship. Table One will hold a primary key, document location, document name, and four immutable fields (trust me on their inflexibility. For example, until Gondwanaland reforms, regions will stay the same). Table Two will hold its own primary key, a foreign key, and a keyword field. I’m aware of and practice naming conventions, and am quite liberal with comments.

Setting this up in Access took about fifteen minutes, and that’s including time to plug in fake data for testing. I was able to write (in SQL, not using the Access query pane) a handful of queries to pull data in each and combined fields.
Public Page
Having created survey pages to collect data, I know how to get PHP to display lists, combo boxes, buttons, etc., and how to tie those to a database. I’ve written a few pages that dumped data to the screen, but those were based on permanently defined queries. In doing so, I’ve read through (but not practically implemented) methods to create custom queries based on user input. This is part of the learning, but given that I’m working with so few fields, it doesn’t seem a Herculean challenge.

Internal Page
The data input part of this will work just like the survey pages I’ve done — entering user input into the database. Data validation will be minimal, as the user will be restricted to dropdown boxes and there is no real rule to validate their keywords on. If some do arise, I’ve validated email, telephone, date, and a few other fields before, so I’m aware of how they work and what my options are. Other functions (e.g., delete, change) of the page should function similarly, with just a different type of query behind the button.

Security
I’m not sure where security fits in (now how ‘bout that for a red flag). For the publicly available page, all database connection information will be coming from a non-accessible include. The user will be restricted to dropdowns or checkboxes, and the only text field will be escape-cleaned, etc. What comes back to the user will be a list of links and descriptions, with no other opportunity for input.

Because the internal page will be located on the organization’s intranet, anyone who accesses it will either be an authorized user or their own security problem. Even still, simple validation (are your sure?) is in order, but the client explicitly turned down the idea of tracking who made what change.

So what the heck am I missing? Yes, there are some oversimplifications. Yes, this is not like working in Access, so it would take me more than a couple hours. Yes, I don’t use commands like isset on a regular basis, so refreshing proper placement and use will clearly take me longer than someone who does this all the time. And yes, I fully expect to get into a few areas of oh, now waitasecond… that’s not supposed to be happening. But I’ve done much more complicated things before, (e.g., For a gargantuan United States Cabinet-level agency, I created a property tracking/auditing database distributed to fifteen nationally traveling teams, with a slew of bells and whistles (random selection, forward and reverse audit lists, custom report generation, tons of validation, consolidation of team reports into a final statistical and textual product, etc.) so I’m familiar with what can be done and what I can learn.
Which brings me back to the OP: How to hire someone?

Option 1: Hiring outright
[ul]
[li]From where? Does rentacoder.com work as well as it seems to? [/li][li]How much would something like this take? [/li][li]Am I right in assuming that for an experienced programmer, putting this together would take an hour or two? (I kind of base this on my own experience. A different client wanted us to create a survey for them, after I’d gotten over the initial learning curve. Putting it together, including all formatting took no time at all compared to the first go-round. [/li][li]What do I need to watch out for in the process? Asking for heavy commenting is a nebulous request, but what more can I do?[/li][/ul]

Option 2: Hiring a tutor (for lack of a better term)
Before turning anything over to the client, I’m going to have to understand and be able to work with whatever I turn in. This is where the outright hiring would need lots of comments. I’m not playing with the client’s money (it’s a bulk contract, mostly for editorial and design work, and not hourly), so how I budget my own time does not affect them (as long as we meet deadlines!). And as I’m very confident I could do this completely on my own (with some posts, and lots of book/searching time), this option will help with the speed and frustration-limitation.

I’d love to have a lawyer/accountant-like arrangement with someone. That is, someone who says, “Sure, you can call/write me as much as you want. I charge $X an hour in fifteen minute increments. Before you’re first call I’ll take a few minutes to understand what you’re trying to do.” Does this type of service exist? Someone whose patience is tempered by the notion that they’re being paid for their time. Didn’t something like Keane or Keen or something like that exist once?

So thanks so far, if you can point holes in my thinking I’ll be very grateful. I don’t mean to be argumentative vis-à-vis my capability versus a “real” programmer, it’s just that I can’t see where this stretches my ability to adapt past it’s breaking point. A single major hole will certainly give me that out.

Thanks, especially if you’ve read this far!

Rhythm

There should be no need to re-invent the wheel - There are some free PHP-MySQl-based document/content management systems out there already, that don’t require any actual programming expertise to set up and allow significant customisation - some simpler than most, but most of them should allow you to edit tags and do searches. I know I’ve used Joomla! and Alfresco before, which are more content management systems than document ones, but are highly customisable. But for what you want, look into something like Knowledge Tree which has a free version IIRC.

All I know is that you felt the need to ask us. If I was asked to make this using ASP.NET and SQL Server (two things I haven’t used before at all), I wouldn’t feel the slightest need to worry as I do know what’s involved even if I don’t know those specific languages/products. I know enough to know that I’m safe to put myself in as the lead programmer. Yes, I would need to learn some ASP.NET and SQL Server, but I could do that just looking at the online reference.

I don’t know enough about you and your capabilities, and neither do you it seems. Maybe you do know enough and yet maybe you’ll get halfway through and the world will suddenly close in on you from all sides. There’s just no telling without having enough knowledge to measure it.

I’d always recommend expanding your capabilities. So I’d say that you should definitely look into picking up a PHP, a SQL, and a MySQL book and reading through them. But do that on your free time and in the meantime to hire someone else who has already read those books or something translatable and who knows whether he can do it.

Ok, personal abilities aside (my inner monkey is shouting Can too! Can too! and wanting to prove itself capable), I came here asking about the hiring process and damned if my ego is going to make me ignore sound advice. Besides, the whole point of the OP was about hiring someone, not whether or not I should do this on my own (else I would have posted at the first major hurdle).

I put up an ad on Rentacoder.com (under the same user name). A nice handful of bids have come in, and one or two with good rankings. So, now what? Any pitfalls I should be aware of? We seem to be talking little dollars, but still — I’d hate to get into a position where a time-saving measure ended up putting us in a jam after all.

Also, I am absolutely going to have to be able to read, understand, manipulate, change, fold, spindle, and mutilate whatever code I get. I’m realistic — I don’t expect commenting to the point of being a PHP manual (no terms need to be defined), but a comment per subsection would make it easier to manipulate (e.g., “the following section creates the query”). I put a line in the job description that said, “extensive commenting is required.” Is that about all I can do?

Slightly related — I try and play “real” programmer whenever I can. Among other things, I like to use tbl, frm, etc. prefixes. There are no “rules” about naming conventions, but did adding a line that the database “should be normalized and use standard naming conventions” help? In know this and the above are coder-dependant, but I’m wondering if this is universal enough, or if something goes awry and I need to tap into the arbitrator’s function, if this is of any use. (Note that I realize that there’s likely to be few names, so it may not come to anything).

Lastly, a few bidders seem to have asked basic questions. Not quite pre-bidding “what do you mean by X” questions, but post-bid “what about Y” type things. Is it good form to go through and answer each one, or should I wait until I’m actually selecting the coder?

Thanks for all your insight!

FWIW, here is the description I posted:

I’m not sure on your question about asking for “standardized” stuff in your ad - my company just now hired its first outside consultant, so the “meshing” between him and us has yet to be seen.

But if I might probe you on this - why are you asking for “MySQL query for creation of necessary tables”? Aren’t you going to have the hired person work on your machine? You can save yourself a lot of potential headaches by setting up a MySQL and FTP login for your hired hand and making them work directly on your server.

In addition to making sure they are working with the right connection strings, DB version properties and PHP version properties, you can also “watch” them as they go along and you have the code in your possession. You’re protected if they “walk off” the job or try to wrangle more money out of you at the end of the project.

As for “standardized,” I believe I used it twice. As for standard buttons and whatnot, I don’t need anything other then whatever the browser’s default is. The vast majority of our contract is design and editorial, so whatever code we use will be poured into our templates and customized accordingly. Therefore, no need for the coder to do anything for us in that regard.

As for standardized naming and norming, it’s a basic attempt to ask for some semblance of standardization — even if it’s just internal standardization. I know that there is not absolute naming convention, but if it is that much easier for me to follow and keep track of, the better. Also, given that there is likely to be so few tables and fields, it’s not actually that big of a deal (i.e., I don’t need to tell them how I want things named).

I asked for the query because, well, because I hadn’t made this OP yet. Actually, I’m a bit leery/nervous about giving a stranger, a stranger with programming skills at that, access to our server. Not that I couldn’t set up a directory/FTP account just for him/her, it’s just that such a thing wouldn’t normally occur to me. Though we have our own testing and build space on our client’s machines, I certainly can’t give out our own login information.

I had intended on making all of the connections/includes on my own, since it will be ported around a bit before finding it’s final resting place. But having access to the code on the fly sounds like a good idea, as it offers another layer of protection in addition to rentacoder’s arbitration proceedings. I’m going to go work on setting up a directory/FTP access for them – if they want to stick with the original deliverable of a make table query, no problem, but at least I’ll have this option.

Again, thanks for helping out on this! As it’s obvious, this is my first time hiring someone like this, so there’s bound to be several areas that I overlooked. Again, thanks!

Rhythm