Custom Software Development and Web Application Design
Software projects can be large or small, in-house systems or commercial products, desktop based or web based, etc… Although every project is different, similarities can also be drawn and models employed which help minimize unnecessary work/re-work to ensure everything goes to plan.
Our primary objective is to combine your knowledge of your business requirements with our software development skills. This objective is met through working in incremental stages and concentrating on fitness for purpose (the business value), rather than just the technical aspects.
The iterative software development approach is actually a combination of the Rational Unified Process (RUP) and eXtreme Programming (XP) methods. Based on the commonly accepted fact that a usable 80% of any proposed system can be produced in 20% of the time it would eventually take to produce the total solution. The iterative approach enables incorrect assumptions, omissions, or insufficient understanding of the requirements to be identified earlier on in the project when correction is least costly and least time-consuming.
Whenever possible, we create a small, operational “core” version of the application, to which additional components can be added as they are completed. Through using this approach we can give clients the opportunity to see actual working versions of their proposed system very early on in the project and use feedback to improve our understanding of the requirements.
This is the process of discovering the real needs which the new software must meet. A requirements document usually includes the following kinds of information:
- Who are the users?
- What are their roles and responsibilities?
- What and how will data be inputted to the system?
- What specific outputs (reports, screen-based information, exported data, data feeds) will be produced?
- Are we seeking to streamline or improve existing business practices?
- What specific levels of performance and reliability are required?
- What kinds of extra flexibility not needed now should be built-in so future enhancements will be more economical?
Help, Training and Support
- How will the software be maintained?
- Will business conditions dictate frequent changes and enhancements or will the system remain relatively static?
- Will future responsibility for the system be in-house or contracted out?
- What types of user support will be needed?
- Is extensive context-sensitive online help required?
Should there be a user manual?
It is imperative that we identify those unknowns which could significantly affect the success of a project.
- Can the required performance and reliability levels be met?
- Is there a possibility that users will not like the software and will not want to use it?
- If commercial, will customers buy it? (Although not entirely within our control, there will be certain attributes of the application that will affect the customer’s desire for the product and their decision to buy (and recommend) the product?
- Are any new technologies or environments involved whose reliability is unknown?
- How confident is everyone with time and cost estimates and what contingencies are included?
- What are the critical elements of infrastructure – such as networks, servers, desk top computers, storage systems, firewalls, VPN, SSL, etc…?
- Do we need to objectively test the validity of any algorithms supplied before proceeding further into the project?
- Are there corporate standards which could affect time, cost and/or approach to development of this application?
Project Management and Costing
The fundamental activities in software development are analysis, design, production and testing. Project management is not a separate activity, but is control of the development process and each development activity. The three competing variables to be managed are product quality (i.e. functionality and robustness), timescales and resources.
Whilst tiny projects may only require minimal informal management, for larger projects it is an essential that project management is used effectively.
The main tasks carried out are:
- Proposing the main project objectives and tasks
- Estimating time, effort and cost (using prior experience)
- Procuring any required raw materials or tools
- Evaluating, selecting (or recruiting) and training personnel
- Scheduling (including setting milestones) and budgeting
- Monitoring and communicating progress to management and/or the client
- Identifying problems and adjusting plans
Like the development cycle itself, prototyping must be iterative. The use of Rapid Application Development (RAD) tools such as Microsoft Visual Studio can be a considerable advantage, enabling basic working models to be created in a matter of hours. Quite often several prototypes will be created for the client to evaluate before commencing with the project.
The major benefits of prototyping include:
- Confirmation that requirements have been clearly understood
- Identification of any major technological constraints or issues to be tackled
- Much earlier visualisation of the product
- A more intuitive end product (since feedback will have been fed into the design process from the beginning)
Detailed Analysis, Design and Production
Once the specification has been agreed, and the complex issues and risks identified, the actual software development begins.
First we analyse the requirements. If we are going to produce a system, we need to know what it is and how it will satisfy the stakeholders. In this activity, we capture the context and most important requirements in enough detail to derive acceptance criteria for the product.
New technology brings with it the potential for new and improved solutions to software problems. Some time is usually spent early on in projects evaluating 3rd party components for suitability as they can often help reduce timescales and major risks whilst enhancing the quality of the product.
Once we are well into the design stage, focus is shifted to hunting for the appropriate solutions to the problems presented. Code and prototypes are often used as design tools since they allow refinement as part of the iterative process. CASE tools are usually used on larger projects which allow use cases and potential solutions to be properly explored before any code is written.
Testing serves several purposes. It allows the developer to ensure that all requirements have been satisfied, nothing has been missed and to identify any defects in the code. The application should be tested for:
- Functionality / Performance – including Load/Stress, Response and Link testing
- Compatibility – platform and OS configurations, browsers, connection speeds, languages, other applications
- Usability – coping with input of valid and invalid data