Our ProcessWhy ChinaWhy Outsource
It is an unfortunate fact that, world-wide, half of all I.T. projects fail in some respect. Some do not meet the business' deadlines, others go over-budget , or don't meet the requirements of the end-user and so are never used. Up to 30% of those projects that are commissioned are in fact never completed.

Bit-Simple Ltd. has never been involved with a failed project, and we attribute our success in this field to our robust development process. Our process is built on the cornerstones of, auditability, peer review, repeatability, rigorous software assisted testing run at regular intervals. We also pride ourselves on flexibility and being willing to accommodate to each customer's needs.


The the process we describe below implies a single delivery of software at the end of the project. In fact many projects don't work like that. We are equally at home delivering systems on a feature driven basis, where we hand over valuable features at the earliest possible opportunity for your business to use. We can then add to those features on a regular basis according to your needs and respond flexibly to new or changing requirements. In this situation steps 6 to 16 below may actually occur many times over the course of a project.
Our process has the following major stages after our customers first contact us.

1. Requirements Gathering.
2. Requirements Analysis
3. Estimation
4. Project Planning
5. Quote
6. High Level Design and Test Plan
7. Component Design and Test Plan
8. Unit Design and Test Plan
9. Unit Development
10. Unit Test
11. Component Test
12. System Test
13. Acceptance Test
14. Handover
15. Training
16. Post Delivery Support

Each of these steps is closely guided by written standards and practices that ensure nothing is omitted and that our work always conforms to the highest quality.

Requirements Gathering

This stage is where we find out what our customer wants. We read the information they have sent us, we ask questions, we learn about their business needs and how this system will fit in. We understand that our customers are experts in their own field and that to provide the solution they want we must listen and ask questions

Requirements Analysis

Of course now you have told us what you want, you will naturally want to know how long it will take and how much it will cost. It is vitally important for your business and ours that these figures are accurate. The purpose of this stage is for us to determine with some accuracy what we will have to do to delivery your project. The possible structure of the finished software and what risks and unknowns exist in the system's delivery. This is a team activity normally involving several senior designers, depending on the size the project.

Project Plan

To give an accurate delivery date or accurate cost we need to consider the customer's deadlines, we must plan how the work would be distributed amongst a team of engineers and how many staff are needed. We consider skills needed at different times in the project. Production of different items including designs and test plans. We perform a risk analysis of factors which could contribute to any mode of project failure and we plan specific actions to manage risks and mitigate the impact should they occur.

We analyse the scope of unknowns within the project and plan early investigations to resolve them consider various delivery models and discuss these with the customer.Possible delivery strategies include phased delivery, or feature driven development.

Quote

We can now provide a definitive cost quote and a project plan for delivery. We are able to back up these figures with our analysis of the project and demonstrate that our estimate is reasoned and practical, and in doing so give our customers early confidence in the completion of the project.

In some cases we may work on a time and materials basis if the project is open ended or relies on deliveries from other parties.

We also consider risk-sharing arrangements on a case-by-case basis.

High Level Design

High level design is performed internally for all systems. For very large or very novel systems we may perform an architectural design as a prelude to this, but in many cases we can deploy standard software architectures, that we are very familiar with. High level design allows us to perform peer review on the senior designers intentions. It allows us to sub divide later work between teams of designers or implementers, by defining the functional areas of the system and the interfaces between them. Other outputs from this phase may include message specifications, persistent data specifications, shared memory specifications etc. although an individual project may choose to document these in the corresponding component design phases.

Component Design

Systems with components developed by different teams will develop component designs, showing the units of functionality within the component, the interfaces between units and their responsibilities. We also design the tests that will demonstrate the correct working of the component.

Unit Design

On critical or large projects designs will be produced for each unit of functionality allowing peer review at the lowest level. In addition a test plan is specified to demonstrate that the unit behaves correctly. The exact definition of a unit will depend on the language and technology in use.

Unit Test

Unit testing is performed by writing reusable suites of automated tests to exercise the unit of functionality in the manner proposed by the test plan. Unit testing normally has strict code coverage requirements to ensure that the software has been sufficiently tested.

Component Test

After the basic units of code have been verified we put them together and verify the major components of the application. Once again we write automated tests to show that the components meet their design, and later we run these tests regularly to show nothing has broken.

System Test

Where we put the monster we have created together and see if it sits up. System testing normally involves writing automated suites of high level tests, but may have a manual element in some cases.

Acceptance Test

At the beginning a customer asked us to make some software. During acceptance testing we demonstrate what we have and show that it meets each of their requirements.

Handover

At this stage the customer takes over the system we have made. We provide support and assistance with installation, configuration.

Training

We can provide many forms of training, including documentation, remote assistance and user support.

Post Delivery Support

After delivery we provide a warranty period, for faults. We also provide a user support service which may be extended on a subscription basis.