How to Choose a Software Development Company
A practical guide to evaluating and selecting a software development company - the questions to ask, the red flags to watch for, and the process for making a confident decision.
Why This Decision Is Difficult
Choosing a software development company is genuinely hard. The market is opaque, the quality signals are unreliable, and the consequences of making the wrong choice are significant. Unlike buying a physical product, you cannot evaluate software development capability by examining the finished goods before purchase. By the time you know whether you made a good choice, you are already committed.
The difficulty is compounded by the fact that many of the proxies people use for quality are unreliable. An impressive website does not reflect the quality of the development work. A low price does not reflect poor quality - though it often should. A high price does not guarantee good quality. Portfolio items tell you what someone has built but not how well they built it, how smoothly the project ran, or whether the client would work with them again.
This guide sets out a more reliable process for evaluating software development companies - one that looks at the things that actually predict a good outcome rather than the things that are easy to measure.
A note on bias: this guide is written by a software development company. We have tried to write it in a way that is genuinely useful regardless of whether you end up working with us - including being honest about what makes a bad client engagement as well as a bad developer.
Understanding the Market
The software development market is enormous and varied. Before you can choose well, you need to understand the different types of providers available and what each is best suited to.
Freelance Developers
Individual developers working independently. The quality range is enormous - from highly experienced senior engineers with decades of production experience to inexperienced developers who are learning on the job. Freelancers are typically cheaper than agencies but carry more risk - if the developer gets ill, moves on, or loses interest, your project stalls. They are best suited to smaller, well-defined projects or to augmenting an existing team.
Small Boutique Agencies and Consultancies
Small teams of typically two to fifteen engineers, often with a specific specialisation or approach. Quality is highly variable but the best boutique agencies offer a combination of senior experience and personal attention that larger agencies cannot match. The principal or founder is often directly involved in delivery. This is the category that includes OLXR.
Mid-Size Agencies
Teams of fifteen to one hundred or more engineers, with dedicated project managers, account managers, and often specialised practices. Quality is more consistent than smaller agencies but personal attention from senior engineers is less guaranteed. The person who sells the project may not be the person who builds it. Better suited to larger projects with defined scopes.
Large Enterprise Agencies
Major consulting firms and large agencies with hundreds or thousands of engineers. Appropriate for very large, complex engagements that require significant team scale or specialist practices. For most small and medium businesses, the overhead, cost, and impersonal nature of large agencies is not justified by the scale of the project.
Offshore and Nearshore Development
Development teams based in lower-cost countries, engaged either directly or through an intermediary. Potentially cheaper per engineer-day but carrying additional overhead in communication, coordination, and quality management. Works best for well-defined projects with clear specifications and high organisational tolerance for the coordination overhead.
What Actually Predicts a Good Outcome
Before getting into the evaluation process, it is worth being explicit about what actually determines whether a software development engagement goes well. The research and practical experience both point to the same factors.
Technical competence at the right level
This seems obvious but is worth stating clearly: the most important factor is whether the people actually doing the technical work are capable of doing it well. Senior engineers make better architectural decisions, write more maintainable code, and anticipate problems that junior engineers discover after the fact. A team with the right technical competence completes projects more reliably, at lower total cost, and with better long-term outcomes.
The difficulty is that technical competence is hard to assess without technical knowledge. The evaluation process below includes approaches that help non-technical buyers assess technical competence without needing to be engineers themselves.
Clear communication and honest expectation-setting
Most software project failures are not technical failures - they are communication failures. Requirements that were not clearly understood, problems that were not surfaced until they became crises, scope that expanded without explicit agreement, timelines that were unrealistic from the start - these are the most common causes of poor outcomes.
A developer who communicates clearly, who asks good questions about requirements, who is honest about timeline and cost uncertainty, and who surfaces problems early is more likely to deliver a good outcome than a technically superior developer who communicates poorly.
Understanding of your business context
Software that is technically well-built but does not fit the business context it is built for does not deliver value. The best development partners invest time in understanding your business, your users, and your constraints before proposing solutions - and they push back when what you are asking for is not what you actually need.
Appropriate ownership and accountability
The person or company building your software should take real ownership of the outcome - not just the execution of tasks. A developer who treats your project as a list of specifications to execute, without any accountability for whether the result actually works for your business, is less likely to produce a good outcome than one who takes responsibility for the outcome rather than just the process.
The Evaluation Process
With those success factors in mind, here is a structured process for evaluating software development companies.
Step 1: Define what you are looking for
Before approaching any developers, be clear about what you need. This includes:
- The type of work - web application, mobile app, integration, internal tool, or some combination
- The technology stack, if you have requirements or preferences
- The scale and complexity of the project
- Your timeline and budget range
- The level of involvement you want from the development partner - execution of a clear specification, or collaborative design and build
- The ongoing relationship you are looking for - one-off project, long-term maintenance, or something in between
Having clarity on these questions before approaching developers makes the evaluation process more efficient and produces more comparable responses.
Step 2: Identify candidates
There are several ways to find development companies to evaluate. The most reliable is referral from someone whose judgment you trust who has worked with the developer and had a good experience. The second most reliable is industry directories that include verified reviews from real clients - Clutch is the most established for software development.
Website searches, social media, and job boards produce many candidates but lower average quality. The market is large and undifferentiated at this level - you will need to apply more filtering.
Aim for three to five candidates to evaluate seriously. Fewer than three limits your comparison. More than five creates significant evaluation overhead without proportional benefit.
Step 3: Initial screening
Before investing significant time in any candidate, do initial screening to filter out obvious poor fits:
- Do they have relevant experience - projects similar in type, complexity, or technology to yours?
- Are they the right size for your project - neither too large to care about it nor too small to have the capacity for it?
- Does their communication in initial contacts give you confidence - responsive, clear, asking sensible questions?
- Do they have verifiable client references - real companies you can contact?
Candidates who fail these basic screens should be eliminated before investing time in detailed evaluation.
Step 4: The initial conversation
The initial conversation with a development company tells you a lot if you pay attention to the right things. Notice:
Do they ask good questions? A developer who asks detailed questions about your requirements, your users, your constraints, and your existing systems before proposing anything is demonstrating genuine interest in understanding your problem. A developer who moves quickly to proposing solutions, quoting prices, or talking about their capabilities is prioritising the sale over the understanding.
Are they honest about uncertainty? Good developers are honest about what they do not know yet and what will only become clear after more detailed investigation. Be sceptical of developers who quote confidently without adequate information - they are either guessing or telling you what you want to hear.
Do they push back on anything? A developer who agrees with everything you say and never suggests that your approach might not be optimal is either too eager to win the work or not engaged enough with your problem to notice. Good developers ask whether you have considered alternatives, point out potential problems with your approach, and are willing to say things you might not want to hear.
Can they explain things clearly? A developer who explains technical concepts clearly and in terms that make sense to a non-technical person is demonstrating both communication skill and genuine understanding. Technical jargon used to impress rather than to clarify is a warning sign.
Step 5: Evaluating technical capability
For non-technical buyers, assessing technical capability is the hardest part of the evaluation. Here are approaches that work without requiring technical expertise.
Review their portfolio critically. Portfolio items tell you what someone has built. Look for: projects similar to yours in type and complexity, projects that are still live and functioning, projects where you can see the quality of the user experience (even if you cannot see the code), and projects where the developer can speak knowledgeably about the technical challenges and how they were handled. Be sceptical of portfolio items that are vague about the developer's specific contribution, that are presented without any detail about the technical challenges involved, or where the developer cannot answer specific questions about how the project was built.
Speak to references. Speaking to real clients who have worked with the developer is the most reliable way to assess both technical capability and working relationship quality. Ask references: Did the project deliver what was promised? Was it on time and on budget? How were problems handled when they arose? Would you work with them again, and why? What would you do differently? Be persistent about getting references. A developer who is reluctant to provide references, or who only provides references they have curated carefully, should be treated with caution.
Ask a technical friend to review their code. If you have access to a technically capable person - a friend, a colleague, a CTO - asking them to review a sample of the developer's code can reveal quality signals that are invisible to non-technical buyers. Not all developers will share code samples, but the best ones are often willing to show examples of their work.
Ask specific technical questions about your project. Even without technical expertise, you can ask specific questions about how the developer would approach your project - the database design, the authentication approach, the integration strategy - and evaluate the quality of the answers based on how specific, how thoughtful, and how honest they are. Vague or generic answers suggest limited thought has been given to your specific situation.
Step 6: Evaluating the proposal
A formal proposal - a written document outlining the proposed approach, scope, timeline, and cost - is a useful evaluation tool if you know what to look for.
Is it specific to your project? A good proposal demonstrates that the developer has understood your specific requirements and is proposing a solution designed for them. A generic proposal that could apply to any project of a similar type suggests the developer has not invested sufficient thought in your situation.
Is the scope clearly defined? A good proposal defines the scope clearly enough that you know what is included and what is not. Vague scope in a proposal leads to disagreements about scope during the project.
Is the breakdown of effort credible? A good proposal breaks down the cost by feature, phase, or area of work. This allows you to assess whether the time implied by each component seems reasonable and to identify where assumptions differ from your understanding of the requirements.
Is the timeline realistic? Based on the scope and the team size, does the timeline seem credible? A timeline that implies very high development velocity for a complex project should be questioned.
What is and is not included? Explicitly check what is not included in the proposal - particularly testing, deployment, documentation, and post-launch support. These are commonly omitted from proposals to keep the headline number low.
Red Flags to Watch For
Certain patterns in how a developer presents themselves, communicates, or proposes work are reliable indicators of problems.
Quoting without adequate understanding
A developer who provides a quote without asking sufficient questions about your requirements is either guessing at the scope or has a standard answer that they apply to all projects of a similar type. Either way, the quote is unlikely to be accurate.
Prices that seem too low
Very low prices are not a sign of efficiency or value. They are almost always a sign that the scope assumed is narrower than you intend, the quality will be lower than acceptable, the experience level of the developer is insufficient for the project, or the quote is designed to win the work with the intention of adding costs later. The market rate for experienced senior engineering is what it is. Prices significantly below market rate should be treated with extreme scepticism.
Inability to explain past work in detail
A developer who cannot speak specifically about the technical decisions made in their portfolio projects, the challenges that arose and how they were handled, or the outcomes achieved is either not the person who did the work or did not understand it well enough to own it. Either is a problem.
Reluctance to provide references
Developers with genuinely satisfied clients are usually happy to connect you with them. Reluctance to provide references - or providing only carefully curated references with whom contact is controlled - suggests that unfiltered client feedback might not be favourable.
Overselling and under-questioning
A development company that spends most of the initial conversation talking about their capabilities, their process, and their past successes - rather than asking questions and listening to your situation - is prioritising the sale over the understanding. The best development conversations are dominated by questions about your project, not presentations about the developer.
Vague scope in proposals
A proposal that describes the scope in broad terms without adequate specificity is either poorly thought through or deliberately vague to avoid accountability. Either way, it is likely to lead to scope disagreements during the project.
No post-launch plan
A proposal that does not address what happens after launch is ignoring a significant part of the engagement. Software requires ongoing maintenance, and a developer who does not plan for this either does not intend to provide it or has not thought about it.
Green Flags to Look For
Conversely, certain patterns are reliable indicators of a good development partner.
Asking more questions than making statements
A developer who spends the initial conversation asking detailed questions about your requirements, your users, your constraints, and your existing systems is demonstrating genuine interest in understanding your problem before proposing a solution.
Honest about uncertainty and limitations
A developer who is explicit about what they do not know yet, what will only become clear during detailed scoping, and what the risks and uncertainties in the project are is being honest in a way that serves you better than false confidence.
Willing to say when bespoke is not the right answer
A software development company that tells you honestly when an off-the-shelf solution would serve you better than bespoke development is demonstrating the kind of honesty that makes for a good long-term relationship. Developers with this level of integrity are rare and valuable.
Specific and credible answers to technical questions
A developer who answers specific technical questions about your project with thoughtful, specific responses is demonstrating genuine engagement with your situation. Generic or evasive answers to specific questions suggest the engagement is superficial.
References who give specific, positive answers
References who speak specifically about what the developer did well, how problems were handled, and why they would work with them again are more credible than those who give vague positive endorsements.
A clear post-launch plan
A developer who addresses ongoing maintenance, support, and the long-term relationship in their proposal is thinking about the whole lifecycle of the software rather than just the initial build.
Structuring the Engagement
Once you have selected a development company, how you structure the engagement significantly affects the outcome.
Invest in upfront scoping
The most valuable investment in any software project is thorough upfront scoping. A proper technical specification - produced collaboratively between you and the developer before development begins - produces better outcomes than starting development with vague requirements. It costs money and time, but it saves significantly more money and time over the course of the project.
Define success criteria clearly
Before development begins, be clear about what success looks like. Not just the features that will be built, but the outcomes that matter - the business problems the software will solve, the metrics that will improve, and the user behaviours that will change. Having clear success criteria makes it easier to make decisions during development and to evaluate whether the outcome was successful.
Structure payment around milestones
For fixed-price projects, structure payment around defined milestones tied to working software rather than time elapsed. This aligns the developer's incentives with yours - they are motivated to complete milestones rather than to run out the clock. Avoid large upfront payments that are not tied to deliverables.
Establish communication expectations early
Agree on how you will communicate during the project - how often, through what channels, and what information you will receive at each update. Regular, structured communication reduces the risk of problems accumulating unnoticed and keeps you informed enough to make good decisions.
Be an active client
Good development engagements are collaborative. The best outcomes come from clients who are engaged - who respond quickly to questions, who participate in design decisions, who review and provide feedback on progress regularly, and who are available to make decisions when development reveals that the original plan needs to change. A passive client who leaves the developer to interpret ambiguous requirements independently is more likely to be disappointed with the outcome.
Looking for a Development Partner?
OLXR works with businesses across the UK and Isle of Man on bespoke software projects. We are happy to be evaluated against any of the criteria in this guide - including providing references from real clients.
Let's TalkFrequently Asked Questions
Ready to Have the Conversation?
OLXR provides a free initial consultation for businesses considering bespoke software. We will ask the right questions, give you honest answers, and tell you clearly if we are not the right fit.
Let's Talk