Sometimes there is an impression that software product development is an arcane art, where strange people (‘software engineers’) perform dark magic in weird languages (‘coding’), taking their sustenance late in the night through a unique diet (‘coffee’ and ‘pizza’). To some extent, this is all true. But the black box of software product development is no cauldron over a fire with ingredients randomly thrown in!
The Software Development Life Cycle
When thinking about software product development, there are a few useful concepts to have in mind. The first is the system within which software product development happens. Companies that focus in this area have defined systems in place that deliver products to the customer that fulfill their requirements, on time and to budget. This system is often called the ‘software development life cycle’ (or SDLC). There are a number of ways that the SDLC can be split into its various parts, but the figure below (from careerdrill.com) encompasses the major aspects.
One of the most important things to emphasize is that the SDLC is intended to be a continuous cycle. In our current environment where technological advance is rapid an there is a need for constant improvement for companies to keep up with their competitors, software development and delivery can no longer be thought of as a ‘one off’ process that is a straight line with ‘requirement’ at one end of the line and ‘product delivery’ at the other.
The SDLC therefore is a useful conceptual way to view software development and how it fits into the work of a company, although it is also handy to think of each individual component as being a little circle of its own with the larger circle where software developers and the client engage and feedback to each other.
Typically, a company realizes that they need to ‘do something’ to improve their competitiveness, efficiency or profitability, and – in this example – a new software tool is identified as the solution.
The software product development company will begin by working through a requirements analysis for the client. This will include addressing issues ranging from the very high level – what is it that the software is intended to do? How many users will need it? Can it be off-the-shelf, or does it need to be a custom software for business development? – to those at a lower level, including an examination of workflows and the determination of the precise user requirements.
From this, the company can then go into the design phase where the new piece of software is designed, with the company working in close cooperation and communication with the client to ensure that the design is on track.
Once the product is at a suitable level of design it goes into implementation – where it is introduced to the client – and testing. These phases are critical as they are the chance for the client to use the new piece of software, see what works for them (and what doesn’t), and what changes need to be made. Once everything is correct, the software is then rolled out for the client.
This does not represent the end of the process, however. Time and the business environment do not stand still, and the product can evolve in the future with new aspects introduced or existing ones enhanced, with the requirements analysis-design-implementation process taking place again.
What to consider in software development?
When undertaking software development, there are a range of aspects that the software engineers and designers will consider, including the following:
• The user experience (UX), notably through the user interface (UI): what will the end user be faced with when they sit down to use the product or pull it up on their phone? The piece of software might have all the aspects that the client wanted but if it is overly complex, then users aren’t going to like it.
• Security. Essential to any piece of software is the level of security that it has for the user and the client, especially if there are public/propriety interfaces.
• Future evolution. Software needs to be able to be able to keep up with future developments. A piece of software that does everything the client wants now but which cannot be upgraded or is not able to evolve in the future is not ideal, not just for the client but for the software product development company as well.
• Integration. Does the software have to integrate with specific hardware? Does it need to be mobile? How much processing resource will be able to be devoted to it? Will it be cloud-based or client-server hosted based? There are a consider range of technical questions that the software designers and developers will consider of which the client will often be unaware.
Software product development can appear from the outside to be strange and mysterious, where the language used can be difficult to understand and the processes unclear. A good software development company will make sure that the client has an understanding of what is taking place and how all the aspects fit together.