How much does it cost to develop software?
I remember in my early days of software development I worked for an outsourced software development company and we followed a Waterfall approach to software development. We had neat phases that we could assign effort and timescales to and so we could agree a cost for each stage. We prided ourselves on being able to offer fixed cost quotes for any development work that was required. These costs were well defined and plenty of techniques existed to make sure they stayed roughly in line with expectations. The whole nature of contracted software development was focussed around minimizing changes and predicting costs. Don’t tell our customers, but making them happy was only part of the story, the real aim was to deliver what was agreed at the time that was agreed for the cost that was agreed. If the customer agreed to something they didn’t really want, then whose fault was that?
The last stages of any development effort would largely consist of testing, handing over a final version and then into maintenance. How long would the maintenance stage last for? 2 weeks? Perhaps a few months? Maybe we’d offer 3 months of defect fixing free of charge, but after that we could charge for each additional fix.
If it took us 6 months to build the product and we offered 3 months maintenance then the total cost of the product was 9 months. Actually, we’d charge for 3 months maintenance, but only expect to actually work on the product for 1 of those months (if that), so the actual cost would really only be around 7 months. Brilliant, that’s 2 months of being paid for nothing!
Now let’s look at how that has changed now I work for a product focussed company. We take a more Agile approach to software development, so the comparisons are not quite the same, but we can still consider the costs of producing version 1 and maintaining that version. These are largely the same, but now the onus is on us to find the defects and fix them before our customers do. Previously, if the customer didn’t find the defect quickly enough we didn’t need to fix it. If we did need to fix it, then there was also the possibility that we made some more money. As we know, the cost of fixing defects increases with time from when they were introduced to when then they are discovered and fixed. This leads to the cost of maintenance increasing with time rather than having a fixed cut off point as it would with our outsourced development. So now, we are not only more motivated to find the defects (so we find more), we also pay more of a premium to fix them (rather than someone else paying for them to be fixed).
The second factor with working on a product is that you don’t want to just stop at version 1. You want to get to version 2 just as quickly as you did with version 1. In fact, you don’t want to stop at version 2, really great software takes 10 years, so you need to think about all the versions you are going to build over those 10 years.
Let’s compare the use of outsourced development with that of doing it in house. Let’s imagine that by outsourcing version 1 you can reduce the costs by 50%. But, now you have a problem with taking that to version 2. You could pay the outsourced company again to take the software to version 2, but very soon you are going to be tied into their rates and only they will be able to take the product forward. Do you really want your product controlled by a 3rd party?
Alternatively, you could take the product in-house for maintenance and produce version 2 yourself. But, now you have the problem of finding the right people to take ownership of this software. It wasn’t written in-house to your company coding standards and with long term maintenance in mind (remember the outsourced development team only has to get to version 1, version 2 is someone else’s problem). Bringing this back in house is going to introduce a ramp up cost and delay. You then end up paying for the extra overheads of having to develop in-house (which is exactly the cost you were trying to remove by outsourcing in the first place).
So, let’s take a look at the costs again. By outsourcing, you saved 50% of 6 months, but now that the software is back in-house, you still end up paying the full cost for the next 9 and a half years! Even worse, is that you pay back more than you saved in trying to bring the outsourced software back in line as it will take longer for the new in-house team to get up to speed than if you had simply built the product in-house to start with!