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.
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.
0
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.
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.
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.
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?
1
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.
It is hard to give advice on this. Only some thoughts:
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?
Form what you have written in your introduction:
my code quality is very low
I didn't use much OOP
I wanted to hire a developer to make it a bit more better quality and improve some of my implementations
Answering this should be a no-brainer:
If you hire a developer with no experience, it is very unlikely, that you are able to increase code quality. A programmer with no experience is no help.
Although it might be cheaper in the short run, to hire a novice, you are paying later!
what other risks should I be considering or worried about?
Do not make the mistake to calculate only the costs, to get you and your product up and running. More important are the costs of maintenance.
As a direct consequence, of what I said in the previous paragraph, you have to consider, what is called Technical Debt. As you said: the codebase is in no good shape – so to say, there is already technical debt. And with hiring unskilled workers, you are increasing the debt. Perhaps in some years from now, you end up with an unmaintainable codebase and have a) to start over again and b) loose eventually customers, which equals in both cases: loss of money.
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).
Clearly: Yes! I do not see any reason, not to do this. They need the knowledge, you need them to have it – so: yes.
If they are good developers, they should easily get grips on new – or at least new to them – technology. Chances are high, that if they take their job seriously, they have technologies on their radar, meaning, they do not actually have done anything productive with the technology, but know the how and when– to use it.
I have to admit, having no knowledge of Hadoop for myself, but I know, when it might be a good solution and have a fair understanding on how it works in theory; so I would say, that it should not take long to get me productive.
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.
To explain your business should be the easiest part for you, since you know best. You can not expect everyone to know your business as good as you or even know it at all.
The same goes for technology:
There are a bazillion of frameworks, languages, toolkits out there – it is unlikely to find (m) any developer(s) knowing them all
Of course you could say: $Technology_du_jour is hyped in the media, so I expect every developer having a working knowledge. But that is not the reality.
For me as a developer my job is a tradeoff: I have a working knowledge of some languages and some technolgies. This makes me flexible in many ways. If I have to, I am able to develop an in-depth-understanding of my current tools, but as seasons go by, tools and languages do.
tl;dr;
1) If you can, hire an expert in your domain and in the desired technology
2) If you can’t,
2a) Look for a generalist with some project expertise, which may or may not have knowledge of the used technologies in your project
3) If there is really, really nobody else: hire a student.
You have technical debt, do not increase it!