Outsourcing software development is popular but not easy. What might stop it from being successful?

Originally presented in Curiosum CTO Michał Buszkiewicz's webinar.

Table of contents

    Why, how & when to outsource?

    According to Clutch.com, outsourcing services are a popular and profitable idea. In 2019, about 40% of small and medium-sized companies outsourced business processes and another 5-10% are ready to do so. Larger companies outsourced software development much more than that, so it's quite a big thing.

    Why do the companies outsource in first place? There are 3 key benefits of outsourcing software development services.

    The first is to obtain expert help, the second is to increase efficiency and the third is to make costs lower.

    • Expert help, because software outsourcing services allows us to staff augmentation with as many full-time experts as we would like.

    • Increased efficiency, because by increasing expert knowledge, we have the opportunity to expand the business faster and increase the company's capabilities.

    • And cutting costs because hiring people is one of the biggest costs of any entrepreneur.

    Regarding these 3 reasons, outsourcing services seems to be just what you might need, right? This is where the IT industry comes in, which is one of the top outsourcing industries around the world.

    But on the other hand, software development outsourcing can be a difficult art in practice. It is like dancing together with a totally independent business organism, which generates a number of risks. This article was created to help you understand what to look for when you start working with software outsourcing companies.

    The 5 main reasons why software development outsourcing can go wrong:

    1. Expectations vs. Reality
    2. Tech Choices
    3. Time Management and Trust
    4. Communication Isues
    5. The Human Element

    Reason One: Expectations vs. Reality

    Let's begin with the diagnosis of what can go wrong. Outsourcing the aspect of software development is such a broad concept that is very common to discover completely different points of view about it between two companies in the same industry.

    Who is responsible for what? How do we work and communicate?

    So, the first step should always be to ask the partner exactly how they work and what are their experiences with working as an outsourcing partner.

    If you need more than a reassurance about the quality of services, or you're not satisfied with mere references and portfolio, it’s a good idea to ask to contact previous clients directly. This is a real opportunity to share experiences and fears with the team, who previously worked with your potential business partner.

    We know software outsourcing is flexible in form, but some common mistakes tend to be made.

    Unrealistic scheduling - how can we deal with this? Well, when assessing the scope of work and making assumptions about the time necessary to finish (a risky word in itself) a development project, it's easy to miss the mark. This is absolutely no surprise as estimates are always wrong to a certain extent. But you can protect yourself from adverse consequences in several ways.

    Make sure you pick the right partner. One who is inquisitive, won’t be afraid to ask questions, and will test you a bit. A company that lances at your scope and immediately says "yeah, let's do it" is a welcome sign, but you have to understand software outsourcing development companies as well.

    You want to find a comfortable common space with your partner where you know that you understand the scope of your project well. This is something that usually relies on strong leadership in an outsourcing company as designing, communicating, and keeping to schedule can be difficult. So, while planning, you need to understand that the planning process has to achieve some specific goals:

    • Software estimates should be well documented so that we can used them for planning and project tracking.
    • Activities and commitments are well documented.
    • The relevant stakeholder groups and individuals have agreed on their scope of involvement in the software project.

    Remember: not every company out there is a tech company, or has a certified Scrum master or IT project manager with software development experience.

    Short-term thinking and disregarding future technical debt

    There are times when short-term strategy is good, but it usually lasts for a moment. I wouldn't say it's a disregard for technical debt.

    Maybe there are good reasons why a long-term strategy is not adopted in some web app or mobile app projects. However, technical debt, just like financial debt, accumulates interest. The longer it is unpaid, the more you have to pay in the end. The longer a project is developed without proper focus on code quality and refactoring when needed, the bigger the technical debt will be.

    Cost versus time curve in an accumulating technical debt scenario

    Remember technical debt can arise at any moment as the technological world is moving forward.

    Technical debt will appear whether you want it or not, and you have to keep this in mind when you start a new project.

    Regardless of the degree to which you’re involved in technical matters in the project, the mere awareness of the concept of technical debt is crucial to the success of application development.

    Your team doesn't always have to use the fancy new tech. It has to use the right tech.

    Considering technical debt, which can be a big problem (especially in industries with restrictive regulations or complaint burdens, where cybersecurity is key in managing data and services) it is worth considering this issue in cooperation with software development outsourcing. The investment will be bigger, but the benefits of such thorough "cleaning" will be worth it.

    Companies large and small are struggling with technical debt all the time. A good example is Twitter’s transition from Ruby to Java (Scala) - they struggled with maintaining a sustainable real-time search feature and turned to Scala for – surprise, surprise – scalability and fault-tolerance.

    Technical debt isn’t always critically alarming, so be sure how deep you are and what issues it may cause in the next 3-4 years.

    The last „expectation vs reality” case is what’s also called the sunk cost fallacy , which can be described as an aversion to a “clean slate” start. Without going into detail, this applies to both of the above examples.

    Some organizations have lost the track, have no foundation or idea how to continue a project or develop the software they currently have. However, the cost of the change process still seems too high.

    There's no denying that a grand cleanup or a big rewrite is a costly thing to kick off, but there needs to be an awareness that it's often the only way of minimizing losses in the long term.


    • Plan stuff together with your outsourcing partner. Get him involved much earlier to plan your application development and design the process well.
    • Be open to suggestions about what tech stack to choose for your software development project. Stay open-minded to new technologies so that you know what results you can expect.
    • Some things do not need a face lifting; they need to be torn down to the ground. Just like old buildings with poor foundations, they are replaced with new ones based on new knowledge and better construction. The same goes for software development.

    Extra reading:

    Reason Two: Tech choices

    Sometimes overhauling the tech stack and rewriting the code doesn't make much sense. There may be times when this is a cover for a problem we discovered. But remember: don't you dare to change technology while your tech team is on board!

    There are three key issues that I would like to mention here.

    • Development speed against future scalability
    • Using familiar tech, not the perfect tech
    • Wrong tech choices for a specific team and their know-how

    I have an anecdote for you from the Boffinism blog, that tells the story of an outsourcing partner why it uses Elixir technology instead of Ruby.

    “We wanted to make sure we kept the recommendation engine separate from the e-commerce engine, and using a different tech stack enforces that. And we thought the recommendation logic would be well suited to a functional style, whereas it would all get a bit messy if it ended up inside an ActiveRecord model. And Elixir is a straightforward language – any developer worth their salt should be able to pick it up easily.”

    So, let's go back to the risk we started with. There are several answers to the problems mentioned above.

    Without trust, there is no point in outsourcing anything. If you've made the decision to outsource software development to an external party, you should be ready to trust them in technology choices. Your particular familiarity with technology X does not mean that X is the best to achieve the specific goals. And for this trust to make sense, first you have to trust the understanding of your business goals by the partner. After all, tech is there to make money.

    Make tech decisions based on data. Ask yourself which tech and tools fit my project and team-best? Choose your technology partner well based on your reasoning about possible synergy with your resources and choose the best suited technology.

    Ask yourself if the partner has adequate manpower and know-how to work on your project and be on the same page with the team you might have on your side. The tech background of your partner is their most important asset, and you'll be surprised about how cohesive a company like us might be in terms of delivered quality and maintained standards, regardless of who's the actual person behind a given task.

    And do not outright reject diverse technology stacks used by different elements of your application. The criterion here is whether the variety of technologies can bring tangible benefits.

    Extra reading:

    Reason Three: Time Management and Trust

    Bad time management and the missing link of trust are the third key reason for software development outsourcing failures. What symptoms does this issue show in our projects?

    • First, micromanagement is essentially a lack of belief in the ability of the software development team to self-organize properly.
    • The lack of understanding of software outsourcing characteristics and practices. You might only be interested in the results such a collaboration should yield, and rightly so. But there's plenty of benefits that you will reap from understanding developers' work routines.
    • Top-down-only estimating, leading to schedules being unrealistic to the point at which it puts business goals in jeopardy. It is kind of linked to something we wrote about earlier - the war between expectations and reality.

    To give you an example I saw during my career, a company outsourcing the software development I worked for had a client and that client starts to questioning the expertise and professionalism of the outsource development team. The reason was that works that we moved further and further in time until they become problematic took way more time than estimated. Which contributed to unhappiness of both parties because it raised doubts about the outsourcing partner’s professionalism and keeping up to standards the client expected.

    So, despite the collaboration lasting a few years before that, this became a reason to lose trust for each other and finally sever ties.

    There’s a few things to consider when dealing with problems of trust and time management.

    The outsourcing team is both autonomous and a part of your team. It won't work identically, but it’s essential to reach a cultural fit between both companies.

    Remember that the software outsourcing company is the extension of your software development team and that is how you should think about it. However, there needs to be some autonomy and self-organization. The team won't be happy to perceive themselves as just pieces in the outsourcing puzzle.

    If you’re struggling with micromanagement, establish an "everybody owns some area" rule, however small that area is.

    This is an approach that advises splitting responsibilities of the outsourcing development services into subtasks and therefore clearly delineates who does what.

    Well, trust is the main essence of this discussion. Software outsourcing is not only a method of economic optimization but also cutting excess processes. It's a kind of temporary dependence on a partner in new areas. So if this thought scares you, perhaps software development outsourcing is not for you.

    Extra reading:

    outsourcing industry software engineers future projects eastern europe broad range software testing app development dedicated team internal resources business process inquiry outsourcer for failing stop outsourcer failing to web applications development companyi.t. outsourcing companies outsourcing failure service provider  outsourced project outsourcing provider

    Reason Four: Communication Issues

    The fourth failure-inviting factor could be described as a desperate "talk to me please" calling, or the problem of lack of communication.

    I think the key aspect of communication of software development outsourcing that can be problematic is something linke an "I want AAA but you want AAB kind of scenario", where the client and the development team have contradictory expectations of some ideas.

    Oftentimes, there's a habit of belated reviews and feedback, and the following issue of having to get your work up to date with recent external developments without adding much business value to it, and - lastly, but perhaps most importantly - bad formulation of requirements or even complete lack thereof.

    Instructions unclear, outsourcing failed

    To give you a more specific and serious example I've seen with my own eyes, with the certain project, the duties of the CEO and CTO overlapping - especially when it comes to the software development team and issuing requirements. So I think responsibilities were being transferred between them at that time.

    Increasingly conflicting requirements and unclear channels of communicating important information automatically lead to growing frustration in the outsourcing project and new features will be significantly delayed.

    Thankfully, millions of books and articles and podcasts were made to give us some answers as to how we can improve project communication. Especially with the team that develops software for a client.

    Give the outsourcing team freedom in making decisions, where your input is not really needed. The more decisions need the input from the top level of company management, the worse for your project in terms of difficulty managing it – don’t be afraid to leave certain areas to be handled entirely by the outsourcing company who’ll take full responsibility for them.

    Make extremally clear who is responsible for what area and who makes decisions. Always make it clear with the outsourcing team - it will alleviate people’s stress and reduce the decision-making overhead.

    Expect honesty, especially with scheduling estimates. This is very important because the lack of honesty with the software development team makes the estimates being unrealistic and... there we go again with the unrealistic schedule. Do not expect the estimates to match of your expectations, but expect information from the development team as to where old estimates were wrong.

    Do not be the only channel of communication between in-house teams and outsourcing teams. Set up ground rules for regular lower-level communication.

    Avoid requirements ping-pong by unambiguously crafting them the first time around. If you need a framework that allows for flexibility in defining requirements, get interested in Agile methodologies that give you some headroom for changes when needed, while creating strict rulesets for what the developers need to work on during a certain sprint or other defined periods.

    Extra reading:

    Reason Five: The Human Element

    Wrapping this up, the last key reason for software development outsourcing failures is often neglected but is equally important as the other reasons and maybe more in some cases which is the human element of working in outsourcing projects.

    Well, there are many metaphors management gurus used to describe relations in a team. Mostly, they just add an unnecessary and – worse still – untrue layer on top of what most understand perfectly well.

    NO - your team does not have to be like a huge family.

    NO – it does not have to be like a professional sports team or as a pack of buddies.

    Most of us do not have to be talking, but we know that we have our egos, ambitions, desires, strengths, and weaknesses as individuals.

    Software development is a team effort and each part needs some validation to feel like the work is worth it. And YES, money is validation too before you ask.

    What people think my motivation is, versus what my motivation actually is.

    So that's the case of someone with a very specific kind of ambition but people's ambitions vary and according to StackOverflow surveys, these are aspects they look for when they are looking for a job.

    Apart from very technical factors like languages, framework, technologies to work with and so on, there are a lot of human factors in this like office environment or company culture, opportunities for professional development which is ambition thing, how widely used or impactful my work output would be, which is also directly related to human ambition.

    What developers really value - apart from money, tech and business aspects.

    The human factor is very important in keeping software developers happy.

    I can perhaps tell you a personal anecdote, which is about a project I was involved with.

    In my beginner years as a developer I worked on a big project which involved several technical debt problems, legacy technology usage, and so on. And right from the beginning of my involvement, there were two developers, myself and someone else, and the latter slot was filled by different people throughout that time.

    Because I adapted to certain stances everyone was happy about my contributions and so was I for some time. But it was always like the other developer, whoever it was, seemed to be struggling with communication, late feedback, the huge amount of time to deliver anything.

    So while that client was happy with my contributions, was the company I worked for, while the other developer that worked with me, always eventually got rotated out of the project. In most cases that was at his or her own request.

    Over time, I felt increasingly burned out and frustrated, because I felt my desire for challenges just wasn't fulfilled in this project anymore. But it was increasingly hard to take me out because I grew to be the only person who knows the ins and outs of certain areas in the app.

    Finally, the outsourcing collaboration ended because I asserted my desire to jump out. I was burnt out at that time and there was no belief that someone inside the team could replace me in this specific project.

    So if I were to point out a few ideas about how to ensure developers stay happy on a human level, here’s some:

    Remember that development is a team game and every developer is different.

    The parts of the team have personalities, ambitions, and temperaments and you can't cancel those.

    In the second place, do make an experiment and imagine a top dev gets hit by a train tomorrow. Can work continue soon? How resilient is the team from emergencies? Whatever we do even if we have perfect team management, team, and other factors there is always a risk of random events or personal or professional burnout which can happen to anybody.

    It is possible to have every project run in such a way that rotating team members, replacing someone with anyone else, shouldn't be a problem in an emergency case. It's also a practical exercise to keep people engaged in the project and take a fresh look at old issues regularly. The motivation for this is to avoid dead ends where specific know-how is only in one person.

    Give both teams validation!

    Do vocalize that the job the team is doing is important and valuable. Appreciating people has been shown to work. Be open about which part of the work you value and what positive effect you see.

    And finally, without being too cheesy - make sure that a project is a form of challenge for the development team, so this is like a challenge to overcome.

    Extra reading:

    top software outsourcing companies in house team established quality assurance process business analysts project scope software solutions web apps technology solutions intellectual property rights agile development outsourcing firms


    Why do software development outsourcing projects fail?

    Software development outsourcing can fail due to mismatches between expectations and reality, poor technology choices, inadequate time management and trust, communication issues, and neglecting the human element.

    How can unrealistic expectations affect outsourcing success?

    Unrealistic expectations can lead to mismatches in understanding the project scope and deliverables, resulting in dissatisfaction and project failure.

    Why are technology choices crucial in outsourcing projects?

    Wrong technology choices can limit the project's future scalability and may not align with the team's expertise, leading to inefficiencies and project setbacks.

    How does time management and trust impact outsourcing?

    Poor time management and lack of trust can lead to micromanagement, unrealistic schedules, and a breakdown in collaboration, undermining the project's success.

    What role does communication play in the success of outsourcing projects?

    Effective communication is essential to align expectations, provide clear requirements, and enable efficient collaboration between all parties involved.

    Why is the human element important in outsourcing projects?

    Acknowledging individual needs, providing validation, and maintaining a healthy working environment are key to keeping the team motivated and productive.

    Michał Buszkiewicz, Elixir Developer
    Michał Buszkiewicz Curiosum Founder & CTO

    Read more
    on #curiosum blog