How to reduce the cost of software development

This post explores a number of tactics you can use to reduce the cost of software development.

So, let’s cut to the chase. How do you do it? The short answer is: you need to play your part. You need to learn how the software development business works. How deeply you want to get involved is up to you, but you need to at least understand the basics – how things work, who is involved, what is required of you, what to ask for, and what you can expect.

How do agencies estimate the cost of software development projects?

Work estimates determine the amount of effort (and thus cost) required to produce a piece of work. It also affects overall timeline estimates. From a developers’ perspective, getting a project estimate right is a delicate balancing act. If a developer estimates too high – they may price themselves out of an opportunity. Going in too low (underestimating work) could lead to potential losses and can be devastating to an agency.

Understanding an agency’s sales process

To compound the issue, for a development agency, the sales process is labour intensive – and thus time-and-cost “expensive”. The developer needs to weigh how much energy they’re willing to invest in doing a work effort estimate in the first place, as they would need to gain a deep understanding of the project requirements to do so.  And there is always a measure of guesswork and expectation management involved. 

Profit margins in the software development business are relatively thin. And there’s continual downward pressure on prices due to basic market forces. Any customer can take the hourly rate of a developer, times it by 168 hours, and get an idea of how much they are paying for individual team members. Once they know this, they can do a bit of research on recruitment sites, and calculate the true cost of the same resource.

Once a typical customer has this information, the next logical thought is – “maybe I can get a better deal hiring someone full-time instead of outsourcing it to an agency”.  There is no way a customer will pay more than 150% than the base cost of a resource – in other words, if you know a specific type of developer’s salary is, let’s say $10,000 per month, a typical sensible customer would not be willing to pay more than about $15,000 per month for the same individual before they start considering their options.

Running a successful development agency is thus largely an exercise in risk management. For every poorly executed project, an agency would need about 4 successful projects to recoup their losses. 

So in order to reduce the initial cost estimate of your software development project, you need to present yourself as a low-risk customer. That way you would create the kind of comfort with the developer for them to provide you with a reasonable/aggressive estimate for the work.

How do agencies estimate the cost of software development?

An agency will estimate the cost of a software development project as follows: 

Work estimate = a) the work multiplied by the b) uncertainty factor, multiplied by c) the risk factor. 

Let’s see how this plays out.

Imagine an agency is doing an estimate to determine the cost of a software development project. Let’s say the actual work effort to deliver the project amounts to $100,000 – base cost plus a 25%-35% profit margin. Here’s how the project could be priced factoring in risk and uncertainty: 

Work estimate = (a) base cost x (b) uncertainty x (c) risk

Project base cost or “true” cost = $ 100,000

A low-risk, low-uncertainty estimate: ($ 100,000 x 110%) x 110% = $ 121,000

A high-risk, high-uncertainty estimate: ($ 100,000 x 200%) x 200% = $ 400,000

Note: in both scenarios, the project scope has not changed, just the perceptions of the team doing the assessment (based on risk and uncertainty).

The estimating exercise is also to “testing of your budget/appetite”. And in no other industry is Parkinson’s Law as applicable as in the software development business:

"Work expands so as to fill the time available for its completion" 
- Cyril Northcote Parkinson.

Getting this initial assessment part right – during the sales process – is a major opportunity to reduce the cost of your software development project. 

What are the agencies’ risks, and how does that affect the cost of software development?

For an agency, time is money. Their highest costs are people – human resources, as their primary income is from professional services. It’s basically time-share for human resources. And for an agency, you can distil the major risks down to:

  • Does the customer know what they want?
  • Do they know what they are doing?
  • Are they easy to work with?

By creating a level of comfort with an agency, you can present your project as a low-risk proposition, and in turn, they will be a lot more aggressive with their pricing, and flexible with their approach and timelines.

Uncertainty: “Do you know what you want?”

Pricing is based on effort, and effort is based on requirements. If you are not clear about what you want, then the developer cannot tell you how much it would cost to do the work. That part is kind of logical. This is how developers estimate their “uncertainty” factor.

Uncertainty is not necessarily a problem. Developers, agencies, analysts, designers are experts at turning your ideas into products. However, there are many opportunities to do some of this work for yourself or to manage the process in such a way to ensure you get good value and results from your efforts. 

Alternatively, if you don’t quite know what you want, you can also manage the perception of “uncertainty” by demonstrating an appreciation for the process, and a command of the methodologies.

In this way, the “uncertainty” factor is a major driver in determining the cost of a software development project.

Risk: “Do you know what you are doing?”

Douglas Crockford (developer of the JavaScript language and JSON data interchange protocols)  is credited for saying:

“Computer programs are the most complex things that humans make.” 
- Douglas Crockford

It takes a specific combination of skills, processes and chemistry to deliver a successful project. From an agency’s perspective, a good customer is either someone that:

  • Has a lot of experience building software (add 10% to 30% risk factor)
  • Does not have a lot of experience building software, yet willing to learn and easy to work with (add 20% to 80% risk factor)

A bad customer for a development agency is a customer :

  • Who doesn’t have any experience building software (add 20% to 80% risk factor)
  • Who is stubborn, unwilling to learn and inflexible (add 100% to 400% risk factor)
  • With an uncooperative, confrontational or combative disposition (typically agencies will avoid doing work with customers like this)

Keep that in mind as you engage with developers or agencies. The amount of risk you present to an agency will directly affect the cost of your software development project.

How do you manage uncertainty and perception of risk?

You need to know how development projects work if you want to make any significant contribution – and reduce the cost of the software development project. It’s all about people and processes.

How do you manage a software development team?

In order to get the most out of your team, you need to have a good measure of emotional intelligence, and empathy. Empathy is based on your understanding of your team, how they function, and what pressures they are under. 

In order to get the most out of your team, you need to know:

  • The major roles in a software project. How is a typical team set-up?
  • What do these people do? What are they responsible for? 
  • What does each role produce? What can you expect from them in terms of outputs?
  • How to handle every role-player? How do you manage them? Get the best out of each individual?

How do you manage the software development process?

You don’t necessarily need much technical knowledge to effectively manage a development project. Often times a business owner with a little knowledge and the wrong attitude is a lot more disruptive to a project than a bad developer. You want to focus on the process of software development, and not get too involved in the technical decisions. 

What is important? You need to:

  • Know who does what, and in what parts of the projects. Not everyone is always involved, certain roles do very specific functions, and produce very specific deliverables depending on where you are in the process.
  • Have an idea of how the software development process works – end-to-end,
  • Understand your role – what you need to do. There is a lot of work for everyone, including “business” and freshly minted product owners alike. 

Most of the time, reducing the cost of software development is a combination of managing the process properly, understanding what is expected of you, and for you to play your role effectively in the project.

I will explore these concepts further in future posts.