A customer trusting you for a project, puts a great deal of responsibility on your shoulders. You have to deliver a product that meets high quality standards, and is better than the competitive systems coming up in the market. But what does it take to deliver a high quality product?
In simple terms, your software is said to be high in quality when:
* It meets customer requirements and satisfaction.
* It is (close to being) defect-free.
* It is delivered as per the committed schedule.
Following are ten essential elements that I think contribute to delivering a high quality product:
The success of a project largely depends on the amount of thoughtful process applied to plan it. Whatever be the task ” be it big or small, it is important to plan for it. List the activities involved in the task, and lay down the various milestones that need to be achieved.
Of course, in doing that, it is important to understand the customer's requirement clearly. Deliberate on the customer's requirement, get your understanding confirmed from the customer, and then prepare a plan.
Nowadays, the emphasis is on making use of agile methods for planning. The customer requirements may change every now and then; your plan should be able to adapt to those changes quickly and easily.
To prepare a realistic plan, making use of past data (collect metrics for the products developed earlier ), and the resources that you have in hand.
|Figure 1: Planning for a project|
Using historical data for planning will lead to better estimates. Your aim should be to reduce the gap between the “estimated time” and the “actual time spent” for an activity.
One can use a Work Breakdown Structure (WBS) to chart out the Project Plan. The entire project is divided into various set of activities, which are then broken down into various sub-activities as shown in Figure 2 below .
|Figure 2: Breaking a task into sub-tasks|
In software development, commitment is an agreement between an organization and the customer, where the organization promises to fulfill some or all the requirements of the customer.
When making such a commitment, it is important to not over-commit to the customer. Do not promise more than what you can deliver. Wouldn't itt be better to under-promise, but deliver more?
3. Tracking of tasks
Track your tasks on regular basis. Set specific daily/weekly targets. Tools like Gantt Chart can be used to monitor the project progress and keep a track of the various milestones achieved/to be achieved. While monitoring the tasks, ask the following questions:
* Is my task on schedule? Check the deadlines.
* Is there any delay? If yes, then why? Were there any unforeseen issues? What could have been done to avoid such a case in future? [Please note that deliberating on these points would help you in making future estimations ]
* Do I need to re-evaluate my plan?
In case the project progress is not as per schedule, update the plan. Reschedule the plan, using the lessons learnt. And always keep the customer informed of the status.
You should see to it that there is no rushing to complete tasks at the eleventh hour. Avoid last minute panic. Last minute scribbling may fetch you some marks in the exams, but can prove costly when applied in the software development.
4. Being honest
Be honest to yourself and the customers. Never get tempted to please the customer, by providing false information.
Do not try to sweep things under the carpet. Whatever be the status, your customer must be promptly informed. Hiding facts will have disastrous consequences in the long run.
5. Humility and Courage
Humility and courage are vital components in developing any high quality product. You must be ready to accept your mistakes, and have the courage to learn and improve upon them. As “human resources,” we need to improve continuously.
6. Team Work
What is the difference between a community and a team?
A community involves a group of people living in a particular local area. A community may have winners/losers. A team, on the other hand, involves a group of people, striving for a common goal. There should be no winners/losers within a team.
Functioning as a team is a skill. Delivering a high quality product is not the responsibility of just a single individual. It's the entire team who is responsible for it. If the product fails, each team member bears some responsibility for it.
7. Peer Review
Review is an important part of team work. Peer Review refers to participation of team members in the development and assessment of task/activity performed by an individual.
In the Peer Review process, a member who wishes to get an item ( such as 'X' ) reviewed will send a mail to the team with a request for review.
Now, the team members review the item 'X' and send their review comments for the same.
Benefits of the Peer Review Process include:
Enhanced information sharing: Through peer-review, each team member gets to know about task done by other member. In this manner, though all the team members may be working on different phases/modules, the result is that, in effect, all of them work together on all the phases.
Early detection of defects: During the review process, a selected approach may be identified as incorrect, or can lead to problems at a later stage. Thus, the peer-review process enables capturing defects at an early stage.
Plenary review enhances quality: Suppose a team comprises of 10 members. An artifact which is sent for review would be reviewed by 10 members, individually. So, as a result, the document is reviewed to its plenitude.
Review at one's own pace: Each individual has his/her own pace of understanding and grasping things. During an on-the-spot review, certain issues might get un-noticed. But this is less likely to occur during an offline review, where an individual can analyze/review at his/her own pace.
8. Quality Assurance and Quality Control
Quality Assurance involves checking that product is defect-free and meets customer requirements. Quality Assurance is a part of the entire software development process:
* Requirement Specification Preparation
* Design & Algorithm-Writing
* Coding & Unit Testing
* Integration Testing
* Peer Reviews, Meetings
Quality Control is the final check before delivery of the product ( for example, the Regression Test ).
9. Prevent defects and catch them early
A quality process should produce close to zero-defect software that meets the user requirements. Following points should be kept in mind to prevent defects:
* Avoid introducing new defects in the code.
* Use a checklist.
* Code should be simple. Simple code is easy to maintain.
* Complex design leads to poor testability.
* Design should be central to the user.
* Test as you code.
* Change of code should support ease of testing, debugging and modification.
By catching defects early, the amount of time spent in later phases, such as Test, is reduced. Software Engineers are encouraged to perform rigorous reviews at each stage of software development. Reviews must be performed at the design and the code stage to capture defects. Use of checklists is recommended to ensure that the mistakes are not repeated.
10. Product Responsibility
The principle of 'Caveat Emptor' (buyers beware ) implies that the customer is responsible to check the product before buying. However, in software development, you need to apply the principle of 'Caveat Venditor' (the seller is responsible to check for completeness and correctness of the product ).
In this context, make sure that before shipment all items are correct and complete as per the agreement.
As a rule of thumb, you are successful if you are able to make your customers strong enough to stand against their competitors. By applying the above practices to your software development process, your product will speak volumes about its quality!
Deepti Sharma is team leader in the programmable tools business unit of Acme Technologies Pvt. Ltd. She can be reached at firstname.lastname@example.org .