The Internet is full of articles about the drawbacks of outsourcing software development and how ordering such services can get you into trouble. However, what those articles are not telling you is the real source of the problem: the lack of skills and low quality services offered by some of the “professional” offshore companies. The decision to either hire a new employee or outsource the function is most of all a question of how you prefer to pay for those services, while what you should be really concerned with is the quality of the programming services and the final product. This is where the real line is drawn between people, who can professionally handle your project and those who will only pull the wool over your eyes.
Now you probably wonder: “How do I find the right kind of developers?”. There are no easy answers to this question and we do not offer our services as a remedy for all possible problems with software development (in fact, anyone who makes such promises is probably a crook). What we will focus on here is how low quality software development services can damage not only the final product, but also affect your budget, reputation and lead to problems you have never even considered. And most importantly, we will help you to avoid such problems as:
- difficulties in supporting source code
- software, which needs re-coding every time you want to add a new feature
- costly product updates
- poor software performance
- troubles with getting ordered software on time, because developers can’t keep the deadline…
…and other problems, which you do not have to experience, if you find the right team. Unfortunately, too many people get fooled by impressive presentations and cheap prices, when what they should really be doing is evaluating the skills of the team they want to hire.
When Things Go From Bad to Terrible
If you feel a false comfort and think that the problems we have just mentioned can’t be happening that often, we have bad news for you: it is not an uncommon thing for clients to receive software, which looks good at first glance, but is full of bugs. And it is a shameful standard that developers do not keep the agreed deadlines.
However, that is not the worst thing that could happen. The real nightmare starts when you discover that in order to update your software, you have to code it from scratch. The software might seem fully functional, but when you want to change something in the code, you suddenly discover that it is full of kludges and hacks, which need to be re-coded properly. Be prepared that this will be an expensive service and might take even half of your entire budget!
Many of those problems occur when you switch from one development team to another. It is then that you might discover that there are problems with updating libraries or the new feature you have just implemented messed up the entire architecture of the product. You end up having two choices: you can either stick with your old development team, even though you already know that they are not capable of delivering good quality products, or you can hire new experts and pay them as much as necessary to fix all problems and handle updates in the future. There is one, simple way to avoid all these problems: hire only professionals, who have real skills and knowledge.
How to Tell a Good Programmer from a Bad One?
Now you got to the point when you start to realize that the success of your entire venture relies not only on the skills of your programmers, but also on your ability to recognize a true, professional programmer when you meet one. If you are not an expert in programming yourself, this might sound like an impossible challenge, but do not worry, there are more than a few signs that even amateurs should be able to see right away.
First of all, good coders always want to know as much as possible about the project and discuss important details with you. They will be keen on arranging a meeting, exchanging several e-mails and discussing early drafts of the project, before they start to work on it. Bad coders almost never do that. They will probably show you the same presentation they show to all their clients and they won’t have any questions to ask. If a programmer is ready to start working on your software after just one, brief conversation, do not expect to receive a quality product.
Good coders always have their own area of expertise, they are aware of their limitations and if they do not know how to handle your project, they will be honest about it and suggest other possible solutions. Bad coders, on the other hand, often try to present themselves as jacks of all trades, but in reality they are masters of none. If the portfolio of the development company features no project, which is similar to yours, but the developers keep assuring you that they are able to make it all work, they are probably lying or are not knowledgeable enough. Coders with little experience who are honest about it might suggest hiring a different team to carry out the difficult part of the project, but we have already warned you about the possible consequences of passing the project from one team to another. You should avoid it at all costs and frankly speaking, it saves you a lot of money and sleepless nights, if you simply hire someone with the right kind of expertise for your type of project.
You should pay a lot of attention when the team starts to mention the technologies they will use to complete the project. Now, we understand that if you are not an expert in programming, you might have problems with telling the difference between Java and C++, but you can always make some notes and Google the names of technologies or tools your development team wants to use. If the latest release of the mentioned software is a few years old and you can barely find any good information about it, stay away from this company.
There are also tools and technologies which, if mentioned in the conversation, should be treated as a warning sign. For example, Clojure, Lisp or Haskell are interesting programming languages, but they are so rarely used that you might have a problem with finding an expert to make any future updates to your software.
A good development team will use version control systems, such as Mercurial, SVN or GIT. Bad coders will use none VCS whatsoever, or they will go for outdated and unorthodox ones, such as Darcs, BZR or CVS. A good development team will also use professional ticket tracking software, such as Redmine, Jira or Bugzilla.
Avoid companies, which ask you to buy expensive software in order to complete the project. If there is a real need for buying it, your developers should present strong arguments why other types of software are not enough. You should also be suspicious of coders who do not want to discuss technologies and libraries they plan to use. They probably have no idea how to handle your project or they are used to serving clients, who are unaware of the poor quality of their final products.
A good programming team is the one, which cares about every stage of the development process, from planning to coding, reviewing, testing and updating the final product. It is not premature to start discussing all of that during the first meeting. A good development team will be eager to set milestones that help you monitor their work progress and they will present their own quality control methods, which should include code reviews and using a test server.
Experienced programmers will use a method called continuous integration, which is especially useful when there are a few people working on different parts of the code simultaneously. Continuous integration means that those separate parts are integrated several times a day to assure their compatibility and detect integration problems as early as possible. Bad coders, on the other hand, will be only interested in setting a deadline, which they probably will not be able to keep, and discussing the payment, which, even if their offer is competitive, will probably be wasted on a poor quality product. They will try to convince you that you do not need code reviews and they won’t even mention their usual task processing flow. They will tell you that a test server and writing unit tests will only increase your budget and you do not really need them. In fact, you desperately need them, because without proper testing you are at a high risk of receiving software, which is full of bugs and all kinds of errors. In the best case scenario, your developers will experience those bugs first hand and they will not be able to keep the agreed deadline. In the worst case, your customers will be the ones, who have to deal with those software bugs. This can ruin your company’s good name and have a negative effect on your sales.
A Couple of Questions to Ask
To sum up, now when you know what kind of developers you should avoid, let’s look at a few examples of questions you should ask your developers as early as possible, in order to evaluate their skills and knowledge:
- What kind of technologies/tools are you planning to apply to the project? What makes them the best in your opinion?
- What kind of experience do you have with these technologies/tools? Can you present any examples of completed projects to which you applied these technologies/tools? Are there people in your team with broad experience and knowledge of these technologies/tools?
- Can you describe your development process stage by stage?
- How often do you plan to communicate with our company and report your progress? Do you plan to set milestones for the project?
- What are your standard quality control practices?
- How are you going to review the code?
- Do you practice continuous integration?
- Do you plan to use a test server?
- Which version control systems do you plan to use for this project?
- What are your technical requirements for server, hosting, operating system, etc.?