Yes, You Can Review Your Own Work!

In last month's column, "Reducing Your Cost of Quality", I listed "Structured Personal Reviews" as being a highly effective appraisal method. This resulted in e-mails from multiple people asking me about that topic. So this month, I will explain what I mean by this term, and explain how you can make your reviews effective.

What is a "Structured Personal Review"?

Peer reviews and software inspections have been written about and used effectively in many organizations over the past two or three decades. They have proven to be very effective in improving the quality of software systems before the testing process even begins. These methods have many benefits, and any organization would be well served by them.

But they have one very large downside. Doing them requires the cooperation of others within your organization, especially management. If you cannot secure the necessary support for those methods, you cannot do them. This fact leaves many software professionals who wish to improve their quality performance with few options for getting started.

A personal review is just what the name implies: it is a review that is done by an individual on his or her own work. It is a peer review without the peer. It is an inspection where the author is the only inspector.

But, can you really review your own work? Many people have tried to do self-reviews and have found that it is very difficult to do them well. I know, because I did! I was reviewing my own work before I learned a Structured Personal Review process, but rarely found more than 20% of my own defects.

The key to making a personal review effective is "structure". This column very briefly sketches the structural elements that helped me to quickly improve my own personal reviews from below 20% effectiveness to over 70% in a matter of a few weeks. I did this using the Personal Software ProcessSM (PSP) from the Software Engineering Institute (SEI), which contains the best example of a Structured Personal Review process.

Knowing What to Look For

The point behind reviewing your work is to find defects in your work products and remove them quickly and easily. So doing an effective review requires that you know what you are looking for. How can you know what mistakes you made this time around?

The best predictor of the defects in your latest work is the defects that were in prior things you produced. We humans tend to be very consistent, and when it comes to defects, we are painfully consistent! But this consistency means that we can harness the information we have from prior projects to guide us in doing effective personal reviews.

What we need to do is to build a record of our personal defect history. Most organizations use a defect tracking system, so you already have a lot of information to start with. Go through the data and glean out the defects that were in your products. Here is part of your defect history. I say "part", because it does not include the defects you removed during compile, unit test, and any other activities that happened before the defect logging started. But it is a start!

To fill in the rest of your defect history, you will need to start keeping track of the defects you find on your own, whether it was during your reviews, compiling, or unit test. After a short time, you will have a pretty complete picture of the defects you commonly inject in you work.

For each defect, you want to determine:

With all of this information about your own defect history, you are now armed for the next step.

Guiding Your Review

The mounds of data you compiled during the previous step will not be terribly useful unless it is distilled down to its essence. The best form for this information is a checklist to guide your review. A review checklist should be specific to the work product that you are reviewing, so if you do multiple types of work, you should segregate your defects into a different checklist for each type of work.

For example, a programmer who writes in two different languages will need three or four checklists; one for reviewing code written in each language, and either one for reviewing designs, or one for reviewing designs for each language (depending on how different the designs or design methods are).

Each checklist should be specifically focused for the task at hand. For example, don't include design defects in your code review checklist; put them on the design review checklist, and expect to remove them before you write the code.

Word your checklist items to describe what should be true of the work product, not the problem you want eliminate. For example, if you sometimes forget to initialize a variable, the checklist item should say, "All variables are initialized." not "Forgot to initialize a variable."

And each checklist should be no more that one page long. If they become longer than this, your review process will start to lose its effectiveness. Combine and group items if necessary to reduce a long checklist to a single page. Or, eliminate defects that are either rare, or cost very little to fix later. You want to end up with checklists that are short, and have the highest value items on them.

The Personal Review Process

After you have studied your defects and created your checklists, you are almost there. The final piece of an effective personal review process is the process itself. Your process should guide you in a systematic way to check each and every work product you create against each and every item on the appropriate checklist. Many people find that the process I use works well for them:
    1.
  1. Write down the time when you start the review process. 2.
  2. Print the checklist 3.
  3. Print the work product 4.
  4. Read the first item on the checklist 5.
  5. Scan the work product looking for lines that this item applies to (Most people can do this level of scanning at the rate of two to five seconds per printed page of program code.) 6.
  6. When you come across a line that the checklist item applies to, quickly check it. If there is a defect, circle it and continue with your review. (Don't fix it during the review, as this will break your rhythm.) 7.
  7. When you reach the end of the work product, place a check mark next to the item on the checklist. Treat this seriously, as if it is a certification that the checklist item it absolutely true for that work product. 8.
  8. Read the next item on your checklist and repeat steps 5 thru 7. 9.
  9. When you reach the end of your checklist, you are done reviewing that work product. If you have other work products to review, print out the next one, and continue with step 4. 10.
  10. After you have reviewed all of your work products, fix each defect that you found, and record the information for each defect that was listed in the prior section. 11.
  11. If you found defects that were not represented on your checklist, consider adding items to your checklist. 12.
  12. Write down the time you finished the review process. Count the non-comment lines of code (LOC) that you reviewed, and compute your review rate (LOC per hour).
The key to making your personal review effective is to check each and every checklist item against each an every work product, and to avoid rushing the process. In the Personal Software Process, we teach students to review at a rate of 200 or fewer LOC per hour. Most people have to work pretty hard to review their code that slowly. It is not unusual for people to start out at rates of 500 to 1000 LOC per hour.

Most people's data shows that going much faster than 200 LOC per hour results in ineffective reviews. And their data also shows that reviewing slowly does not result in a productivity hit, because every additional defect they find in the review represents time saved during Unit Test or later in the project.

Making Your Personal Reviews Effective

Doing structured personal reviews is one of the most effective ways to find and remove defects from your work products. But its effectiveness will not be automatic. You should watch your data and let it guide you in determining how build your effectiveness over time. Here are some specific numbers so to watch: Structured Personal Reviews are the best method for removing defects from our work before we pass that work on to others for additional work, testing, or use. They can be done, even when the rest of the organization will not cooperate in doing peer reviews or inspections, allowing you to improve your quality performance, even as the rest of the organization lags.

All it takes to get started is to take some time to look at your data, learn from it, and start to act on it. Your own data is powerful. It can be your stepping stone to superior performance!

P.S. If your organization already does Peer Reviews or Inspections, Structured Personal Reviews will still provide significant benefit. Some organizations that have added Personal Reviews on top of their Software Inspections have reported dramatic reductions in system test time, and a few cases where no defects were found in the product after release!

The Author

Alan S. Koch, PMP, author of Agile Software Development: Evaluating the Methods for your Organization, speaks, writes, and consults on effective software development. He is an SEI-Authorized PSP Instructor, and he welcomes your feedback and questions; send e-mail to Road2Quality@ASKProcess.com. Visit http://www.ASKProcess.com to learn how to improve the return on your software investment by focusing on the quality of both your software products and the processes you use to development them. SM "Personal Software Process" and "PSP" are Sales Marks of Carnegie Mellon University.