I'd guess most of these type of services are built upon meta data.
Coder A has skills PHP, JS, HTML5 etc
And Client Z needs one or more of those matching skills.
The trick is to have all Clients and all Coders only ever being to input skills (tags, meta data) which are clean and conform to your naming systems.
The idea of tags then builds up to include Experience length, number of projects, projects on time, feedback and so on.
Physical proximity may also be a factor.
Doing this via pick-lists is easy enough, but that may not be what Clients want to sit and do.
At some point you may then want to do some natural language processing to extract matching skills** with normal text input, as you may find in a word doc spec for example.
**Matching skills may then open out to include synonyms. eg CVS may intone the skill GIT, git etc, so you'd either have to find a way of teaching it these, or a means of inferring these things through NLP and AI.
I only worked on one system similar to this, and it seemed pretty easy to get reasonable results merely based on matching skills and proximity (show nearest qualified Coders on a map etc).
You might be best to list all the factors you want to be taken into consideration - will that differ much from your existing site?
Where does your existing site fall down then?