Software development: What am I getting and do I actually need it?
The car-wash down the road from my house has a big sign outside offering their different services. For $20 they’ll pretty much spray your car with a hose. For another $20, you’ll get it waxed and for another $20 they’ll clean the inside too. However, regardless of which service you choose, I’ll bet you would still describe your car as being “washed”.
In a similar way, people think of their software as being “developed”, but within that there are a multitude of services which your developer may or may not be doing. This ambiguity might lead to problems for you later if there is a disparity between what was provided and your implicit expectations.
Most developers don’t have a helpful sign like my carwash does, so it is up to you to find out beforehand exactly what services they consider to constitute “software development”.
I’ve helpfully listed the most common services you might need below -
Assistance with establishing your software requirements
Depending on your level of technical ability, you may already have a complete specification ready to hand to the developer. Otherwise you will need your developer to assist you with this. It can range from a high-level overview of what you need down to the technical specification.
User interviews and personas
How well do you know your current customers? What about your future ones? Getting out from behind the desk and interviewing potential users helps to validate that your solution actually addresses the problem they are facing – all without writing any lines of code.
Prototyping
From low-fi wireframes to clickable prototypes, mocking up the user experience helps improve usability, streamline processes and identify sticky problems before committing to actually building it.
UI and graphic design
Depends on your audience. If people’s first impression of the software is what they see, then yes, you probably want to invest in a good design. Sales and branding products like websites are a no brainer – back office software for five users is no so important.
Building your software
Cue video of a ‘hacker’ typing furiously with the matrix whizzing by on multiple monitors. You’ll need this but make sure you understand what happens after the software has been developed – how will it be delivered, how will it be supported, what happens after they have finished ‘coding’.
Building an extensible architecture
What a mouthful! Think about what your software might look like in a few years with all that added functionality and new features. What would happen when the expected number of users increases by a factor of a thousand? Unless you’re doing a proof of concept, you’re going to want a developer who can ensure your software is designed and built – from day one – to accommodate whatever you throw at it in the future.
Hosting and ongoing maintenance
Chances are you know that a website needs website hosting and that has an ongoing cost. Many modern software applications also need hosting in cloud environments which tends to cost more money than a website would. Once deployed, your software will also need some monitoring and maintenance updates over time too.
Documentation
Make sure your developer produces well documented source code if you are ever expecting to switch developers or take the project in-house at a later date. While documentation can be retrospectively added at very little overhead, it is no good to you if the relationship with your current developer sours suddenly and you are left holding the (software) baby.
Automated deployment processes
Planning to release updates and changes regularly (e.g. at least once a week)? Automated deployment tools and processes will save you a lot of money and stress. Think of it as a little production line that compiles the code, runs tests, and deploys it to your production environment automatically. Nice.
Automated tests
It costs substantially less to fix a bug before it reaches end users so producing a suite of tests which make sure any changes to the software are not going to introduce any regressive bugs and issues. So, unless you are in the very early stages of a product (e.g. MVP) or you are prepared to manually test every time you release the software, it is wise to invest in automated testing. It will pay dividends in the long run.
Software developers will place greater emphasis on different combinations of these services so it is important to understand their value in relation to your software development. It can also explain why different developers will give you vastly different quotes for your software. Some will take your requirements at face value and just deliver what you asked for, while others will implicitly know that you need additional services and include them in the quote. Neither mechanism is wrong - just be aware of this and talk to them about your requirements.