At this stage you will have gathered lots of information about your proposed software; this information will now be used to design the logical components of your system. This step increases the chance of success of your project. Carrying out this stage put in place a plan of development for your team. By defining the components of your system in this way most of the leg work has already been done. Everybody in your team has a well defined path to follow and the team will be able to spread the work load effectively throughout the team.
The design stage can and most probably will involve defining the data model. Modelling the data is a really important stage within the design stage. At this stage it is important to make the data structure as robust as possible. Normalization is a technique that helps to create a more robust data structure by separating out similar data and removing redundant data from the model.
Understanding Object Orientated techniques can vastly improve the success of your project. These tools allow you to take a lot of the guess work out of the developer’s hands as they write code because they are now working to pre-defined targets. It can really improve a developer’s work output, by giving them a structure to work against.
Modelling the system out into components improve the structure of the software, it also improves the ability to make changes at a later date to the software without causing any disruption to the working system that you will eventually put into place. The components are usually made up from information that the system uses. This can be a lot similar to the data modelling aspect of your project. The main difference though is that the information held within these components is more likely to get transformed throughout the processes and the data that remains static throughout the processes can be persisted to a database. This section you could say was the input to the system as it gets transformed into the output by the processes carried out by the system/software.
As well as modelling out the static structure of the software it is also useful to model out the behavior of the system. Such as the processes that will be carried out by the system when the user carries out an action on the software. This is where the information gets used to carry out processes, actually doing what the system is meant to. So you could say that this is the middle part of the system diagram.
There are lots of modelling techniques around today for developers to work with. But the more popular one is UML. This framework gives you the ability to speak with your developers and allow them to communicate the various stakeholders of the project without confusing anybody with technical terms.
User interface design is a serious component within the design stage and by now you should have already gained an understanding about the users and their habits through the use of prototyping. Companies can spend upwards of a million pounds/dollars on getting this right. How the user interacts with your software can make or break its success. And it is not just about the colour and look of the software. How the users interact with the software is really the make or break of many projects. This is really a subject that should be understood as much as possible. Making the software intuitive is always a good start and by testing out the designs of your system, using prototyping can help weed out the bugs in what can seem to be the hardest part of getting your software right. The only reason why this could be potentially a disaster is the human element, people are the hardest things to predict and the behaviors and attitudes will affect every part of the user interface you put into place.
Looking ahead, this is the time also to start to write tests for the software you will be using. This stage will be important as it will make you aware of any bugs in the software. Test Driven Development (TDD) is a framework that has received a lot of praise is years of late and will probably become a major part of courses that teach software development. The technique requires that you write the tests before you start to develop and then you write just enough code so that the test case passes. Writing code this way can make software extremely robust, but has the downfall of being the long way around a problem. Writing the tests can seem a bit tedious because you should write a test for most if not all of the functionality of your project. So writing a test to check whether a button is calling an action or that data has been transform as part of an event, is important.
Check out Part Three where we discuss the Implementation Stage