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.

Thanks to the great help of this site and SO, I've been able to make a prototype of a software I want to sell but unfortunately although the prototype works I think my code quality is very low. I didn't use much OOP or design patterns so although my code is understandable to me, I think a normal developer would faint if they had to read it.

So I wanted to hire a developer to make it a bit more better quality and improve some of my implementations of API's that I may have not done correctly. I'm having problems hiring a developer though.

I have met 2 developers and had them read my software specs.The problem is, they lacked my business's domain knowledge(which is completely understandable and no biggie) but they also lacked knowledge of the underlying tech systems I used such as Hadoop, Hbase, Cuda, etc..I spent alot of time explaining map/reduce, bigtables and other technologies I used. I thought it was common knowledge because of my interactions with people on this site but the people I met with mentioned they never had to deal with these things so they didn't know it.

My question is, for software projects that are hiring contractor developers is it a danger if the developer does not have experience with the underlying technologies? or can a general developer who is accomplished in another area realistically pick up new technologies? I did a very very quick back of envelope calculation and I think the upfront costs would be similar if I hire a student or developer with no experience in my technologies who will work many hours versus hiring a highly experienced developer who charges double but finishes in half the time but what other risks should I be considering or worried about? Also, should if I do hire a generalist, should I be paying for the time it takes them to learn hadoop or cuda if they are contractors(seems to make business sense but not sure how fair it is to them if they do not use the skill again).

I'm a bit confused so any suggestions would be great.

share|improve this question
1  
"or can a general developer who is accomplished in another area realistically pick up new technologies?" Well of course, otherwise no new technology since decades ago would have ever caught on. –  DarenW Oct 9 '12 at 4:55
5  
I think a normal developer would faint if they had to read it - That's some honesty right there. –  Joel Etherton Oct 9 '12 at 11:29
    
What programming language? –  GlenPeterson Oct 10 '12 at 1:22
1  
"Hadoop, Hbase, Cuda, etc..I thought it was common knowledge"...I am surprised you think so. I may be wrong. I will be more surprised if I were. –  Emmad Kareem Oct 10 '12 at 6:25
    
Developers that have the inclination to work "after hours" do so on their own terms- usually working with peers on pet projects- and almost always have low tolerance for poor code and non-programmers doing programming. It's like the asking a mechanic to come over (after his 9-5 job ends) and help put your car back together after you attempted some repairs in the weekend. –  mattnz Oct 11 '12 at 3:33

6 Answers 6

is it a danger if the developer does not have experience with the underlying technologies?

Yes. (Learning takes time, and making mistakes is often part of the process.)

or can a general developer who is accomplished in another area realistically pick up new technologies?

Yes. (Picking up new technologies is something that generalists do all the time. You don't last very long as a programmer if you can't learn new things.)

I think the upfront costs would be similar if I hire a student or developer with no experience in my technologies who will work many hours versus hiring a highly experienced developer who charges double but finishes in half the time

Note that there's a big difference between 'no experience with technology X' and 'no experience, period'. It's one thing to have to learn some new framework or language, and quite another thing to start your first job as a developer and not have someone with some experience to point you in the right direction.

what other risks should I be considering or worried about?

Decisions that get made during the design and development process can be difficult and/or expensive to change later. A smart, experienced developer may save you a lot more than just development hours. On the other hand, someone who's really good at what they do will be able to charge accordingly.

I'm a bit confused so any suggestions would be great.

Perhaps Joel Spolsky's article will help: The Guerrilla Guide to Interviewing. In a nutshell, Joel says he looks for two things: 1) smart, 2) gets things done. Beyond that, I'd suggest looking for someone who you can work with, and who will understand what you're trying to accomplish and work toward that with you.

share|improve this answer
    
"You don't last very long as a programmer if you can't learn new things." Amen. –  GlenPeterson Oct 12 '12 at 12:05

Yes. Both.

Ideally, you could find someone in the middle who would need a leg up, but not for someone to carry them on either technical or domain knowledge. However, many forces affect the staffing problem you are trying to solve.

Why is there a Domain Skill Shortage

Developers are an itinerant group, moving from application domain to application domain as the market demands. If something is hot, ten or maybe a hundred or even a thousand companies will chase it until competition drives all but a handful of players out of the market. Consequently, incentives for developers to go deep into your business domain knowledge pre-hire is zip. If you are doing something fairly novel, you won't find others with domain knowledge. If you have competitors, or particularly ex-competitors, you should not have to give up your quest for domain experience.

If you hire a hot shot developer, they may be most interested in developing portable skills, so you may still be forced to carry a lot of weight for domain knowledge. Perhaps you should consider either getting a system engineer to document feature related domain knowledge for use by the developer. Perhaps between smart and gets things done, you will pick someone strong in the gets things done. If you can find a developer who is interested in being with you for a while, learning both your business and your technology, who places needs of your company about equal with their own, that may be better long term than the smart guy whose plans involve climbing up and, pretty frequently, out.

High Demand Skills

If you are doing something that is in high demand, you must do much more to attract candidates. If your visibility is low and what you have to offer in return is less stellar than the competition, you may either need to pay a lot more or grow the talent you need from a pool of candidates with other skills.

Domain Skills or Technology Skills?

In the question you mention several skills your candidates lack including Hadoop, Hbase, Cuda, map/reduce, and bigtables. I am not sure I would call these domain skills because they are based in technology rather than the specifics of making a product that is industry specific to your customers. I suspect that each of these skills is portable and will still be valuable after your particular industry has automated and you have dominated, found a niche, or moved on to something else.

Technical Skill Growth Attracts Good Candidates

The advantage of hiring and training for technology skills is that the smart, gets things done, aggressive, career oriented developer who trains themselves will jump at the chance to learn something with a long and rewarding future. If you maintain challenges and a manageable new technology mix, many of the developers you want will embrace being one your team for both short term and long term mutual benefit.

share|improve this answer

I guess if a novice can do the exact same things for half the price in twice the time, it all works out. Realistically, there are going to be problems your novice won't solve and pitfalls they can't avoid. I don't think you'll get similar code. You're going to end up lowering your expectations.

This is more likely to be the case when it comes to design. Pay the extra fee for the experienced developer to work on the design. You can use the novice to help with the coding volume if you think that's cost effective.

share|improve this answer

You are really asking for a code review and/or training. Especially for code review, a group of seasoned programmers with diverse backgrounds is best. When they all agree, do what they tell you. When they all have a different opinion, you are doing just the right thing. :-)

If you use mapReduce, CUDA, and Hadoop and want a single reviewer, hire the expert. My first choice would be to look for someone with experience in addition to school. Also consider training yourself, joining user groups, etc. You may be able to take a few key individual questions and show them to friends if you have that kind of friend.

Does Programmers.StackExchange let people post code for critique? If so, I'd pick no more than a page. Pick something you know is wrong, but don't know why.

What programming language are you using?

share|improve this answer
    

is it a danger if the developer does not have experience with the underlying technologies? or can a general developer who is accomplished in another area realistically pick up new technologies?

A developer can pick up technologies (and they will, eventually) but I don't think that meets your requirement.

You have working software, but you want it reviewed, refactored, and perhaps even rewritten. You really need an expert or at least someone experienced in a couple of your technologies to be able to do that, because although there are such things as software patterns, implementations vary between platforms and frameworks due to the uniqueness of the platform and framework.

You'd solved the business problems and mastered the domain, and you've implemented the software. You are now after technical guidance to allow your application to scale and live a long and healthy life. You want someone who has done this in a similar system, or using similar technology.

Different platforms often require completely different mindsets and experience. I'd guess you are working on a big data / parallel computing type project? A web developer or an integration developer should be able to rewrite your prototype and have it work as well, but why assume they could do so any better than you?

Don't hold out for the perfect person, because they might not exist, but your developer should be familiar with at least some of the technologies and concepts you're using, or, as they say in job advertisements, demonstrate the ability to quickly learn new technologies and concepts. If they haven't heard of Hadoop or MapReduce then the alarm bells should be going off - big time.

share|improve this answer

I'd take total lack of familiarity with what Hadoop/MapReduce even are as a warning sign that the developer might not be making any attempts to keep up to date.

That said, that's just a sign, not a no-hire. Give them FizzBuzz or something of that nature, and if they get past that show them your code and ask for a critique. Perhaps choose something with a bug deliberately, but also something you think is ok, as that discussion will be more interesting.

share|improve this answer

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.