How much does it cost to build a software application?
Image you went to a builder and asked “How much does it cost to build a house?”. Most people would agree that a reasonable response would be: “It depends. What type of house do you want?”.
Things like number of bedrooms/bathrooms, square footage, and quality of fixtures and fittings all have a huge impact on the total cost of building a house.
Do you already have land, an architectural plan, planning permission(s)? Is the ground easy to excavate (no rocks), and/or build on (not sand). Is access easy (no cranes) and are there any hazardous materials that need removal?
Other costing considerations include the expertise of the workforce, and how many people are employed at each stage….the list is virtually endless (trust me, I've lived through a new house build!).
It’s the same with software. Unless you have concrete requirements it’s almost impossible to provide an accurate quote (creating requirements in the first place can take a lot of work...would you like me to quote on just that stage?).
Why the disconnect?
People can understand why it might be hard for a builder to quote on a house without knowing exactly what's required because a house is a tangible thing. If asked, they can imagine all the different parts of a house being put together, and it's then not too much to ask them to start pricing all the different aspects of a house build (I'm sure you automatically started to do that with the list of things I outlined above).
Software is much harder to relate to. Let's face it, most people have never really coded, let alone built a complete software system from the ground up, and so it's very difficult to understand what's involved (it might surprise you to know that many developers haven't ever designed and built a complete, large-scale software system on their own).
The problem here is that the day-to-day software applications we use just...work. We take them for granted. When we press a key or click a mouse, the thing we want to do just happens. The complex chain of events is hidden from us. That's exactly as it should be, but this hidden complexity lures the non-expert into thinking that it's easy to replicate.
The simple button example
I confess, this example is not mine. It was devised by our extremely talented creative director (Emma), and I think it’s brilliant to help explain some of the complexities (and therefore cost) involved in software development.
Take any button within any software application you are currently using. Look at it closely. What colour is it? How big is it? Does it have rounded or straight corners? Does it have a border? What text is on it? What font is being used? What color is the text? Inside, how much padding is there around the text? Does it have an icon? What spacing is there around the button? Does it change color/shape/position when you hover on the button?
Each one of these things had to be designed and built. That’s right, the text on the button had to be typed in by someone. The spacing had to be figured out in relation to other buttons or things around it. In your mind’s eye, start thinking how long it might take to figure out and build all of the things I just outlined - for a single button (I'll try and help, it’s easily 10’s of minutes rather than seconds).
OK, so we have a button (that's taken a long time to build), but what does it do? Nothing! It's not linked to anything, we have to design and develop that too. So, let's imagine the button saves some data (perhaps from a simple form). When we click the button, here's a typical chain of events:
Check all data is present (which fields are required?)
Check all data is in the correct format (numbers are numbers, dates are dates, email is email, etc.)
Check if the database is available? (can we connect to it? is it online?)
Check the data isn't duplicated? (e.g., do we already have the data on file from the given email address?)
Create the database query to save the data (convert all data to appropriate format for storage)
Write the data to the database.
Display success message to user
Sounds simple eh? Well, it takes a lot of development work to build this kind of simple functionality. In addition, what about if any of the above steps fail?
If it's a missing data/format error then you'd expect to see a message asking you to fix any issues (again, every single message displayed within a software application had to be carefully entered by someone...and it's probably in a different font and colour).
What happens if the database isn't available? Even worse, what happens if something goes wrong halfway through writing the data to the database...we can't leave half the record missing, so do we try again or roll-back everything?
All this from one tiny little button, and we haven't even started on how the whole system works together, whether different users have permission to use all functions, and what programming language is used (not to mention how the software is tested and deployed for use).
What just happened?
I'm hoping that you are beginning to get a better understanding of the complexities of software development. A software application will not work until every function has been designed, built, tested and in the future, maintained. Every retrieval, save, and display of data has to be thought through. Every formula and calculation has to be figured out, programmed and results doubled checked. Every message shown to you has to be typed in. Every font, colour, image, background and icon has to be set.
The technologies used to solve the problem have to be chosen, setup and applied. Requirements have to be investigated and drawn up, user interfaces need to be designed, and test cases have to be written. Finally the resultant software system has to be deployed and maintained.
So, next time you hear someone ask “How much does it cost to build a software application?”, have a little chuckle to yourself and give the developer being asked a little hug (god knows they'll need one).
Not quite satisfied?
Thought not. You still want to know how much it costs to develop a software application don't you? OK, I give in. How about some general figures (based on experience) to try and give you an idea. NOTE: these are not quotes, so please don’t ever throw any of these back at me especially when the cost for your system is 10x larger:
Low range: $10,000 - $25,000
This is really the minimum it's ever going to cost. Think about an application that does one simple thing without bells and whistles (possibly to calculate something).
Medium range: $25,000 - $100,000
So for this you could possibly get an application that does a few cool things (possibly to record and track something(s)).
Average range: $100,000 - $250,000
Yes, those first two ranges were just to make you feel better. Chances are, your great idea is likely to fall into this price range. This is where you start to get simple reporting on straightforward features.
High range: $250,000 - $800,000
You are starting to get into full enterprise software applications. At this price point you'll get a good feature set and reporting, but still nothing too cutting edge in terms of functionality.
Unique range: $800,000 - $unlimited
Software applications in this range are usually unique and demand in-depth requirements analysis to understand and develop the necessary functionality. They may have a very rich feature set and/or complex calculations.
I've been deliberately cautious with the descriptions about what you'll get for your money, and erred on the side of caution. You may find you get more or less functionality for your money....you guessed it, it all depends!
One more thing
The one area often left out in discussions of software development is ongoing maintenance. Total cost of ownership (TCO) is much higher than the initial cost of development. As a rule of thumb, I often say that you can probably spend about half-again of the initial cost over the first 2 years of the application being released. This could be for new features, bug fixing, optimisation and general updates (e.g., security, new technologies).
There's even more...
To keep this article relatively short, I haven't covered things such as the cost of ongoing support of users, the infrastructure required to deliver the software, the time-scales for development (there's a premium to be paid if you need things done very quickly), etc., etc. Please feel free to take the discussion to the comments section if you're interested in any of these things. Also, let me know what your experience of custom software development has been.